Repository: cassandra Updated Branches: refs/heads/trunk adf025bd4 -> 5dc79aafc
add nodetool command 'statusautocompaction' patch by cormoran; reviewed by jasobrown for CASSANDRA-8727 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5dc79aaf Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5dc79aaf Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5dc79aaf Branch: refs/heads/trunk Commit: 5dc79aafceb8dd1b7a985b262f128c59bedb5bf6 Parents: adf025b Author: cormoran <[email protected]> Authored: Mon Aug 28 13:18:57 2017 +0900 Committer: Jason Brown <[email protected]> Committed: Thu Aug 31 06:04:06 2017 -0700 ---------------------------------------------------------------------- .../cassandra/service/StorageService.java | 8 ++ .../cassandra/service/StorageServiceMBean.java | 1 + .../org/apache/cassandra/tools/NodeProbe.java | 5 ++ .../org/apache/cassandra/tools/NodeTool.java | 1 + .../tools/nodetool/StatusAutoCompaction.java | 80 ++++++++++++++++++++ 5 files changed, 95 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/5dc79aaf/src/java/org/apache/cassandra/service/StorageService.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java index bab161a..3e88bb2 100644 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@ -4949,6 +4949,14 @@ public class StorageService extends NotificationBroadcasterSupport implements IE } } + public Map<String, Boolean> getAutoCompactionStatus(String ks, String... tables) throws IOException + { + Map<String, Boolean> status = new HashMap<String, Boolean>(); + for (ColumnFamilyStore cfs : getValidColumnFamilies(true, true, ks, tables)) + status.put(cfs.getTableName(), cfs.isAutoCompactionDisabled()); + return status; + } + /** Returns the name of the cluster */ public String getClusterName() { http://git-wip-us.apache.org/repos/asf/cassandra/blob/5dc79aaf/src/java/org/apache/cassandra/service/StorageServiceMBean.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/StorageServiceMBean.java b/src/java/org/apache/cassandra/service/StorageServiceMBean.java index 46b7253..28c1b36 100644 --- a/src/java/org/apache/cassandra/service/StorageServiceMBean.java +++ b/src/java/org/apache/cassandra/service/StorageServiceMBean.java @@ -594,6 +594,7 @@ public interface StorageServiceMBean extends NotificationEmitter void disableAutoCompaction(String ks, String ... tables) throws IOException; void enableAutoCompaction(String ks, String ... tables) throws IOException; + Map<String, Boolean> getAutoCompactionStatus(String ks, String... tables) throws IOException; public void deliverHints(String host) throws UnknownHostException; http://git-wip-us.apache.org/repos/asf/cassandra/blob/5dc79aaf/src/java/org/apache/cassandra/tools/NodeProbe.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/tools/NodeProbe.java b/src/java/org/apache/cassandra/tools/NodeProbe.java index 267a6d5..a0b0aec 100644 --- a/src/java/org/apache/cassandra/tools/NodeProbe.java +++ b/src/java/org/apache/cassandra/tools/NodeProbe.java @@ -722,6 +722,11 @@ public class NodeProbe implements AutoCloseable ssProxy.enableAutoCompaction(ks, tableNames); } + public Map<String, Boolean> getAutoCompactionDisabled(String ks, String ... tableNames) throws IOException + { + return ssProxy.getAutoCompactionStatus(ks, tableNames); + } + public void setIncrementalBackupsEnabled(boolean enabled) { ssProxy.setIncrementalBackupsEnabled(enabled); http://git-wip-us.apache.org/repos/asf/cassandra/blob/5dc79aaf/src/java/org/apache/cassandra/tools/NodeTool.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/tools/NodeTool.java b/src/java/org/apache/cassandra/tools/NodeTool.java index a117025..de89f61 100644 --- a/src/java/org/apache/cassandra/tools/NodeTool.java +++ b/src/java/org/apache/cassandra/tools/NodeTool.java @@ -122,6 +122,7 @@ public class NodeTool StatusGossip.class, StatusBackup.class, StatusHandoff.class, + StatusAutoCompaction.class, Stop.class, StopDaemon.class, Version.class, http://git-wip-us.apache.org/repos/asf/cassandra/blob/5dc79aaf/src/java/org/apache/cassandra/tools/nodetool/StatusAutoCompaction.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/tools/nodetool/StatusAutoCompaction.java b/src/java/org/apache/cassandra/tools/nodetool/StatusAutoCompaction.java new file mode 100644 index 0000000..4322bb8 --- /dev/null +++ b/src/java/org/apache/cassandra/tools/nodetool/StatusAutoCompaction.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cassandra.tools.nodetool; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import io.airlift.airline.Arguments; +import io.airlift.airline.Command; +import io.airlift.airline.Option; +import org.apache.cassandra.tools.NodeProbe; +import org.apache.cassandra.tools.NodeTool.NodeToolCmd; +import org.apache.cassandra.tools.nodetool.formatter.TableBuilder; + +@Command(name = "statusautocompaction", description = "status of autocompaction of the given keyspace and table") +public class StatusAutoCompaction extends NodeToolCmd +{ + @Arguments(usage = "[<keyspace> <tables>...]", description = "The keyspace followed by one or many tables") + private List<String> args = new ArrayList<>(); + + @Option(title = "show_all", name = { "-a", "--all" }, description = "Show auto compaction status for each keyspace/table") + private boolean showAll = false; + + @Override + public void execute(NodeProbe probe) + { + List<String> keyspaces = parseOptionalKeyspace(args, probe); + String[] tableNames = parseOptionalTables(args); + + boolean allDisabled = true; + boolean allEnabled = true; + TableBuilder table = new TableBuilder(); + table.add("Keyspace", "Table", "Status"); + try + { + for (String keyspace : keyspaces) + { + Map<String, Boolean> statuses = probe.getAutoCompactionDisabled(keyspace, tableNames); + for (Map.Entry<String, Boolean> status : statuses.entrySet()) + { + String tableName = status.getKey(); + boolean disabled = status.getValue(); + allDisabled &= disabled; + allEnabled &= !disabled; + table.add(keyspace, tableName, !disabled ? "running" : "not running"); + } + } + if (showAll) + table.printTo(System.out); + else + System.out.println(allEnabled ? "running" : + allDisabled ? "not running" : "partially running"); + } + catch (IOException e) + { + throw new RuntimeException("Error occurred during status-auto-compaction", e); + } + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
