You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by dc...@apache.org on 2020/10/06 20:48:41 UTC
[cassandra] branch trunk updated: in-jvm dtest now exposes stdout
and stderr for nodetool
This is an automated email from the ASF dual-hosted git repository.
dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/trunk by this push:
new 83e1e9e in-jvm dtest now exposes stdout and stderr for nodetool
83e1e9e is described below
commit 83e1e9e45193322f18f57aa7cc4ad31d9d5a152d
Author: Yifan Cai <yc...@gmail.com>
AuthorDate: Tue Oct 6 08:54:17 2020 -0700
in-jvm dtest now exposes stdout and stderr for nodetool
patch by Yifan Cai; reviewed by Alex Petrov, David Capwell for CASSANDRA-16057
---
src/java/org/apache/cassandra/tools/NodeProbe.java | 16 +++-
src/java/org/apache/cassandra/tools/NodeTool.java | 51 +++++++-----
.../tools/{nodetool/Version.java => Output.java} | 22 +++---
.../cassandra/tools/nodetool/BootstrapResume.java | 4 +-
.../apache/cassandra/tools/nodetool/Cleanup.java | 2 +-
.../cassandra/tools/nodetool/ClearSnapshot.java | 4 +-
.../cassandra/tools/nodetool/ClientStats.java | 24 +++---
.../tools/nodetool/CompactionHistory.java | 2 +-
.../cassandra/tools/nodetool/CompactionStats.java | 18 +++--
.../cassandra/tools/nodetool/DescribeCluster.java | 50 ++++++------
.../cassandra/tools/nodetool/DescribeRing.java | 8 +-
.../tools/nodetool/FailureDetectorInfo.java | 4 +-
.../cassandra/tools/nodetool/GarbageCollect.java | 2 +-
.../apache/cassandra/tools/nodetool/GcStats.java | 6 +-
.../tools/nodetool/GetBatchlogReplayTrottle.java | 4 +-
.../tools/nodetool/GetCompactionThreshold.java | 8 +-
.../tools/nodetool/GetCompactionThroughput.java | 4 +-
.../cassandra/tools/nodetool/GetConcurrency.java | 10 +--
.../tools/nodetool/GetConcurrentCompactors.java | 4 +-
.../tools/nodetool/GetConcurrentViewBuilders.java | 4 +-
.../cassandra/tools/nodetool/GetEndpoints.java | 4 +-
.../cassandra/tools/nodetool/GetFullQueryLog.java | 2 +-
.../tools/nodetool/GetInterDCStreamThroughput.java | 2 +-
.../cassandra/tools/nodetool/GetLoggingLevels.java | 6 +-
.../cassandra/tools/nodetool/GetMaxHintWindow.java | 4 +-
.../cassandra/tools/nodetool/GetSSTables.java | 4 +-
.../apache/cassandra/tools/nodetool/GetSeeds.java | 6 +-
.../tools/nodetool/GetStreamThroughput.java | 4 +-
.../cassandra/tools/nodetool/GetTimeout.java | 2 +-
.../tools/nodetool/GetTraceProbability.java | 2 +-
.../cassandra/tools/nodetool/GossipInfo.java | 2 +-
.../apache/cassandra/tools/nodetool/Import.java | 11 ++-
.../org/apache/cassandra/tools/nodetool/Info.java | 42 +++++-----
.../cassandra/tools/nodetool/ListSnapshots.java | 10 ++-
.../apache/cassandra/tools/nodetool/NetStats.java | 92 +++++++++++-----------
.../cassandra/tools/nodetool/ProfileLoad.java | 17 ++--
.../cassandra/tools/nodetool/ProxyHistograms.java | 13 +--
.../cassandra/tools/nodetool/RangeKeySample.java | 6 +-
.../apache/cassandra/tools/nodetool/Refresh.java | 4 +-
.../cassandra/tools/nodetool/ReloadSeeds.java | 8 +-
.../cassandra/tools/nodetool/RemoveNode.java | 4 +-
.../apache/cassandra/tools/nodetool/Repair.java | 2 +-
.../cassandra/tools/nodetool/RepairAdmin.java | 30 ++++---
.../org/apache/cassandra/tools/nodetool/Ring.java | 52 ++++++------
.../org/apache/cassandra/tools/nodetool/Scrub.java | 2 +-
.../cassandra/tools/nodetool/SetConcurrency.java | 2 +-
.../org/apache/cassandra/tools/nodetool/Sjk.java | 83 +++++++++++--------
.../apache/cassandra/tools/nodetool/Snapshot.java | 12 +--
.../apache/cassandra/tools/nodetool/Status.java | 22 +++---
.../tools/nodetool/StatusAutoCompaction.java | 8 +-
.../cassandra/tools/nodetool/StatusBackup.java | 4 +-
.../cassandra/tools/nodetool/StatusBinary.java | 4 +-
.../cassandra/tools/nodetool/StatusGossip.java | 4 +-
.../cassandra/tools/nodetool/StatusHandoff.java | 6 +-
.../cassandra/tools/nodetool/TableHistograms.java | 18 +++--
.../cassandra/tools/nodetool/TableStats.java | 2 +-
.../apache/cassandra/tools/nodetool/TpStats.java | 4 +-
.../cassandra/tools/nodetool/UpgradeSSTable.java | 4 +-
.../apache/cassandra/tools/nodetool/Verify.java | 8 +-
.../apache/cassandra/tools/nodetool/Version.java | 4 +-
.../cassandra/tools/nodetool/ViewBuildStatus.java | 10 ++-
.../tools/nodetool/formatter/TableBuilder.java | 2 +-
.../tools/nodetool/stats/TpStatsPrinter.java | 6 +-
.../cassandra/distributed/impl/Instance.java | 60 ++++++++++++--
.../shared/NodeToolResultWithOutput.java | 2 +
.../cassandra/distributed/test/NodeToolTest.java | 15 +++-
.../cassandra/distributed/util/NodetoolUtils.java | 7 +-
.../apache/cassandra/tools/nodetool/SjkTest.java | 17 ++--
.../apache/cassandra/stress/CompactionStress.java | 2 +-
69 files changed, 512 insertions(+), 372 deletions(-)
diff --git a/src/java/org/apache/cassandra/tools/NodeProbe.java b/src/java/org/apache/cassandra/tools/NodeProbe.java
index 3020fec..16d7f73 100644
--- a/src/java/org/apache/cassandra/tools/NodeProbe.java
+++ b/src/java/org/apache/cassandra/tools/NodeProbe.java
@@ -59,7 +59,6 @@ import org.apache.cassandra.batchlog.BatchlogManager;
import org.apache.cassandra.batchlog.BatchlogManagerMBean;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.ColumnFamilyStoreMBean;
-import org.apache.cassandra.db.Keyspace;
import org.apache.cassandra.db.compaction.CompactionManager;
import org.apache.cassandra.db.compaction.CompactionManagerMBean;
import org.apache.cassandra.fql.FullQueryLoggerOptions;
@@ -135,6 +134,7 @@ public class NodeProbe implements AutoCloseable
protected HintsServiceMBean hsProxy;
protected BatchlogManagerMBean bmProxy;
protected ActiveRepairServiceMBean arsProxy;
+ protected Output output;
private boolean failed;
/**
@@ -153,6 +153,7 @@ public class NodeProbe implements AutoCloseable
this.port = port;
this.username = username;
this.password = password;
+ this.output = Output.CONSOLE;
connect();
}
@@ -167,6 +168,7 @@ public class NodeProbe implements AutoCloseable
{
this.host = host;
this.port = port;
+ this.output = Output.CONSOLE;
connect();
}
@@ -180,6 +182,7 @@ public class NodeProbe implements AutoCloseable
{
this.host = host;
this.port = defaultPort;
+ this.output = Output.CONSOLE;
connect();
}
@@ -188,6 +191,7 @@ public class NodeProbe implements AutoCloseable
// this constructor is only used for extensions to rewrite their own connect method
this.host = "";
this.port = 0;
+ this.output = Output.CONSOLE;
}
/**
@@ -270,6 +274,16 @@ public class NodeProbe implements AutoCloseable
}
}
+ public void setOutput(Output output)
+ {
+ this.output = output;
+ }
+
+ public Output output()
+ {
+ return output;
+ }
+
public int forceKeyspaceCleanup(int jobs, String keyspaceName, String... tables) throws IOException, ExecutionException, InterruptedException
{
return ssProxy.forceKeyspaceCleanup(jobs, keyspaceName, tables);
diff --git a/src/java/org/apache/cassandra/tools/NodeTool.java b/src/java/org/apache/cassandra/tools/NodeTool.java
index f558267..c3cebd8 100644
--- a/src/java/org/apache/cassandra/tools/NodeTool.java
+++ b/src/java/org/apache/cassandra/tools/NodeTool.java
@@ -44,7 +44,6 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.SortedMap;
-import java.util.function.Consumer;
import com.google.common.base.Joiner;
import com.google.common.base.Throwables;
@@ -78,20 +77,22 @@ public class NodeTool
private static final String HISTORYFILE = "nodetool.history";
private final INodeProbeFactory nodeProbeFactory;
+ private final Output output;
public static void main(String... args)
{
- System.exit(new NodeTool(new NodeProbeFactory()).execute(args));
+ System.exit(new NodeTool(new NodeProbeFactory(), Output.CONSOLE).execute(args));
}
- public NodeTool(INodeProbeFactory nodeProbeFactory)
+ public NodeTool(INodeProbeFactory nodeProbeFactory, Output output)
{
this.nodeProbeFactory = nodeProbeFactory;
+ this.output = output;
}
public int execute(String... args)
{
- List<Class<? extends Consumer<INodeProbeFactory>>> commands = newArrayList(
+ List<Class<? extends NodeToolCmdRunnable>> commands = newArrayList(
CassHelp.class,
Info.class,
Ring.class,
@@ -212,7 +213,7 @@ public class NodeTool
DisableOldProtocolVersions.class
);
- Cli.CliBuilder<Consumer<INodeProbeFactory>> builder = Cli.builder("nodetool");
+ Cli.CliBuilder<NodeToolCmdRunnable> builder = Cli.builder("nodetool");
builder.withDescription("Manage your Cassandra cluster")
.withDefaultCommand(CassHelp.class)
@@ -233,14 +234,14 @@ public class NodeTool
.withCommand(RepairAdmin.SummarizePendingCmd.class)
.withCommand(RepairAdmin.SummarizeRepairedCmd.class);
- Cli<Consumer<INodeProbeFactory>> parser = builder.build();
+ Cli<NodeToolCmdRunnable> parser = builder.build();
int status = 0;
try
{
- Consumer<INodeProbeFactory> parse = parser.parse(args);
+ NodeToolCmdRunnable parse = parser.parse(args);
printHistory(args);
- parse.accept(nodeProbeFactory);
+ parse.run(nodeProbeFactory, output);
} catch (IllegalArgumentException |
IllegalStateException |
ParseArgumentsMissingException |
@@ -284,26 +285,31 @@ public class NodeTool
protected void badUse(Exception e)
{
- System.out.println("nodetool: " + e.getMessage());
- System.out.println("See 'nodetool help' or 'nodetool help <command>'.");
+ output.out.println("nodetool: " + e.getMessage());
+ output.out.println("See 'nodetool help' or 'nodetool help <command>'.");
}
protected void err(Throwable e)
{
- System.err.println("error: " + e.getMessage());
- System.err.println("-- StackTrace --");
- System.err.println(getStackTraceAsString(e));
+ output.err.println("error: " + e.getMessage());
+ output.err.println("-- StackTrace --");
+ output.err.println(getStackTraceAsString(e));
}
- public static class CassHelp extends Help implements Consumer<INodeProbeFactory>
+ public static class CassHelp extends Help implements NodeToolCmdRunnable
{
- public void accept(INodeProbeFactory nodeProbeFactory)
+ public void run(INodeProbeFactory nodeProbeFactory, Output output)
{
run();
}
}
- public static abstract class NodeToolCmd implements Consumer<INodeProbeFactory>
+ interface NodeToolCmdRunnable
+ {
+ void run(INodeProbeFactory nodeProbeFactory, Output output);
+ }
+
+ public static abstract class NodeToolCmd implements NodeToolCmdRunnable
{
@Option(type = OptionType.GLOBAL, name = {"-h", "--host"}, description = "Node hostname or ip address")
@@ -325,14 +331,17 @@ public class NodeTool
protected boolean printPort = false;
private INodeProbeFactory nodeProbeFactory;
+ protected Output output;
- public void accept(INodeProbeFactory nodeProbeFactory)
+ @Override
+ public void run(INodeProbeFactory nodeProbeFactory, Output output)
{
this.nodeProbeFactory = nodeProbeFactory;
- run();
+ this.output = output;
+ runInternal();
}
- public void run()
+ public void runInternal()
{
if (isNotEmpty(username)) {
if (isNotEmpty(passwordFilePath))
@@ -405,10 +414,12 @@ public class NodeTool
nodeClient = nodeProbeFactory.create(host, parseInt(port));
else
nodeClient = nodeProbeFactory.create(host, parseInt(port), username, password);
+
+ nodeClient.setOutput(output);
} catch (IOException | SecurityException e)
{
Throwable rootCause = Throwables.getRootCause(e);
- System.err.println(format("nodetool: Failed to connect to '%s:%s' - %s: '%s'.", host, port, rootCause.getClass().getSimpleName(), rootCause.getMessage()));
+ output.err.println(format("nodetool: Failed to connect to '%s:%s' - %s: '%s'.", host, port, rootCause.getClass().getSimpleName(), rootCause.getMessage()));
System.exit(1);
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/Version.java b/src/java/org/apache/cassandra/tools/Output.java
similarity index 66%
copy from src/java/org/apache/cassandra/tools/nodetool/Version.java
copy to src/java/org/apache/cassandra/tools/Output.java
index 395a247..1d2fcb3 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/Version.java
+++ b/src/java/org/apache/cassandra/tools/Output.java
@@ -15,19 +15,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.cassandra.tools.nodetool;
-import io.airlift.airline.Command;
+package org.apache.cassandra.tools;
-import org.apache.cassandra.tools.NodeProbe;
-import org.apache.cassandra.tools.NodeTool.NodeToolCmd;
+import java.io.PrintStream;
-@Command(name = "version", description = "Print cassandra version")
-public class Version extends NodeToolCmd
+public class Output
{
- @Override
- public void execute(NodeProbe probe)
+ public final static Output CONSOLE = new Output(System.out, System.err);
+
+ public final PrintStream out;
+ public final PrintStream err;
+
+ public Output(PrintStream out, PrintStream err)
{
- System.out.println("ReleaseVersion: " + probe.getReleaseVersion());
+ this.out = out;
+ this.err = err;
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/BootstrapResume.java b/src/java/org/apache/cassandra/tools/nodetool/BootstrapResume.java
index 7be9173..b005818 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/BootstrapResume.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/BootstrapResume.java
@@ -33,11 +33,11 @@ public class BootstrapResume extends NodeToolCmd
{
try
{
- probe.resumeBootstrap(System.out);
+ probe.resumeBootstrap(probe.output().out);
}
catch (IOException e)
{
throw new IOError(e);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/Cleanup.java b/src/java/org/apache/cassandra/tools/nodetool/Cleanup.java
index 200d255..8c40209 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/Cleanup.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/Cleanup.java
@@ -52,7 +52,7 @@ public class Cleanup extends NodeToolCmd
try
{
- probe.forceKeyspaceCleanup(System.out, jobs, keyspace, tableNames);
+ probe.forceKeyspaceCleanup(probe.output().out, jobs, keyspace, tableNames);
}
catch (Exception e)
{
diff --git a/src/java/org/apache/cassandra/tools/nodetool/ClearSnapshot.java b/src/java/org/apache/cassandra/tools/nodetool/ClearSnapshot.java
index 12322d0..1c05ae5 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/ClearSnapshot.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/ClearSnapshot.java
@@ -66,7 +66,7 @@ public class ClearSnapshot extends NodeToolCmd
else
sb.append(" with snapshot name [").append(snapshotName).append("]");
- System.out.println(sb.toString());
+ probe.output().out.println(sb.toString());
try
{
@@ -76,4 +76,4 @@ public class ClearSnapshot extends NodeToolCmd
throw new RuntimeException("Error during clearing snapshots", e);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/ClientStats.java b/src/java/org/apache/cassandra/tools/nodetool/ClientStats.java
index 3bf46b4..b9bf45e 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/ClientStats.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/ClientStats.java
@@ -17,6 +17,7 @@
*/
package org.apache.cassandra.tools.nodetool;
+import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@@ -46,9 +47,10 @@ public class ClientStats extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
+ PrintStream out = probe.output().out;
if (clearConnectionHistory)
{
- System.out.println("Clearing connection history");
+ out.println("Clearing connection history");
probe.clearConnectionHistory();
return;
}
@@ -57,8 +59,8 @@ public class ClientStats extends NodeToolCmd
{
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss");
- System.out.println("Clients by protocol version");
- System.out.println();
+ out.println("Clients by protocol version");
+ out.println();
List<Map<String, String>> clients = (List<Map<String, String>>) probe.getClientMetric("clientsByProtocolVersion");
@@ -74,8 +76,8 @@ public class ClientStats extends NodeToolCmd
sdf.format(new Date(Long.valueOf(client.get(ClientStat.LAST_SEEN_TIME)))));
}
- table.printTo(System.out);
- System.out.println();
+ table.printTo(out);
+ out.println();
}
return;
@@ -101,21 +103,21 @@ public class ClientStats extends NodeToolCmd
conn.get(ConnectedClient.DRIVER_NAME),
conn.get(ConnectedClient.DRIVER_VERSION));
}
- table.printTo(System.out);
- System.out.println();
+ table.printTo(out);
+ out.println();
}
}
Map<String, Integer> connectionsByUser = (Map<String, Integer>) probe.getClientMetric("connectedNativeClientsByUser");
int total = connectionsByUser.values().stream().reduce(0, Integer::sum);
- System.out.println("Total connected clients: " + total);
- System.out.println();
+ out.println("Total connected clients: " + total);
+ out.println();
TableBuilder table = new TableBuilder();
table.add("User", "Connections");
for (Entry<String, Integer> entry : connectionsByUser.entrySet())
{
table.add(entry.getKey(), entry.getValue().toString());
}
- table.printTo(System.out);
+ table.printTo(out);
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/CompactionHistory.java b/src/java/org/apache/cassandra/tools/nodetool/CompactionHistory.java
index 8896db0..d1a5061 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/CompactionHistory.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/CompactionHistory.java
@@ -43,6 +43,6 @@ public class CompactionHistory extends NodeToolCmd
}
StatsHolder data = new CompactionHistoryHolder(probe);
StatsPrinter printer = CompactionHistoryPrinter.from(outputFormat);
- printer.print(data, System.out);
+ printer.print(data, probe.output().out);
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java b/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
index 497fe24..e815d74 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
@@ -17,6 +17,7 @@
*/
package org.apache.cassandra.tools.nodetool;
+import java.io.PrintStream;
import java.text.DecimalFormat;
import java.util.List;
import java.util.Map;
@@ -47,6 +48,7 @@ public class CompactionStats extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
+ PrintStream out = probe.output().out;
CompactionManagerMBean cm = probe.getCompactionManagerProxy();
Map<String, Map<String, Integer>> pendingTaskNumberByTable =
(Map<String, Map<String, Integer>>) probe.getCompactionMetric("PendingTasksByTableName");
@@ -56,7 +58,7 @@ public class CompactionStats extends NodeToolCmd
for (Entry<String, Integer> tableEntry : ksEntry.getValue().entrySet())
numTotalPendingTask += tableEntry.getValue();
}
- System.out.println("pending tasks: " + numTotalPendingTask);
+ out.println("pending tasks: " + numTotalPendingTask);
for (Entry<String, Map<String, Integer>> ksEntry : pendingTaskNumberByTable.entrySet())
{
String ksName = ksEntry.getKey();
@@ -65,14 +67,14 @@ public class CompactionStats extends NodeToolCmd
String tableName = tableEntry.getKey();
int pendingTaskCount = tableEntry.getValue();
- System.out.println("- " + ksName + '.' + tableName + ": " + pendingTaskCount);
+ out.println("- " + ksName + '.' + tableName + ": " + pendingTaskCount);
}
}
- System.out.println();
- reportCompactionTable(cm.getCompactions(), probe.getCompactionThroughput(), humanReadable);
+ out.println();
+ reportCompactionTable(cm.getCompactions(), probe.getCompactionThroughput(), humanReadable, out);
}
- public static void reportCompactionTable(List<Map<String,String>> compactions, int compactionThroughput, boolean humanReadable)
+ public static void reportCompactionTable(List<Map<String,String>> compactions, int compactionThroughput, boolean humanReadable, PrintStream out)
{
if (!compactions.isEmpty())
{
@@ -97,7 +99,7 @@ public class CompactionStats extends NodeToolCmd
if (taskType.equals(OperationType.COMPACTION.toString()))
remainingBytes += total - completed;
}
- table.printTo(System.out);
+ table.printTo(out);
String remainingTime = "n/a";
if (compactionThroughput != 0)
@@ -105,8 +107,8 @@ public class CompactionStats extends NodeToolCmd
long remainingTimeInSecs = remainingBytes / (1024L * 1024L * compactionThroughput);
remainingTime = format("%dh%02dm%02ds", remainingTimeInSecs / 3600, (remainingTimeInSecs % 3600) / 60, (remainingTimeInSecs % 60));
}
- System.out.printf("%25s%10s%n", "Active compaction remaining time : ", remainingTime);
+ out.printf("%25s%10s%n", "Active compaction remaining time : ", remainingTime);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/DescribeCluster.java b/src/java/org/apache/cassandra/tools/nodetool/DescribeCluster.java
index 6a9f023..33a0a4d 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/DescribeCluster.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/DescribeCluster.java
@@ -17,6 +17,7 @@
*/
package org.apache.cassandra.tools.nodetool;
+import java.io.PrintStream;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -43,9 +44,10 @@ public class DescribeCluster extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
+ PrintStream out = probe.output().out;
// display cluster name, snitch and partitioner
- System.out.println("Cluster Information:");
- System.out.println("\tName: " + probe.getClusterName());
+ out.println("Cluster Information:");
+ out.println("\tName: " + probe.getClusterName());
String snitch = probe.getEndpointSnitchInfoProxy().getSnitchName();
boolean dynamicSnitchEnabled = false;
if (snitch.equals(DynamicEndpointSnitch.class.getName()))
@@ -53,16 +55,16 @@ public class DescribeCluster extends NodeToolCmd
snitch = probe.getDynamicEndpointSnitchInfoProxy().getSubsnitchClassName();
dynamicSnitchEnabled = true;
}
- System.out.println("\tSnitch: " + snitch);
- System.out.println("\tDynamicEndPointSnitch: " + (dynamicSnitchEnabled ? "enabled" : "disabled"));
- System.out.println("\tPartitioner: " + probe.getPartitioner());
+ out.println("\tSnitch: " + snitch);
+ out.println("\tDynamicEndPointSnitch: " + (dynamicSnitchEnabled ? "enabled" : "disabled"));
+ out.println("\tPartitioner: " + probe.getPartitioner());
// display schema version for each node
- System.out.println("\tSchema versions:");
+ out.println("\tSchema versions:");
Map<String, List<String>> schemaVersions = printPort ? probe.getSpProxy().getSchemaVersionsWithPort() : probe.getSpProxy().getSchemaVersions();
for (String version : schemaVersions.keySet())
{
- System.out.println(format("\t\t%s: %s%n", version, schemaVersions.get(version)));
+ out.println(format("\t\t%s: %s%n", version, schemaVersions.get(version)));
}
// Collect status information of all nodes
@@ -76,12 +78,12 @@ public class DescribeCluster extends NodeToolCmd
// Get the list of all keyspaces
List<String> keyspaces = probe.getKeyspaces();
- System.out.println("Stats for all nodes:");
- System.out.println("\tLive: " + liveNodes.size());
- System.out.println("\tJoining: " + joiningNodes.size());
- System.out.println("\tMoving: " + movingNodes.size());
- System.out.println("\tLeaving: " + leavingNodes.size());
- System.out.println("\tUnreachable: " + unreachableNodes.size());
+ out.println("Stats for all nodes:");
+ out.println("\tLive: " + liveNodes.size());
+ out.println("\tJoining: " + joiningNodes.size());
+ out.println("\tMoving: " + movingNodes.size());
+ out.println("\tLeaving: " + leavingNodes.size());
+ out.println("\tUnreachable: " + unreachableNodes.size());
Map<String, String> tokensToEndpoints = probe.getTokenToEndpointMap(withPort);
Map<String, Float> ownerships = null;
@@ -92,20 +94,20 @@ public class DescribeCluster extends NodeToolCmd
catch (IllegalStateException ex)
{
ownerships = probe.getOwnershipWithPort();
- System.out.println("Error: " + ex.getMessage());
+ out.println("Error: " + ex.getMessage());
}
catch (IllegalArgumentException ex)
{
- System.out.println("%nError: " + ex.getMessage());
+ out.println("%nError: " + ex.getMessage());
System.exit(1);
}
SortedMap<String, SetHostStatWithPort> dcs = NodeTool.getOwnershipByDcWithPort(probe, resolveIp, tokensToEndpoints, ownerships);
- System.out.println("\nData Centers: ");
+ out.println("\nData Centers: ");
for (Map.Entry<String, SetHostStatWithPort> dc : dcs.entrySet())
{
- System.out.print("\t" + dc.getKey());
+ out.print("\t" + dc.getKey());
ArrayListMultimap<InetAddressAndPort, HostStatWithPort> hostToTokens = ArrayListMultimap.create();
for (HostStatWithPort stat : dc.getValue())
@@ -120,27 +122,27 @@ public class DescribeCluster extends NodeToolCmd
if (unreachableNodes.contains(endpoint.toString()))
downNodes++;
}
- System.out.print(" #Nodes: " + totalNodes);
- System.out.println(" #Down: " + downNodes);
+ out.print(" #Nodes: " + totalNodes);
+ out.println(" #Down: " + downNodes);
}
// display database version for each node
- System.out.println("\nDatabase versions:");
+ out.println("\nDatabase versions:");
Map<String, List<String>> databaseVersions = probe.getGossProxy().getReleaseVersionsWithPort();
for (String version : databaseVersions.keySet())
{
- System.out.println(format("\t%s: %s%n", version, databaseVersions.get(version)));
+ out.println(format("\t%s: %s%n", version, databaseVersions.get(version)));
}
- System.out.println("Keyspaces:");
+ out.println("Keyspaces:");
for (String keyspaceName : keyspaces)
{
String replicationInfo = probe.getKeyspaceReplicationInfo(keyspaceName);
if (replicationInfo == null)
{
- System.out.println("something went wrong for keyspace: " + keyspaceName);
+ out.println("something went wrong for keyspace: " + keyspaceName);
}
- System.out.println("\t" + keyspaceName + " -> Replication class: " + replicationInfo);
+ out.println("\t" + keyspaceName + " -> Replication class: " + replicationInfo);
}
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/DescribeRing.java b/src/java/org/apache/cassandra/tools/nodetool/DescribeRing.java
index ef8c97e..d90e6ba 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/DescribeRing.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/DescribeRing.java
@@ -22,6 +22,7 @@ import io.airlift.airline.Arguments;
import io.airlift.airline.Command;
import java.io.IOException;
+import java.io.PrintStream;
import org.apache.cassandra.tools.NodeProbe;
import org.apache.cassandra.tools.NodeTool.NodeToolCmd;
@@ -35,13 +36,14 @@ public class DescribeRing extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.println("Schema Version:" + probe.getSchemaVersion());
- System.out.println("TokenRange: ");
+ PrintStream out = probe.output().out;
+ out.println("Schema Version:" + probe.getSchemaVersion());
+ out.println("TokenRange: ");
try
{
for (String tokenRangeString : probe.describeRing(keyspace, printPort))
{
- System.out.println("\t" + tokenRangeString);
+ out.println("\t" + tokenRangeString);
}
} catch (IOException e)
{
diff --git a/src/java/org/apache/cassandra/tools/nodetool/FailureDetectorInfo.java b/src/java/org/apache/cassandra/tools/nodetool/FailureDetectorInfo.java
index c1b2192..6431e05 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/FailureDetectorInfo.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/FailureDetectorInfo.java
@@ -34,12 +34,12 @@ public class FailureDetectorInfo extends NodeToolCmd
public void execute(NodeProbe probe)
{
TabularData data = probe.getFailureDetectorPhilValues(printPort);
- System.out.printf("%10s,%16s%n", "Endpoint", "Phi");
+ probe.output().out.printf("%10s,%16s%n", "Endpoint", "Phi");
for (Object o : data.keySet())
{
@SuppressWarnings({ "rawtypes", "unchecked" })
CompositeData datum = data.get(((List) o).toArray(new Object[((List) o).size()]));
- System.out.printf("%10s,%16.8f%n",datum.get("Endpoint"), datum.get("PHI"));
+ probe.output().out.printf("%10s,%16.8f%n", datum.get("Endpoint"), datum.get("PHI"));
}
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GarbageCollect.java b/src/java/org/apache/cassandra/tools/nodetool/GarbageCollect.java
index 5b8cd6e..5d24d84 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GarbageCollect.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GarbageCollect.java
@@ -56,7 +56,7 @@ public class GarbageCollect extends NodeToolCmd
{
try
{
- probe.garbageCollect(System.out, tombstoneOption, jobs, keyspace, tableNames);
+ probe.garbageCollect(probe.output().out, tombstoneOption, jobs, keyspace, tableNames);
} catch (Exception e)
{
throw new RuntimeException("Error occurred during garbage collection", e);
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GcStats.java b/src/java/org/apache/cassandra/tools/nodetool/GcStats.java
index 07ae6d9..6e36f25 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GcStats.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GcStats.java
@@ -31,7 +31,7 @@ public class GcStats extends NodeToolCmd
double[] stats = probe.getAndResetGCStats();
double mean = stats[2] / stats[5];
double stdev = Math.sqrt((stats[3] / stats[5]) - (mean * mean));
- System.out.printf("%20s%20s%20s%20s%20s%20s%25s%n", "Interval (ms)", "Max GC Elapsed (ms)", "Total GC Elapsed (ms)", "Stdev GC Elapsed (ms)", "GC Reclaimed (MB)", "Collections", "Direct Memory Bytes");
- System.out.printf("%20.0f%20.0f%20.0f%20.0f%20.0f%20.0f%25d%n", stats[0], stats[1], stats[2], stdev, stats[4], stats[5], (long)stats[6]);
+ probe.output().out.printf("%20s%20s%20s%20s%20s%20s%25s%n", "Interval (ms)", "Max GC Elapsed (ms)", "Total GC Elapsed (ms)", "Stdev GC Elapsed (ms)", "GC Reclaimed (MB)", "Collections", "Direct Memory Bytes");
+ probe.output().out.printf("%20.0f%20.0f%20.0f%20.0f%20.0f%20.0f%25d%n", stats[0], stats[1], stats[2], stdev, stats[4], stats[5], (long)stats[6]);
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetBatchlogReplayTrottle.java b/src/java/org/apache/cassandra/tools/nodetool/GetBatchlogReplayTrottle.java
index 661c495..6497aa1 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetBatchlogReplayTrottle.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetBatchlogReplayTrottle.java
@@ -28,6 +28,6 @@ public class GetBatchlogReplayTrottle extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.println("Batchlog replay throttle: " + probe.getBatchlogReplayThrottle() + " KB/s");
+ probe.output().out.println("Batchlog replay throttle: " + probe.getBatchlogReplayThrottle() + " KB/s");
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetCompactionThreshold.java b/src/java/org/apache/cassandra/tools/nodetool/GetCompactionThreshold.java
index 589b1b3..c0ccbbf 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetCompactionThreshold.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetCompactionThreshold.java
@@ -42,8 +42,8 @@ public class GetCompactionThreshold extends NodeToolCmd
String cf = args.get(1);
ColumnFamilyStoreMBean cfsProxy = probe.getCfsProxy(ks, cf);
- System.out.println("Current compaction thresholds for " + ks + "/" + cf + ": \n" +
- " min = " + cfsProxy.getMinimumCompactionThreshold() + ", " +
- " max = " + cfsProxy.getMaximumCompactionThreshold());
+ probe.output().out.println("Current compaction thresholds for " + ks + "/" + cf + ": \n" +
+ " min = " + cfsProxy.getMinimumCompactionThreshold() + ", " +
+ " max = " + cfsProxy.getMaximumCompactionThreshold());
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetCompactionThroughput.java b/src/java/org/apache/cassandra/tools/nodetool/GetCompactionThroughput.java
index a7df4d1..839c78d 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetCompactionThroughput.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetCompactionThroughput.java
@@ -28,6 +28,6 @@ public class GetCompactionThroughput extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.println("Current compaction throughput: " + probe.getCompactionThroughput() + " MB/s");
+ probe.output().out.println("Current compaction throughput: " + probe.getCompactionThroughput() + " MB/s");
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetConcurrency.java b/src/java/org/apache/cassandra/tools/nodetool/GetConcurrency.java
index ede2908..ddf7b6a 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetConcurrency.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetConcurrency.java
@@ -37,14 +37,14 @@ public class GetConcurrency extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.printf("%-25s%16s%16s%n", "Stage", "CorePoolSize", "MaximumPoolSize");
+ probe.output().out.printf("%-25s%16s%16s%n", "Stage", "CorePoolSize", "MaximumPoolSize");
probe.getMaximumPoolSizes(args).entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.forEach(entry ->
- System.out.printf("%-25s%16d%16d%n",
- entry.getKey(),
- entry.getValue().get(0),
- entry.getValue().get(1)));
+ probe.output().out.printf("%-25s%16d%16d%n",
+ entry.getKey(),
+ entry.getValue().get(0),
+ entry.getValue().get(1)));
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetConcurrentCompactors.java b/src/java/org/apache/cassandra/tools/nodetool/GetConcurrentCompactors.java
index 6aa4d8b..3176c3e 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetConcurrentCompactors.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetConcurrentCompactors.java
@@ -27,7 +27,7 @@ public class GetConcurrentCompactors extends NodeToolCmd
{
protected void execute(NodeProbe probe)
{
- System.out.println("Current concurrent compactors in the system is: \n" +
- probe.getConcurrentCompactors());
+ probe.output().out.println("Current concurrent compactors in the system is: \n" +
+ probe.getConcurrentCompactors());
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetConcurrentViewBuilders.java b/src/java/org/apache/cassandra/tools/nodetool/GetConcurrentViewBuilders.java
index c189fb0..0fe1830 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetConcurrentViewBuilders.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetConcurrentViewBuilders.java
@@ -27,7 +27,7 @@ public class GetConcurrentViewBuilders extends NodeToolCmd
{
protected void execute(NodeProbe probe)
{
- System.out.println("Current number of concurrent view builders in the system is: \n" +
- probe.getConcurrentViewBuilders());
+ probe.output().out.println("Current number of concurrent view builders in the system is: \n" +
+ probe.getConcurrentViewBuilders());
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetEndpoints.java b/src/java/org/apache/cassandra/tools/nodetool/GetEndpoints.java
index 78065c4..a834e28 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetEndpoints.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetEndpoints.java
@@ -46,7 +46,7 @@ public class GetEndpoints extends NodeToolCmd
{
for (String endpoint : probe.getEndpointsWithPort(ks, table, key))
{
- System.out.println(endpoint);
+ probe.output().out.println(endpoint);
}
}
else
@@ -54,7 +54,7 @@ public class GetEndpoints extends NodeToolCmd
List<InetAddress> endpoints = probe.getEndpoints(ks, table, key);
for (InetAddress endpoint : endpoints)
{
- System.out.println(endpoint.getHostAddress());
+ probe.output().out.println(endpoint.getHostAddress());
}
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetFullQueryLog.java b/src/java/org/apache/cassandra/tools/nodetool/GetFullQueryLog.java
index 47d8b8a..be3aa56 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetFullQueryLog.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetFullQueryLog.java
@@ -43,6 +43,6 @@ public class GetFullQueryLog extends NodeToolCmd
tableBuilder.add("max_queue_weight", Integer.toString(options.max_queue_weight));
tableBuilder.add("max_archive_retries", Long.toString(options.max_archive_retries));
- tableBuilder.printTo(System.out);
+ tableBuilder.printTo(probe.output().out);
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetInterDCStreamThroughput.java b/src/java/org/apache/cassandra/tools/nodetool/GetInterDCStreamThroughput.java
index 039814e..554876d 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetInterDCStreamThroughput.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetInterDCStreamThroughput.java
@@ -28,6 +28,6 @@ public class GetInterDCStreamThroughput extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.println("Current inter-datacenter stream throughput: " + probe.getInterDCStreamThroughput() + " Mb/s");
+ probe.output().out.println("Current inter-datacenter stream throughput: " + probe.getInterDCStreamThroughput() + " Mb/s");
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetLoggingLevels.java b/src/java/org/apache/cassandra/tools/nodetool/GetLoggingLevels.java
index 90d6817..3cadceb 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetLoggingLevels.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetLoggingLevels.java
@@ -31,8 +31,8 @@ public class GetLoggingLevels extends NodeToolCmd
public void execute(NodeProbe probe)
{
// what if some one set a very long logger name? 50 space may not be enough...
- System.out.printf("%n%-50s%10s%n", "Logger Name", "Log Level");
+ probe.output().out.printf("%n%-50s%10s%n", "Logger Name", "Log Level");
for (Map.Entry<String, String> entry : probe.getLoggingLevels().entrySet())
- System.out.printf("%-50s%10s%n", entry.getKey(), entry.getValue());
+ probe.output().out.printf("%-50s%10s%n", entry.getKey(), entry.getValue());
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetMaxHintWindow.java b/src/java/org/apache/cassandra/tools/nodetool/GetMaxHintWindow.java
index 7bc1a30..54e73ab 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetMaxHintWindow.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetMaxHintWindow.java
@@ -28,6 +28,6 @@ public class GetMaxHintWindow extends NodeTool.NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.println("Current max hint window: " + probe.getMaxHintWindow() + " ms");
+ probe.output().out.println("Current max hint window: " + probe.getMaxHintWindow() + " ms");
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetSSTables.java b/src/java/org/apache/cassandra/tools/nodetool/GetSSTables.java
index e43c2bf..f1e2117 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetSSTables.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetSSTables.java
@@ -50,7 +50,7 @@ public class GetSSTables extends NodeToolCmd
List<String> sstables = probe.getSSTables(ks, cf, key, hexFormat);
for (String sstable : sstables)
{
- System.out.println(sstable);
+ probe.output().out.println(sstable);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetSeeds.java b/src/java/org/apache/cassandra/tools/nodetool/GetSeeds.java
index 207363c..faf5e8d 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetSeeds.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetSeeds.java
@@ -33,12 +33,12 @@ public class GetSeeds extends NodeToolCmd
List<String> seedList = probe.getSeeds();
if (seedList.isEmpty())
{
- System.out.println("Seed node list does not contain any remote node IPs");
+ probe.output().out.println("Seed node list does not contain any remote node IPs");
}
else
{
- System.out.println("Current list of seed node IPs, excluding the current node's IP: " + String.join(" ", seedList));
+ probe.output().out.println("Current list of seed node IPs, excluding the current node's IP: " + String.join(" ", seedList));
}
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetStreamThroughput.java b/src/java/org/apache/cassandra/tools/nodetool/GetStreamThroughput.java
index b76d14b..9014d3c 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetStreamThroughput.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetStreamThroughput.java
@@ -28,6 +28,6 @@ public class GetStreamThroughput extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.println("Current stream throughput: " + probe.getStreamThroughput() + " Mb/s");
+ probe.output().out.println("Current stream throughput: " + probe.getStreamThroughput() + " Mb/s");
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetTimeout.java b/src/java/org/apache/cassandra/tools/nodetool/GetTimeout.java
index 9f99ac6..60637d7 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetTimeout.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetTimeout.java
@@ -42,7 +42,7 @@ public class GetTimeout extends NodeToolCmd
checkArgument(args.size() == 1, "gettimeout requires a timeout type, one of (" + TIMEOUT_TYPES + ")");
try
{
- System.out.println("Current timeout for type " + args.get(0) + ": " + probe.getTimeout(args.get(0)) + " ms");
+ probe.output().out.println("Current timeout for type " + args.get(0) + ": " + probe.getTimeout(args.get(0)) + " ms");
} catch (Exception e)
{
throw new IllegalArgumentException(e.getMessage());
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GetTraceProbability.java b/src/java/org/apache/cassandra/tools/nodetool/GetTraceProbability.java
index 374ab2c..007b813 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GetTraceProbability.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GetTraceProbability.java
@@ -28,6 +28,6 @@ public class GetTraceProbability extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.println("Current trace probability: " + probe.getTraceProbability());
+ probe.output().out.println("Current trace probability: " + probe.getTraceProbability());
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/GossipInfo.java b/src/java/org/apache/cassandra/tools/nodetool/GossipInfo.java
index 24c0634..4f5f1b3 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/GossipInfo.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/GossipInfo.java
@@ -28,6 +28,6 @@ public class GossipInfo extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.println(probe.getGossipInfo(printPort));
+ probe.output().out.println(probe.getGossipInfo(printPort));
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/Import.java b/src/java/org/apache/cassandra/tools/nodetool/Import.java
index 7315c3e..08fe35d 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/Import.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/Import.java
@@ -23,6 +23,8 @@ import io.airlift.airline.Arguments;
import io.airlift.airline.Command;
import io.airlift.airline.Option;
+
+import java.io.PrintStream;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -80,7 +82,7 @@ public class Import extends NodeToolCmd
if (quick)
{
- System.out.println("Doing a quick import - skipping sstable verification and row cache invalidation");
+ probe.output().out.println("Doing a quick import - skipping sstable verification and row cache invalidation");
noVerifyTokens = true;
noInvalidateCaches = true;
noVerify = true;
@@ -90,10 +92,11 @@ public class Import extends NodeToolCmd
List<String> failedDirs = probe.importNewSSTables(args.get(0), args.get(1), new HashSet<>(srcPaths), !keepLevel, !keepRepaired, !noVerify, !noVerifyTokens, !noInvalidateCaches, extendedVerify);
if (!failedDirs.isEmpty())
{
- System.err.println("Some directories failed to import, check server logs for details:");
+ PrintStream err = probe.output().err;
+ err.println("Some directories failed to import, check server logs for details:");
for (String directory : failedDirs)
- System.err.println(directory);
+ err.println(directory);
System.exit(1);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/Info.java b/src/java/org/apache/cassandra/tools/nodetool/Info.java
index 6ff5037..1ee6bac 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/Info.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/Info.java
@@ -20,6 +20,7 @@ package org.apache.cassandra.tools.nodetool;
import io.airlift.airline.Command;
import io.airlift.airline.Option;
+import java.io.PrintStream;
import java.lang.management.MemoryUsage;
import java.util.Iterator;
import java.util.List;
@@ -45,27 +46,28 @@ public class Info extends NodeToolCmd
{
boolean gossipInitialized = probe.isGossipRunning();
- System.out.printf("%-23s: %s%n", "ID", probe.getLocalHostId());
- System.out.printf("%-23s: %s%n", "Gossip active", gossipInitialized);
- System.out.printf("%-23s: %s%n", "Native Transport active", probe.isNativeTransportRunning());
- System.out.printf("%-23s: %s%n", "Load", probe.getLoadString());
+ PrintStream out = probe.output().out;
+ out.printf("%-23s: %s%n", "ID", probe.getLocalHostId());
+ out.printf("%-23s: %s%n", "Gossip active", gossipInitialized);
+ out.printf("%-23s: %s%n", "Native Transport active", probe.isNativeTransportRunning());
+ out.printf("%-23s: %s%n", "Load", probe.getLoadString());
if (gossipInitialized)
- System.out.printf("%-23s: %s%n", "Generation No", probe.getCurrentGenerationNumber());
+ out.printf("%-23s: %s%n", "Generation No", probe.getCurrentGenerationNumber());
else
- System.out.printf("%-23s: %s%n", "Generation No", 0);
+ out.printf("%-23s: %s%n", "Generation No", 0);
// Uptime
long secondsUp = probe.getUptime() / 1000;
- System.out.printf("%-23s: %d%n", "Uptime (seconds)", secondsUp);
+ out.printf("%-23s: %d%n", "Uptime (seconds)", secondsUp);
// Memory usage
MemoryUsage heapUsage = probe.getHeapMemoryUsage();
double memUsed = (double) heapUsage.getUsed() / (1024 * 1024);
double memMax = (double) heapUsage.getMax() / (1024 * 1024);
- System.out.printf("%-23s: %.2f / %.2f%n", "Heap Memory (MB)", memUsed, memMax);
+ out.printf("%-23s: %.2f / %.2f%n", "Heap Memory (MB)", memUsed, memMax);
try
{
- System.out.printf("%-23s: %.2f%n", "Off Heap Memory (MB)", getOffHeapMemoryUsed(probe));
+ out.printf("%-23s: %.2f%n", "Off Heap Memory (MB)", getOffHeapMemoryUsed(probe));
}
catch (RuntimeException e)
{
@@ -75,16 +77,16 @@ public class Info extends NodeToolCmd
}
// Data Center/Rack
- System.out.printf("%-23s: %s%n", "Data Center", probe.getDataCenter());
- System.out.printf("%-23s: %s%n", "Rack", probe.getRack());
+ out.printf("%-23s: %s%n", "Data Center", probe.getDataCenter());
+ out.printf("%-23s: %s%n", "Rack", probe.getRack());
// Exceptions
- System.out.printf("%-23s: %s%n", "Exceptions", probe.getStorageMetric("Exceptions"));
+ out.printf("%-23s: %s%n", "Exceptions", probe.getStorageMetric("Exceptions"));
CacheServiceMBean cacheService = probe.getCacheServiceMBean();
// Key Cache: Hits, Requests, RecentHitRate, SavePeriodInSeconds
- System.out.printf("%-23s: entries %d, size %s, capacity %s, %d hits, %d requests, %.3f recent hit rate, %d save period in seconds%n",
+ out.printf("%-23s: entries %d, size %s, capacity %s, %d hits, %d requests, %.3f recent hit rate, %d save period in seconds%n",
"Key Cache",
probe.getCacheMetric("KeyCache", "Entries"),
FileUtils.stringifyFileSize((long) probe.getCacheMetric("KeyCache", "Size")),
@@ -95,7 +97,7 @@ public class Info extends NodeToolCmd
cacheService.getKeyCacheSavePeriodInSeconds());
// Row Cache: Hits, Requests, RecentHitRate, SavePeriodInSeconds
- System.out.printf("%-23s: entries %d, size %s, capacity %s, %d hits, %d requests, %.3f recent hit rate, %d save period in seconds%n",
+ out.printf("%-23s: entries %d, size %s, capacity %s, %d hits, %d requests, %.3f recent hit rate, %d save period in seconds%n",
"Row Cache",
probe.getCacheMetric("RowCache", "Entries"),
FileUtils.stringifyFileSize((long) probe.getCacheMetric("RowCache", "Size")),
@@ -106,7 +108,7 @@ public class Info extends NodeToolCmd
cacheService.getRowCacheSavePeriodInSeconds());
// Counter Cache: Hits, Requests, RecentHitRate, SavePeriodInSeconds
- System.out.printf("%-23s: entries %d, size %s, capacity %s, %d hits, %d requests, %.3f recent hit rate, %d save period in seconds%n",
+ out.printf("%-23s: entries %d, size %s, capacity %s, %d hits, %d requests, %.3f recent hit rate, %d save period in seconds%n",
"Counter Cache",
probe.getCacheMetric("CounterCache", "Entries"),
FileUtils.stringifyFileSize((long) probe.getCacheMetric("CounterCache", "Size")),
@@ -119,7 +121,7 @@ public class Info extends NodeToolCmd
// Chunk Cache: Hits, Requests, RecentHitRate, SavePeriodInSeconds
try
{
- System.out.printf("%-23s: entries %d, size %s, capacity %s, %d misses, %d requests, %.3f recent hit rate, %.3f %s miss latency%n",
+ out.printf("%-23s: entries %d, size %s, capacity %s, %d misses, %d requests, %.3f recent hit rate, %.3f %s miss latency%n",
"Chunk Cache",
probe.getCacheMetric("ChunkCache", "Entries"),
FileUtils.stringifyFileSize((long) probe.getCacheMetric("ChunkCache", "Size")),
@@ -139,7 +141,7 @@ public class Info extends NodeToolCmd
}
// Global table stats
- System.out.printf("%-23s: %s%%%n", "Percent Repaired", probe.getColumnFamilyMetric(null, null, "PercentRepaired"));
+ out.printf("%-23s: %s%%%n", "Percent Repaired", probe.getColumnFamilyMetric(null, null, "PercentRepaired"));
// check if node is already joined, before getting tokens, since it throws exception if not.
if (probe.isJoined())
@@ -148,14 +150,14 @@ public class Info extends NodeToolCmd
List<String> tokens = probe.getTokens();
if (tokens.size() == 1 || this.tokens)
for (String token : tokens)
- System.out.printf("%-23s: %s%n", "Token", token);
+ out.printf("%-23s: %s%n", "Token", token);
else
- System.out.printf("%-23s: (invoke with -T/--tokens to see all %d tokens)%n", "Token",
+ out.printf("%-23s: (invoke with -T/--tokens to see all %d tokens)%n", "Token",
tokens.size());
}
else
{
- System.out.printf("%-23s: (node is not joined to the cluster)%n", "Token");
+ out.printf("%-23s: (node is not joined to the cluster)%n", "Token");
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/ListSnapshots.java b/src/java/org/apache/cassandra/tools/nodetool/ListSnapshots.java
index 9bc62d1..79494cd 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/ListSnapshots.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/ListSnapshots.java
@@ -17,6 +17,7 @@
*/
package org.apache.cassandra.tools.nodetool;
+import java.io.PrintStream;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -35,14 +36,15 @@ public class ListSnapshots extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
+ PrintStream out = probe.output().out;
try
{
- System.out.println("Snapshot Details: ");
+ out.println("Snapshot Details: ");
final Map<String,TabularData> snapshotDetails = probe.getSnapshotDetails();
if (snapshotDetails.isEmpty())
{
- System.out.println("There are no snapshots");
+ out.println("There are no snapshots");
return;
}
@@ -61,9 +63,9 @@ public class ListSnapshots extends NodeToolCmd
table.add(value.toArray(new String[value.size()]));
}
}
- table.printTo(System.out);
+ table.printTo(out);
- System.out.println("\nTotal TrueDiskSpaceUsed: " + FileUtils.stringifyFileSize(trueSnapshotsSize) + "\n");
+ out.println("\nTotal TrueDiskSpaceUsed: " + FileUtils.stringifyFileSize(trueSnapshotsSize) + "\n");
}
catch (Exception e)
{
diff --git a/src/java/org/apache/cassandra/tools/nodetool/NetStats.java b/src/java/org/apache/cassandra/tools/nodetool/NetStats.java
index e86505b..45af43d 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/NetStats.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/NetStats.java
@@ -20,6 +20,7 @@ package org.apache.cassandra.tools.nodetool;
import io.airlift.airline.Command;
import io.airlift.airline.Option;
+import java.io.PrintStream;
import java.util.Set;
import org.apache.cassandra.io.util.FileUtils;
@@ -41,22 +42,23 @@ public class NetStats extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.printf("Mode: %s%n", probe.getOperationMode());
+ PrintStream out = probe.output().out;
+ out.printf("Mode: %s%n", probe.getOperationMode());
Set<StreamState> statuses = probe.getStreamStatus();
if (statuses.isEmpty())
- System.out.println("Not sending any streams.");
+ out.println("Not sending any streams.");
for (StreamState status : statuses)
{
- System.out.printf("%s %s%n", status.streamOperation.getDescription(), status.planId.toString());
+ out.printf("%s %s%n", status.streamOperation.getDescription(), status.planId.toString());
for (SessionInfo info : status.sessions)
{
- System.out.printf(" %s", info.peer.toString(printPort));
+ out.printf(" %s", info.peer.toString(printPort));
// print private IP when it is used
if (!info.peer.equals(info.connecting))
{
- System.out.printf(" (using %s)", info.connecting.toString(printPort));
+ out.printf(" (using %s)", info.connecting.toString(printPort));
}
- System.out.printf("%n");
+ out.printf("%n");
if (!info.receivingSummaries.isEmpty())
{
long totalFilesToReceive = info.getTotalFilesToReceive();
@@ -67,24 +69,24 @@ public class NetStats extends NodeToolCmd
double percentageSizesReceived = ((double) totalSizeReceived / totalBytesToReceive) * 100;
if (humanReadable)
- System.out.printf(" Receiving %d files, %s total. Already received %d files (%.2f%%), %s total (%.2f%%)%n",
- totalFilesToReceive,
- FileUtils.stringifyFileSize(totalBytesToReceive),
- totalFilesReceived,
- percentageFilesReceived,
- FileUtils.stringifyFileSize(totalSizeReceived),
- percentageSizesReceived);
+ out.printf(" Receiving %d files, %s total. Already received %d files (%.2f%%), %s total (%.2f%%)%n",
+ totalFilesToReceive,
+ FileUtils.stringifyFileSize(totalBytesToReceive),
+ totalFilesReceived,
+ percentageFilesReceived,
+ FileUtils.stringifyFileSize(totalSizeReceived),
+ percentageSizesReceived);
else
- System.out.printf(" Receiving %d files, %d bytes total. Already received %d files (%.2f%%), %d bytes total (%.2f%%)%n",
- totalFilesToReceive,
- totalBytesToReceive,
- totalFilesReceived,
- percentageFilesReceived,
- totalSizeReceived,
- percentageSizesReceived);
+ out.printf(" Receiving %d files, %d bytes total. Already received %d files (%.2f%%), %d bytes total (%.2f%%)%n",
+ totalFilesToReceive,
+ totalBytesToReceive,
+ totalFilesReceived,
+ percentageFilesReceived,
+ totalSizeReceived,
+ percentageSizesReceived);
for (ProgressInfo progress : info.getReceivingFiles())
{
- System.out.printf(" %s%n", progress.toString(printPort));
+ out.printf(" %s%n", progress.toString(printPort));
}
}
if (!info.sendingSummaries.isEmpty())
@@ -97,24 +99,24 @@ public class NetStats extends NodeToolCmd
double percentageSizeSent = ((double) totalSizeSent / totalSizeToSend) * 100;
if (humanReadable)
- System.out.printf(" Sending %d files, %s total. Already sent %d files (%.2f%%), %s total (%.2f%%)%n",
- totalFilesToSend,
- FileUtils.stringifyFileSize(totalSizeToSend),
- totalFilesSent,
- percentageFilesSent,
- FileUtils.stringifyFileSize(totalSizeSent),
- percentageSizeSent);
+ out.printf(" Sending %d files, %s total. Already sent %d files (%.2f%%), %s total (%.2f%%)%n",
+ totalFilesToSend,
+ FileUtils.stringifyFileSize(totalSizeToSend),
+ totalFilesSent,
+ percentageFilesSent,
+ FileUtils.stringifyFileSize(totalSizeSent),
+ percentageSizeSent);
else
- System.out.printf(" Sending %d files, %d bytes total. Already sent %d files (%.2f%%), %d bytes total (%.2f%%) %n",
- totalFilesToSend,
- totalSizeToSend,
- totalFilesSent,
- percentageFilesSent,
- totalSizeSent,
- percentageSizeSent);
+ out.printf(" Sending %d files, %d bytes total. Already sent %d files (%.2f%%), %d bytes total (%.2f%%) %n",
+ totalFilesToSend,
+ totalSizeToSend,
+ totalFilesSent,
+ percentageFilesSent,
+ totalSizeSent,
+ percentageSizeSent);
for (ProgressInfo progress : info.getSendingFiles())
{
- System.out.printf(" %s%n", progress.toString(printPort));
+ out.printf(" %s%n", progress.toString(printPort));
}
}
}
@@ -122,14 +124,14 @@ public class NetStats extends NodeToolCmd
if (!probe.isStarting())
{
- System.out.printf("Read Repair Statistics:%nAttempted: %d%nMismatch (Blocking): %d%nMismatch (Background): %d%n", probe.getReadRepairAttempted(), probe.getReadRepairRepairedBlocking(), probe.getReadRepairRepairedBackground());
+ out.printf("Read Repair Statistics:%nAttempted: %d%nMismatch (Blocking): %d%nMismatch (Background): %d%n", probe.getReadRepairAttempted(), probe.getReadRepairRepairedBlocking(), probe.getReadRepairRepairedBackground());
MessagingServiceMBean ms = probe.getMessagingServiceProxy();
- System.out.printf("%-25s", "Pool Name");
- System.out.printf("%10s", "Active");
- System.out.printf("%10s", "Pending");
- System.out.printf("%15s", "Completed");
- System.out.printf("%10s%n", "Dropped");
+ out.printf("%-25s", "Pool Name");
+ out.printf("%10s", "Active");
+ out.printf("%10s", "Pending");
+ out.printf("%15s", "Completed");
+ out.printf("%10s%n", "Dropped");
int pending;
long completed;
@@ -144,7 +146,7 @@ public class NetStats extends NodeToolCmd
dropped = 0;
for (long n : ms.getLargeMessageDroppedTasksWithPort().values())
dropped += n;
- System.out.printf("%-25s%10s%10s%15s%10s%n", "Large messages", "n/a", pending, completed, dropped);
+ out.printf("%-25s%10s%10s%15s%10s%n", "Large messages", "n/a", pending, completed, dropped);
pending = 0;
for (int n : ms.getSmallMessagePendingTasksWithPort().values())
@@ -155,7 +157,7 @@ public class NetStats extends NodeToolCmd
dropped = 0;
for (long n : ms.getSmallMessageDroppedTasksWithPort().values())
dropped += n;
- System.out.printf("%-25s%10s%10s%15s%10s%n", "Small messages", "n/a", pending, completed, dropped);
+ out.printf("%-25s%10s%10s%15s%10s%n", "Small messages", "n/a", pending, completed, dropped);
pending = 0;
for (int n : ms.getGossipMessagePendingTasksWithPort().values())
@@ -166,7 +168,7 @@ public class NetStats extends NodeToolCmd
dropped = 0;
for (long n : ms.getGossipMessageDroppedTasksWithPort().values())
dropped += n;
- System.out.printf("%-25s%10s%10s%15s%10s%n", "Gossip messages", "n/a", pending, completed, dropped);
+ out.printf("%-25s%10s%10s%15s%10s%n", "Gossip messages", "n/a", pending, completed, dropped);
}
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/ProfileLoad.java b/src/java/org/apache/cassandra/tools/nodetool/ProfileLoad.java
index 7037969..487f14a 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/ProfileLoad.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/ProfileLoad.java
@@ -20,6 +20,7 @@ package org.apache.cassandra.tools.nodetool;
import static com.google.common.base.Preconditions.checkArgument;
import static org.apache.commons.lang3.StringUtils.join;
+import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -108,19 +109,19 @@ public class ProfileLoad extends NodeToolCmd
.addColumn("Partition", "value")
.addColumn("Count", "count")
.addColumn("+/-", "error")
- .print();
+ .print(probe.output().out);
}
rb.forType(SamplerType.WRITE_SIZE, "Max mutation size by partition")
.addColumn("Table", "table")
.addColumn("Partition", "value")
.addColumn("Bytes", "count")
- .print();
+ .print(probe.output().out);
rb.forType(SamplerType.LOCAL_READ_TIME, "Longest read query times")
.addColumn("Query", "value")
.addColumn("Microseconds", "count")
- .print();
+ .print(probe.output().out);
}
private class ResultBuilder
@@ -163,14 +164,14 @@ public class ProfileLoad extends NodeToolCmd
return key;
}
- public void print()
+ public void print(PrintStream outStream)
{
if (targets.contains(type.toString()))
{
if (!first.get())
- System.out.println();
+ outStream.println();
first.set(false);
- System.out.println(description + ':');
+ outStream.println(description + ':');
TableBuilder out = new TableBuilder();
out.add(dataKeys.stream().map(p -> p.left).collect(Collectors.toList()).toArray(new String[] {}));
List<CompositeData> topk = results.get(type.toString());
@@ -180,11 +181,11 @@ public class ProfileLoad extends NodeToolCmd
}
if (topk.size() == 0)
{
- System.out.println(" Nothing recorded during sampling period...");
+ outStream.println(" Nothing recorded during sampling period...");
}
else
{
- out.printTo(System.out);
+ out.printTo(outStream);
}
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/ProxyHistograms.java b/src/java/org/apache/cassandra/tools/nodetool/ProxyHistograms.java
index 1bf31d5..c736a67 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/ProxyHistograms.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/ProxyHistograms.java
@@ -17,6 +17,8 @@
*/
package org.apache.cassandra.tools.nodetool;
+import java.io.PrintStream;
+
import static java.lang.String.format;
import io.airlift.airline.Command;
@@ -29,6 +31,7 @@ public class ProxyHistograms extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
+ PrintStream out = probe.output().out;
String[] percentiles = {"50%", "75%", "95%", "98%", "99%", "Min", "Max"};
Double[] readLatency = probe.metricPercentilesAsArray(probe.getProxyMetric("Read"));
Double[] writeLatency = probe.metricPercentilesAsArray(probe.getProxyMetric("Write"));
@@ -37,14 +40,14 @@ public class ProxyHistograms extends NodeToolCmd
Double[] casWriteLatency = probe.metricPercentilesAsArray(probe.getProxyMetric("CASWrite"));
Double[] viewWriteLatency = probe.metricPercentilesAsArray(probe.getProxyMetric("ViewWrite"));
- System.out.println("proxy histograms");
- System.out.println(format("%-10s%19s%19s%19s%19s%19s%19s",
+ out.println("proxy histograms");
+ out.println(format("%-10s%19s%19s%19s%19s%19s%19s",
"Percentile", "Read Latency", "Write Latency", "Range Latency", "CAS Read Latency", "CAS Write Latency", "View Write Latency"));
- System.out.println(format("%-10s%19s%19s%19s%19s%19s%19s",
+ out.println(format("%-10s%19s%19s%19s%19s%19s%19s",
"", "(micros)", "(micros)", "(micros)", "(micros)", "(micros)", "(micros)"));
for (int i = 0; i < percentiles.length; i++)
{
- System.out.println(format("%-10s%19.2f%19.2f%19.2f%19.2f%19.2f%19.2f",
+ out.println(format("%-10s%19.2f%19.2f%19.2f%19.2f%19.2f%19.2f",
percentiles[i],
readLatency[i],
writeLatency[i],
@@ -53,6 +56,6 @@ public class ProxyHistograms extends NodeToolCmd
casWriteLatency[i],
viewWriteLatency[i]));
}
- System.out.println();
+ out.println();
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/RangeKeySample.java b/src/java/org/apache/cassandra/tools/nodetool/RangeKeySample.java
index 1ca2aa9..fb44d2c 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/RangeKeySample.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/RangeKeySample.java
@@ -30,11 +30,11 @@ public class RangeKeySample extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.println("RangeKeySample: ");
+ probe.output().out.println("RangeKeySample: ");
List<String> tokenStrings = probe.sampleKeyRange();
for (String tokenString : tokenStrings)
{
- System.out.println("\t" + tokenString);
+ probe.output().out.println("\t" + tokenString);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/Refresh.java b/src/java/org/apache/cassandra/tools/nodetool/Refresh.java
index 3c8d4c9..b32e7b6 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/Refresh.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/Refresh.java
@@ -36,8 +36,8 @@ public class Refresh extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.println("nodetool refresh is deprecated, use nodetool import instead");
+ probe.output().out.println("nodetool refresh is deprecated, use nodetool import instead");
checkArgument(args.size() == 2, "refresh requires ks and cf args");
probe.loadNewSSTables(args.get(0), args.get(1));
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/ReloadSeeds.java b/src/java/org/apache/cassandra/tools/nodetool/ReloadSeeds.java
index b9682cf..e054abd 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/ReloadSeeds.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/ReloadSeeds.java
@@ -17,6 +17,7 @@
*/
package org.apache.cassandra.tools.nodetool;
+import java.io.PrintStream;
import java.util.List;
import io.airlift.airline.Command;
@@ -30,18 +31,19 @@ public class ReloadSeeds extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
+ PrintStream out = probe.output().out;
List<String> seedList = probe.reloadSeeds();
if (seedList == null)
{
- System.out.println("Failed to reload the seed node list.");
+ out.println("Failed to reload the seed node list.");
}
else if (seedList.isEmpty())
{
- System.out.println("Seed node list does not contain any remote node IPs");
+ out.println("Seed node list does not contain any remote node IPs");
}
else
{
- System.out.println("Updated seed node IP list, excluding the current node's IP: " + String.join(" ", seedList));
+ out.println("Updated seed node IP list, excluding the current node's IP: " + String.join(" ", seedList));
}
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/RemoveNode.java b/src/java/org/apache/cassandra/tools/nodetool/RemoveNode.java
index 0acb313..e26cce3 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/RemoveNode.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/RemoveNode.java
@@ -36,10 +36,10 @@ public class RemoveNode extends NodeToolCmd
switch (removeOperation)
{
case "status":
- System.out.println("RemovalStatus: " + probe.getRemovalStatus(printPort));
+ probe.output().out.println("RemovalStatus: " + probe.getRemovalStatus(printPort));
break;
case "force":
- System.out.println("RemovalStatus: " + probe.getRemovalStatus(printPort));
+ probe.output().out.println("RemovalStatus: " + probe.getRemovalStatus(printPort));
probe.forceRemoveCompletion();
break;
default:
diff --git a/src/java/org/apache/cassandra/tools/nodetool/Repair.java b/src/java/org/apache/cassandra/tools/nodetool/Repair.java
index 0f9bfb3..c4f60af 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/Repair.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/Repair.java
@@ -168,7 +168,7 @@ public class Repair extends NodeToolCmd
options.put(RepairOption.HOSTS_KEY, StringUtils.join(specificHosts, ","));
try
{
- probe.repairAsync(System.out, keyspace, options);
+ probe.repairAsync(probe.output().out, keyspace, options);
} catch (Exception e)
{
throw new RuntimeException("Error occurred during repair", e);
diff --git a/src/java/org/apache/cassandra/tools/nodetool/RepairAdmin.java b/src/java/org/apache/cassandra/tools/nodetool/RepairAdmin.java
index b66c32a..2226bf4 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/RepairAdmin.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/RepairAdmin.java
@@ -18,17 +18,15 @@
package org.apache.cassandra.tools.nodetool;
+import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-
import javax.management.openmbean.CompositeData;
import com.google.common.base.Joiner;
-import com.google.common.base.Preconditions;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
-
import org.apache.commons.lang3.StringUtils;
import io.airlift.airline.Arguments;
@@ -36,10 +34,8 @@ import io.airlift.airline.Command;
import io.airlift.airline.Option;
import org.apache.cassandra.repair.consistent.LocalSessionInfo;
import org.apache.cassandra.repair.consistent.admin.CleanupSummary;
-import org.apache.cassandra.repair.consistent.admin.PendingStat;
import org.apache.cassandra.repair.consistent.admin.PendingStats;
import org.apache.cassandra.repair.consistent.admin.RepairStats;
-import org.apache.cassandra.service.ActiveRepairServiceMBean;
import org.apache.cassandra.tools.NodeProbe;
import org.apache.cassandra.tools.NodeTool;
import org.apache.cassandra.utils.FBUtilities;
@@ -63,11 +59,11 @@ public abstract class RepairAdmin extends NodeTool.NodeToolCmd
protected void execute(NodeProbe probe)
{
+ PrintStream out = probe.output().out;
List<Map<String, String>> sessions = probe.getRepairServiceProxy().getSessions(all, getRangeString(startToken, endToken));
if (sessions.isEmpty())
{
- System.out.println("no sessions");
-
+ out.println("no sessions");
}
else
{
@@ -91,7 +87,7 @@ public abstract class RepairAdmin extends NodeTool.NodeToolCmd
rows.add(values);
}
- printTable(rows);
+ printTable(rows, out);
}
}
}
@@ -150,7 +146,7 @@ public abstract class RepairAdmin extends NodeTool.NodeToolCmd
rows.add(row);
}
- printTable(rows);
+ printTable(rows, probe.output().out);
}
}
@@ -172,11 +168,12 @@ public abstract class RepairAdmin extends NodeTool.NodeToolCmd
protected void execute(NodeProbe probe)
{
+ PrintStream out = probe.output().out;
List<CompositeData> compositeData = probe.getRepairServiceProxy().getRepairStats(schemaArgs, getRangeString(startToken, endToken));
if (compositeData.isEmpty())
{
- System.out.println("no stats");
+ out.println("no stats");
return;
}
@@ -211,7 +208,7 @@ public abstract class RepairAdmin extends NodeTool.NodeToolCmd
rows.add(row);
}
- printTable(rows);
+ printTable(rows, out);
}
}
@@ -235,7 +232,8 @@ public abstract class RepairAdmin extends NodeTool.NodeToolCmd
protected void execute(NodeProbe probe)
{
- System.out.println("Cleaning up data from completed sessions...");
+ PrintStream out = probe.output().out;
+ out.println("Cleaning up data from completed sessions...");
List<CompositeData> compositeData = probe.getRepairServiceProxy().cleanupPending(schemaArgs, getRangeString(startToken, endToken), force);
List<CleanupSummary> summaries = new ArrayList<>(compositeData.size());
@@ -266,9 +264,9 @@ public abstract class RepairAdmin extends NodeTool.NodeToolCmd
}
if (hasFailures)
- System.out.println("Some tables couldn't be cleaned up completely");
+ out.println("Some tables couldn't be cleaned up completely");
- printTable(rows);
+ printTable(rows, out);
}
}
@@ -289,7 +287,7 @@ public abstract class RepairAdmin extends NodeTool.NodeToolCmd
}
}
- private static void printTable(List<List<String>> rows)
+ private static void printTable(List<List<String>> rows, PrintStream out)
{
if (rows.isEmpty())
return;
@@ -319,7 +317,7 @@ public abstract class RepairAdmin extends NodeTool.NodeToolCmd
{
formatted.add(String.format(fmts.get(i), row.get(i)));
}
- System.out.println(Joiner.on(" | ").join(formatted));
+ out.println(Joiner.on(" | ").join(formatted));
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/Ring.java b/src/java/org/apache/cassandra/tools/nodetool/Ring.java
index 20cb890..8b23717 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/Ring.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/Ring.java
@@ -22,6 +22,7 @@ import io.airlift.airline.Arguments;
import io.airlift.airline.Command;
import io.airlift.airline.Option;
+import java.io.PrintStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.DecimalFormat;
@@ -51,6 +52,7 @@ public class Ring extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
+ PrintStream out = probe.output().out;
try
{
Map<String, String> tokensToEndpoints = probe.getTokenToEndpointMap(printPort);
@@ -93,22 +95,22 @@ public class Ring extends NodeToolCmd
}
catch (IllegalArgumentException ex)
{
- System.out.printf("%nError: %s%n", ex.getMessage());
+ out.printf("%nError: %s%n", ex.getMessage());
return;
}
- System.out.println();
+ out.println();
for (Entry<String, SetHostStatWithPort> entry : NodeTool.getOwnershipByDcWithPort(probe, resolveIp, tokensToEndpoints, ownerships).entrySet())
printDc(probe, format, entry.getKey(), endpointsToTokens, entry.getValue(), showEffectiveOwnership);
if (haveVnodes)
{
- System.out.println(" Warning: \"nodetool ring\" is used to output all the tokens of a node.");
- System.out.println(" To view status related info of a node use \"nodetool status\" instead.\n");
+ out.println(" Warning: \"nodetool ring\" is used to output all the tokens of a node.");
+ out.println(" To view status related info of a node use \"nodetool status\" instead.\n");
}
- System.out.printf("%n " + errors.toString());
+ out.printf("%n " + errors.toString());
}
else
{
@@ -126,22 +128,22 @@ public class Ring extends NodeToolCmd
}
catch (IllegalArgumentException ex)
{
- System.out.printf("%nError: %s%n", ex.getMessage());
+ out.printf("%nError: %s%n", ex.getMessage());
return;
}
- System.out.println();
+ out.println();
for (Entry<String, SetHostStat> entry : NodeTool.getOwnershipByDc(probe, resolveIp, tokensToEndpoints, ownerships).entrySet())
printDc(probe, format, entry.getKey(), endpointsToTokens, entry.getValue(), showEffectiveOwnership);
if (haveVnodes)
{
- System.out.println(" Warning: \"nodetool ring\" is used to output all the tokens of a node.");
- System.out.println(" To view status related info of a node use \"nodetool status\" instead.\n");
+ out.println(" Warning: \"nodetool ring\" is used to output all the tokens of a node.");
+ out.println(" To view status related info of a node use \"nodetool status\" instead.\n");
}
- System.out.printf("%n " + errors.toString());
+ out.printf("%n " + errors.toString());
}
} catch (Exception e)
{
@@ -155,6 +157,7 @@ public class Ring extends NodeToolCmd
LinkedHashMultimap<String, String> endpointsToTokens,
SetHostStat hoststats,boolean showEffectiveOwnership)
{
+ PrintStream out = probe.output().out;
Collection<String> liveNodes = probe.getLiveNodes(false);
Collection<String> deadNodes = probe.getUnreachableNodes(false);
Collection<String> joiningNodes = probe.getJoiningNodes(false);
@@ -162,8 +165,8 @@ public class Ring extends NodeToolCmd
Collection<String> movingNodes = probe.getMovingNodes(false);
Map<String, String> loadMap = probe.getLoadMap(false);
- System.out.println("Datacenter: " + dc);
- System.out.println("==========");
+ out.println("Datacenter: " + dc);
+ out.println("==========");
// get the total amount of replicas for this dc and the last token in this dc's ring
List<String> tokens = new ArrayList<>();
@@ -175,12 +178,12 @@ public class Ring extends NodeToolCmd
lastToken = tokens.get(tokens.size() - 1);
}
- System.out.printf(format, "Address", "Rack", "Status", "State", "Load", "Owns", "Token");
+ out.printf(format, "Address", "Rack", "Status", "State", "Load", "Owns", "Token");
if (hoststats.size() > 1)
- System.out.printf(format, "", "", "", "", "", "", lastToken);
+ out.printf(format, "", "", "", "", "", "", lastToken);
else
- System.out.println();
+ out.println();
for (HostStat stat : hoststats)
{
@@ -214,9 +217,9 @@ public class Ring extends NodeToolCmd
? loadMap.get(endpoint)
: "?";
String owns = stat.owns != null && showEffectiveOwnership? new DecimalFormat("##0.00%").format(stat.owns) : "?";
- System.out.printf(format, stat.ipOrDns(), rack, status, state, load, owns, stat.token);
+ out.printf(format, stat.ipOrDns(), rack, status, state, load, owns, stat.token);
}
- System.out.println();
+ out.println();
}
private void printDc(NodeProbe probe, String format,
@@ -224,6 +227,7 @@ public class Ring extends NodeToolCmd
LinkedHashMultimap<String, String> endpointsToTokens,
SetHostStatWithPort hoststats,boolean showEffectiveOwnership)
{
+ PrintStream out = probe.output().out;
Collection<String> liveNodes = probe.getLiveNodes(true);
Collection<String> deadNodes = probe.getUnreachableNodes(true);
Collection<String> joiningNodes = probe.getJoiningNodes(true);
@@ -231,8 +235,8 @@ public class Ring extends NodeToolCmd
Collection<String> movingNodes = probe.getMovingNodes(true);
Map<String, String> loadMap = probe.getLoadMap(true);
- System.out.println("Datacenter: " + dc);
- System.out.println("==========");
+ out.println("Datacenter: " + dc);
+ out.println("==========");
// get the total amount of replicas for this dc and the last token in this dc's ring
List<String> tokens = new ArrayList<>();
@@ -244,12 +248,12 @@ public class Ring extends NodeToolCmd
lastToken = tokens.get(tokens.size() - 1);
}
- System.out.printf(format, "Address", "Rack", "Status", "State", "Load", "Owns", "Token");
+ out.printf(format, "Address", "Rack", "Status", "State", "Load", "Owns", "Token");
if (hoststats.size() > 1)
- System.out.printf(format, "", "", "", "", "", "", lastToken);
+ out.printf(format, "", "", "", "", "", "", lastToken);
else
- System.out.println();
+ out.println();
for (HostStatWithPort stat : hoststats)
{
@@ -283,8 +287,8 @@ public class Ring extends NodeToolCmd
? loadMap.get(endpoint)
: "?";
String owns = stat.owns != null && showEffectiveOwnership? new DecimalFormat("##0.00%").format(stat.owns) : "?";
- System.out.printf(format, stat.ipOrDns(), rack, status, state, load, owns, stat.token);
+ out.printf(format, stat.ipOrDns(), rack, status, state, load, owns, stat.token);
}
- System.out.println();
+ out.println();
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/Scrub.java b/src/java/org/apache/cassandra/tools/nodetool/Scrub.java
index 7c5ff00..049d1d0 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/Scrub.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/Scrub.java
@@ -69,7 +69,7 @@ public class Scrub extends NodeToolCmd
{
try
{
- probe.scrub(System.out, disableSnapshot, skipCorrupted, !noValidation, reinsertOverflowedTTL, jobs, keyspace, tableNames);
+ probe.scrub(probe.output().out, disableSnapshot, skipCorrupted, !noValidation, reinsertOverflowedTTL, jobs, keyspace, tableNames);
}
catch (IllegalArgumentException e)
{
diff --git a/src/java/org/apache/cassandra/tools/nodetool/SetConcurrency.java b/src/java/org/apache/cassandra/tools/nodetool/SetConcurrency.java
index 3ce94e1..6705c92 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/SetConcurrency.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/SetConcurrency.java
@@ -54,7 +54,7 @@ public class SetConcurrency extends NodeToolCmd
catch (IllegalArgumentException e)
{
String message = e.getMessage() != null ? e.getMessage() : "invalid pool size";
- System.out.println("Unable to set concurrency: " + message);
+ probe.output().out.println("Unable to set concurrency: " + message);
System.exit(1);
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/Sjk.java b/src/java/org/apache/cassandra/tools/nodetool/Sjk.java
index f394d38..3ad2c94 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/Sjk.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/Sjk.java
@@ -1,8 +1,25 @@
-
+/*
+ * 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.File;
import java.io.IOException;
+import java.io.PrintStream;
import java.lang.reflect.Field;
import java.net.URL;
import java.net.URLDecoder;
@@ -40,6 +57,7 @@ import com.beust.jcommander.ParameterDescription;
import com.beust.jcommander.Parameterized;
import io.airlift.airline.Arguments;
import io.airlift.airline.Command;
+import org.apache.cassandra.tools.Output;
import org.gridkit.jvmtool.JmxConnectionInfo;
import org.gridkit.jvmtool.cli.CommandLauncher;
@@ -54,32 +72,33 @@ public class Sjk extends NodeToolCmd
private final Wrapper wrapper = new Wrapper();
- public void run()
+ @Override
+ public void runInternal()
{
- wrapper.prepare(args != null ? args.toArray(new String[0]) : new String[]{"help"});
+ wrapper.prepare(args != null ? args.toArray(new String[0]) : new String[]{"help"}, output.out, output.err);
if (!wrapper.requiresMbeanServerConn())
{
// SJK command does not require an MBeanServerConnection, so just invoke it
- wrapper.run(null);
+ wrapper.run(null, output);
}
else
{
// invoke common nodetool handling to establish MBeanServerConnection
- super.run();
+ super.runInternal();
}
}
public void sequenceRun(NodeProbe probe)
{
- wrapper.prepare(args != null ? args.toArray(new String[0]) : new String[]{"help"});
- if (!wrapper.run(probe))
+ wrapper.prepare(args != null ? args.toArray(new String[0]) : new String[]{"help"}, probe.output().out, probe.output().err);
+ if (!wrapper.run(probe, probe.output()))
probe.failed();
}
protected void execute(NodeProbe probe)
{
- if (!wrapper.run(probe))
+ if (!wrapper.run(probe, probe.output()))
probe.failed();
}
@@ -107,7 +126,7 @@ public class Sjk extends NodeToolCmd
throw new UnsupportedOperationException();
}
- public void prepare(String[] args)
+ public void prepare(String[] args, PrintStream out, PrintStream err)
{
try
{
@@ -143,7 +162,7 @@ public class Sjk extends NodeToolCmd
{
for (String cmd : commands.keySet())
{
- System.out.println(String.format("%8s - %s", cmd, parser.getCommandDescription(cmd)));
+ out.println(String.format("%8s - %s", cmd, parser.getCommandDescription(cmd)));
}
}
else
@@ -161,32 +180,37 @@ public class Sjk extends NodeToolCmd
{
for (String m : error.messages)
{
- logError(m);
+ err.println(m);
}
if (isVerbose() && error.getCause() != null)
{
- logTrace(error.getCause());
+ error.getCause().printStackTrace(err);
}
if (error.printUsage && parser != null)
{
- if (parser.getParsedCommand() != null)
- {
- parser.usage(parser.getParsedCommand());
- }
- else
- {
- parser.usage();
- }
+ printUsage(parser, out, parser.getParsedCommand());
}
}
catch (Throwable e)
{
- e.printStackTrace();
+ e.printStackTrace(err);
}
}
- public boolean run(final NodeProbe probe)
+ void printUsage(JCommander parser, PrintStream out, String optionalCommand)
{
+ StringBuilder sb = new StringBuilder();
+ if (optionalCommand != null)
+ parser.usage(sb, optionalCommand);
+ else
+ parser.usage(sb);
+ out.println(sb.toString());
+ }
+
+ public boolean run(final NodeProbe probe, final Output output)
+ {
+ PrintStream out = output.out;
+ PrintStream err = output.err;
try
{
setJmxConnInfo(probe);
@@ -200,28 +224,21 @@ public class Sjk extends NodeToolCmd
{
for (String m : error.messages)
{
- logError(m);
+ err.println(m);
}
if (isVerbose() && error.getCause() != null)
{
- logTrace(error.getCause());
+ error.getCause().printStackTrace(err);
}
if (error.printUsage && parser != null)
{
- if (parser.getParsedCommand() != null)
- {
- parser.usage(parser.getParsedCommand());
- }
- else
- {
- parser.usage();
- }
+ printUsage(parser, out, parser.getParsedCommand());
}
return true;
}
catch (Throwable e)
{
- e.printStackTrace();
+ e.printStackTrace(err);
}
// abnormal termination
diff --git a/src/java/org/apache/cassandra/tools/nodetool/Snapshot.java b/src/java/org/apache/cassandra/tools/nodetool/Snapshot.java
index 495ee9d..6619c53 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/Snapshot.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/Snapshot.java
@@ -24,6 +24,7 @@ import io.airlift.airline.Command;
import io.airlift.airline.Option;
import java.io.IOException;
+import java.io.PrintStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -53,6 +54,7 @@ public class Snapshot extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
+ PrintStream out = probe.output().out;
try
{
StringBuilder sb = new StringBuilder();
@@ -76,9 +78,9 @@ public class Snapshot extends NodeToolCmd
if (!snapshotName.isEmpty())
sb.append(" with snapshot name [").append(snapshotName).append("]");
sb.append(" and options ").append(options.toString());
- System.out.println(sb.toString());
+ out.println(sb.toString());
probe.takeMultipleTableSnapshot(snapshotName, options, ktList.split(","));
- System.out.println("Snapshot directory: " + snapshotName);
+ out.println("Snapshot directory: " + snapshotName);
}
else
{
@@ -90,10 +92,10 @@ public class Snapshot extends NodeToolCmd
if (!snapshotName.isEmpty())
sb.append(" with snapshot name [").append(snapshotName).append("]");
sb.append(" and options ").append(options.toString());
- System.out.println(sb.toString());
+ out.println(sb.toString());
probe.takeSnapshot(snapshotName, table, options, toArray(keyspaces, String.class));
- System.out.println("Snapshot directory: " + snapshotName);
+ out.println("Snapshot directory: " + snapshotName);
}
}
catch (IOException e)
@@ -101,4 +103,4 @@ public class Snapshot extends NodeToolCmd
throw new RuntimeException("Error during taking a snapshot", e);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/Status.java b/src/java/org/apache/cassandra/tools/nodetool/Status.java
index fe11335..4184939 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/Status.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/Status.java
@@ -21,7 +21,7 @@ import io.airlift.airline.Arguments;
import io.airlift.airline.Command;
import io.airlift.airline.Option;
-import java.net.InetAddress;
+import java.io.PrintStream;
import java.net.UnknownHostException;
import java.text.DecimalFormat;
import java.util.Collection;
@@ -31,7 +31,6 @@ import java.util.Map;
import java.util.SortedMap;
import org.apache.cassandra.locator.EndpointSnitchInfoMBean;
-import org.apache.cassandra.locator.InetAddressAndPort;
import org.apache.cassandra.tools.NodeProbe;
import org.apache.cassandra.tools.NodeTool;
import org.apache.cassandra.tools.NodeTool.NodeToolCmd;
@@ -57,6 +56,7 @@ public class Status extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
+ PrintStream out = probe.output().out;
joiningNodes = probe.getJoiningNodes(printPort);
leavingNodes = probe.getLeavingNodes(printPort);
movingNodes = probe.getMovingNodes(printPort);
@@ -84,7 +84,7 @@ public class Status extends NodeToolCmd
}
catch (IllegalArgumentException ex)
{
- System.out.printf("%nError: %s%n", ex.getMessage());
+ out.printf("%nError: %s%n", ex.getMessage());
System.exit(1);
}
@@ -118,22 +118,22 @@ public class Status extends NodeToolCmd
for (Map.Entry<String, SetHostStatWithPort> dc : dcs.entrySet())
{
if (!first) {
- System.out.println();
+ out.println();
}
first = false;
String dcHeader = String.format("Datacenter: %s%n", dc.getKey());
- System.out.print(dcHeader);
- for (int i = 0; i < (dcHeader.length() - 1); i++) System.out.print('=');
- System.out.println();
+ out.print(dcHeader);
+ for (int i = 0; i < (dcHeader.length() - 1); i++) out.print('=');
+ out.println();
// Legend
- System.out.println("Status=Up/Down");
- System.out.println("|/ State=Normal/Leaving/Joining/Moving");
+ out.println("Status=Up/Down");
+ out.println("|/ State=Normal/Leaving/Joining/Moving");
TableBuilder dcTable = results.next();
- dcTable.printTo(System.out);
+ dcTable.printTo(out);
}
- System.out.printf("%n" + errors);
+ out.printf("%n" + errors);
}
private void addNodesHeader(boolean hasEffectiveOwns, TableBuilder tableBuilder)
diff --git a/src/java/org/apache/cassandra/tools/nodetool/StatusAutoCompaction.java b/src/java/org/apache/cassandra/tools/nodetool/StatusAutoCompaction.java
index 4322bb8..a82f8e8 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/StatusAutoCompaction.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/StatusAutoCompaction.java
@@ -17,12 +17,8 @@
*/
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;
@@ -67,9 +63,9 @@ public class StatusAutoCompaction extends NodeToolCmd
}
}
if (showAll)
- table.printTo(System.out);
+ table.printTo(probe.output().out);
else
- System.out.println(allEnabled ? "running" :
+ probe.output().out.println(allEnabled ? "running" :
allDisabled ? "not running" : "partially running");
}
catch (IOException e)
diff --git a/src/java/org/apache/cassandra/tools/nodetool/StatusBackup.java b/src/java/org/apache/cassandra/tools/nodetool/StatusBackup.java
index 84fa8a5..0d5b527 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/StatusBackup.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/StatusBackup.java
@@ -28,9 +28,9 @@ public class StatusBackup extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.println(
+ probe.output().out.println(
probe.isIncrementalBackupsEnabled()
? "running"
: "not running");
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/StatusBinary.java b/src/java/org/apache/cassandra/tools/nodetool/StatusBinary.java
index 45fe6c3..12bbdf7 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/StatusBinary.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/StatusBinary.java
@@ -28,9 +28,9 @@ public class StatusBinary extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.println(
+ probe.output().out.println(
probe.isNativeTransportRunning()
? "running"
: "not running");
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/StatusGossip.java b/src/java/org/apache/cassandra/tools/nodetool/StatusGossip.java
index b6a1164..1c4e66a 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/StatusGossip.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/StatusGossip.java
@@ -28,9 +28,9 @@ public class StatusGossip extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.println(
+ probe.output().out.println(
probe.isGossipRunning()
? "running"
: "not running");
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/StatusHandoff.java b/src/java/org/apache/cassandra/tools/nodetool/StatusHandoff.java
index bee161d..0978861 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/StatusHandoff.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/StatusHandoff.java
@@ -28,12 +28,12 @@ public class StatusHandoff extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.println(String.format("Hinted handoff is %s",
+ probe.output().out.println(String.format("Hinted handoff is %s",
probe.isHandoffEnabled()
? "running"
: "not running"));
for (String dc : probe.getHintedHandoffDisabledDCs())
- System.out.println(String.format("Data center %s is disabled", dc));
+ probe.output().out.println(String.format("Data center %s is disabled", dc));
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/TableHistograms.java b/src/java/org/apache/cassandra/tools/nodetool/TableHistograms.java
index 1c6fec4..fec47a6 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/TableHistograms.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/TableHistograms.java
@@ -22,6 +22,7 @@ import static java.lang.String.format;
import io.airlift.airline.Arguments;
import io.airlift.airline.Command;
+import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -47,6 +48,7 @@ public class TableHistograms extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
+ PrintStream out = probe.output().out;
Multimap<String, String> tablesList = HashMultimap.create();
// a <keyspace, set<table>> mapping for verification or as reference if none provided
@@ -99,7 +101,7 @@ public class TableHistograms extends NodeToolCmd
if (ArrayUtils.isEmpty(estimatedPartitionSize) || ArrayUtils.isEmpty(estimatedColumnCount))
{
- System.out.println("No SSTables exists, unable to calculate 'Partition Size' and 'Cell Count' percentiles");
+ out.println("No SSTables exists, unable to calculate 'Partition Size' and 'Cell Count' percentiles");
for (int i = 0; i < 7; i++)
{
@@ -114,7 +116,7 @@ public class TableHistograms extends NodeToolCmd
if (partitionSizeHist.isOverflowed())
{
- System.out.println(String.format("Row sizes are larger than %s, unable to calculate percentiles", partitionSizeHist.getLargestBucketOffset()));
+ out.println(String.format("Row sizes are larger than %s, unable to calculate percentiles", partitionSizeHist.getLargestBucketOffset()));
for (int i = 0; i < offsetPercentiles.length; i++)
estimatedRowSizePercentiles[i] = Double.NaN;
}
@@ -126,7 +128,7 @@ public class TableHistograms extends NodeToolCmd
if (columnCountHist.isOverflowed())
{
- System.out.println(String.format("Column counts are larger than %s, unable to calculate percentiles", columnCountHist.getLargestBucketOffset()));
+ out.println(String.format("Column counts are larger than %s, unable to calculate percentiles", columnCountHist.getLargestBucketOffset()));
for (int i = 0; i < estimatedColumnCountPercentiles.length; i++)
estimatedColumnCountPercentiles[i] = Double.NaN;
}
@@ -149,15 +151,15 @@ public class TableHistograms extends NodeToolCmd
Double[] writeLatency = probe.metricPercentilesAsArray((CassandraMetricsRegistry.JmxTimerMBean) probe.getColumnFamilyMetric(keyspace, table, "WriteLatency"));
Double[] sstablesPerRead = probe.metricPercentilesAsArray((CassandraMetricsRegistry.JmxHistogramMBean) probe.getColumnFamilyMetric(keyspace, table, "SSTablesPerReadHistogram"));
- System.out.println(format("%s/%s histograms", keyspace, table));
- System.out.println(format("%-10s%18s%18s%18s%18s%18s",
+ out.println(format("%s/%s histograms", keyspace, table));
+ out.println(format("%-10s%18s%18s%18s%18s%18s",
"Percentile", "Read Latency", "Write Latency", "SSTables", "Partition Size", "Cell Count"));
- System.out.println(format("%-10s%18s%18s%18s%18s%18s",
+ out.println(format("%-10s%18s%18s%18s%18s%18s",
"", "(micros)", "(micros)", "", "(bytes)", ""));
for (int i = 0; i < percentiles.length; i++)
{
- System.out.println(format("%-10s%18.2f%18.2f%18.2f%18.0f%18.0f",
+ out.println(format("%-10s%18.2f%18.2f%18.2f%18.0f%18.0f",
percentiles[i],
readLatency[i],
writeLatency[i],
@@ -165,7 +167,7 @@ public class TableHistograms extends NodeToolCmd
estimatedRowSizePercentiles[i],
estimatedColumnCountPercentiles[i]));
}
- System.out.println();
+ out.println();
}
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/TableStats.java b/src/java/org/apache/cassandra/tools/nodetool/TableStats.java
index 5f5651b..47ca132 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/TableStats.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/TableStats.java
@@ -95,7 +95,7 @@ public class TableStats extends NodeToolCmd
StatsHolder holder = new TableStatsHolder(probe, humanReadable, ignore, tableNames, sortKey, top);
// print out the keyspace and table statistics
StatsPrinter printer = TableStatsPrinter.from(outputFormat, !sortKey.isEmpty());
- printer.print(holder, System.out);
+ printer.print(holder, probe.output().out);
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/TpStats.java b/src/java/org/apache/cassandra/tools/nodetool/TpStats.java
index d7e8f06..5b20b13 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/TpStats.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/TpStats.java
@@ -45,6 +45,6 @@ public class TpStats extends NodeToolCmd
StatsHolder data = new TpStatsHolder(probe);
StatsPrinter printer = TpStatsPrinter.from(outputFormat);
- printer.print(data, System.out);
+ printer.print(data, probe.output().out);
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/UpgradeSSTable.java b/src/java/org/apache/cassandra/tools/nodetool/UpgradeSSTable.java
index c957c8c..ba1b6f5 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/UpgradeSSTable.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/UpgradeSSTable.java
@@ -51,7 +51,7 @@ public class UpgradeSSTable extends NodeToolCmd
{
try
{
- probe.upgradeSSTables(System.out, keyspace, !includeAll, jobs, tableNames);
+ probe.upgradeSSTables(probe.output().out, keyspace, !includeAll, jobs, tableNames);
}
catch (Exception e)
{
@@ -59,4 +59,4 @@ public class UpgradeSSTable extends NodeToolCmd
}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/Verify.java b/src/java/org/apache/cassandra/tools/nodetool/Verify.java
index 28b91fd..d2ae151 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/Verify.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/Verify.java
@@ -21,6 +21,7 @@ import io.airlift.airline.Arguments;
import io.airlift.airline.Command;
import io.airlift.airline.Option;
+import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
@@ -66,12 +67,13 @@ public class Verify extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
+ PrintStream out = probe.output().out;
List<String> keyspaces = parseOptionalKeyspace(args, probe);
String[] tableNames = parseOptionalTables(args);
if (checkOwnsTokens && !extendedVerify)
{
- System.out.println("Token verification requires --extended-verify");
+ out.println("Token verification requires --extended-verify");
System.exit(1);
}
@@ -79,11 +81,11 @@ public class Verify extends NodeToolCmd
{
try
{
- probe.verify(System.out, extendedVerify, checkVersion, diskFailurePolicy, mutateRepairStatus, checkOwnsTokens, quick, keyspace, tableNames);
+ probe.verify(out, extendedVerify, checkVersion, diskFailurePolicy, mutateRepairStatus, checkOwnsTokens, quick, keyspace, tableNames);
} catch (Exception e)
{
throw new RuntimeException("Error occurred during verifying", e);
}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/Version.java b/src/java/org/apache/cassandra/tools/nodetool/Version.java
index 395a247..f95907a 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/Version.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/Version.java
@@ -28,6 +28,6 @@ public class Version extends NodeToolCmd
@Override
public void execute(NodeProbe probe)
{
- System.out.println("ReleaseVersion: " + probe.getReleaseVersion());
+ probe.output().out.println("ReleaseVersion: " + probe.getReleaseVersion());
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/ViewBuildStatus.java b/src/java/org/apache/cassandra/tools/nodetool/ViewBuildStatus.java
index b432b68..89d35a4 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/ViewBuildStatus.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/ViewBuildStatus.java
@@ -18,6 +18,7 @@
package org.apache.cassandra.tools.nodetool;
+import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -40,6 +41,7 @@ public class ViewBuildStatus extends NodeTool.NodeToolCmd
protected void execute(NodeProbe probe)
{
+ PrintStream out = probe.output().out;
String keyspace = null, view = null;
if (args.size() == 2)
{
@@ -72,12 +74,12 @@ public class ViewBuildStatus extends NodeTool.NodeToolCmd
}
if (failed) {
- System.out.println(String.format("%s.%s has not finished building; node status is below.", keyspace, view));
- System.out.println();
- builder.printTo(System.out);
+ out.println(String.format("%s.%s has not finished building; node status is below.", keyspace, view));
+ out.println();
+ builder.printTo(out);
System.exit(1);
} else {
- System.out.println(String.format("%s.%s has finished building", keyspace, view));
+ out.println(String.format("%s.%s has finished building", keyspace, view));
System.exit(0);
}
}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/formatter/TableBuilder.java b/src/java/org/apache/cassandra/tools/nodetool/formatter/TableBuilder.java
index 2557a7d..166ed3d 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/formatter/TableBuilder.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/formatter/TableBuilder.java
@@ -38,7 +38,7 @@ import javax.annotation.Nonnull;
* {
* table.add(row);
* }
- * table.print(System.out);
+ * table.print(probe.outStream());
* }
* </pre>
*/
diff --git a/src/java/org/apache/cassandra/tools/nodetool/stats/TpStatsPrinter.java b/src/java/org/apache/cassandra/tools/nodetool/stats/TpStatsPrinter.java
index 617342a..252adf0 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/stats/TpStatsPrinter.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/stats/TpStatsPrinter.java
@@ -66,9 +66,9 @@ public class TpStatsPrinter
data.probe.getThreadPoolMetric(tpool.getKey(), tpool.getValue(), "TotalBlockedTasks").toString());
}
- poolBuilder.printTo(System.out);
+ poolBuilder.printTo(out);
- System.out.println("\nLatencies waiting in queue (micros) per dropped message types");
+ out.println("\nLatencies waiting in queue (micros) per dropped message types");
final TableBuilder droppedBuilder = new TableBuilder();
droppedBuilder.add("Message type", "Dropped ", "50% ", "95% ", "99% ", "Max");
@@ -109,7 +109,7 @@ public class TpStatsPrinter
droppedBuilder.add(columns.toArray(new String[0]));
}
- droppedBuilder.printTo(System.out);
+ droppedBuilder.printTo(out);
}
}
}
diff --git a/test/distributed/org/apache/cassandra/distributed/impl/Instance.java b/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
index b20d874..83669e2 100644
--- a/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
+++ b/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
@@ -18,8 +18,11 @@
package org.apache.cassandra.distributed.impl;
+import java.io.ByteArrayOutputStream;
+import java.io.Closeable;
import java.io.File;
import java.io.IOException;
+import java.io.PrintStream;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Collections;
@@ -102,6 +105,7 @@ import org.apache.cassandra.service.StorageServiceMBean;
import org.apache.cassandra.streaming.StreamReceiveTask;
import org.apache.cassandra.streaming.StreamTransferTask;
import org.apache.cassandra.streaming.async.StreamingInboundHandler;
+import org.apache.cassandra.tools.Output;
import org.apache.cassandra.tools.NodeTool;
import org.apache.cassandra.tracing.TraceState;
import org.apache.cassandra.tracing.Tracing;
@@ -621,20 +625,66 @@ public class Instance extends IsolatedExecutor implements IInvokableInstance
public NodeToolResult nodetoolResult(boolean withNotifications, String... commandAndArgs)
{
return sync(() -> {
- DTestNodeTool nodetool = new DTestNodeTool(withNotifications);
- int rc = nodetool.execute(commandAndArgs);
- return new NodeToolResult(commandAndArgs, rc, new ArrayList<>(nodetool.notifications.notifications), nodetool.latestError);
+ try (CapturingOutput output = new CapturingOutput())
+ {
+ DTestNodeTool nodetool = new DTestNodeTool(withNotifications, output.delegate);
+ int rc = nodetool.execute(commandAndArgs);
+ return new NodeToolResult(commandAndArgs, rc,
+ new ArrayList<>(nodetool.notifications.notifications),
+ nodetool.latestError,
+ output.getOutString(),
+ output.getErrString());
+ }
}).call();
}
+ private static class CapturingOutput implements Closeable
+ {
+ @SuppressWarnings("resource")
+ private final ByteArrayOutputStream outBase = new ByteArrayOutputStream();
+ @SuppressWarnings("resource")
+ private final ByteArrayOutputStream errBase = new ByteArrayOutputStream();
+
+ public final PrintStream out;
+ public final PrintStream err;
+ private final Output delegate;
+
+ public CapturingOutput()
+ {
+ PrintStream out = new PrintStream(outBase, true);
+ PrintStream err = new PrintStream(errBase, true);
+ this.delegate = new Output(out, err);
+ this.out = out;
+ this.err = err;
+ }
+
+ public String getOutString()
+ {
+ out.flush();
+ return outBase.toString();
+ }
+
+ public String getErrString()
+ {
+ err.flush();
+ return errBase.toString();
+ }
+
+ public void close()
+ {
+ out.close();
+ err.close();
+ }
+ }
+
public static class DTestNodeTool extends NodeTool {
private final StorageServiceMBean storageProxy;
private final CollectingNotificationListener notifications = new CollectingNotificationListener();
private Throwable latestError;
- public DTestNodeTool(boolean withNotifications) {
- super(new InternalNodeProbeFactory(withNotifications));
+ public DTestNodeTool(boolean withNotifications, Output output) {
+ super(new InternalNodeProbeFactory(withNotifications), output);
storageProxy = new InternalNodeProbe(withNotifications).getStorageService();
storageProxy.addNotificationListener(notifications, null, null);
}
diff --git a/test/distributed/org/apache/cassandra/distributed/shared/NodeToolResultWithOutput.java b/test/distributed/org/apache/cassandra/distributed/shared/NodeToolResultWithOutput.java
index cb94887..9cefd4d 100644
--- a/test/distributed/org/apache/cassandra/distributed/shared/NodeToolResultWithOutput.java
+++ b/test/distributed/org/apache/cassandra/distributed/shared/NodeToolResultWithOutput.java
@@ -22,6 +22,8 @@ import java.io.ByteArrayOutputStream;
import org.apache.cassandra.distributed.api.NodeToolResult;
+// Perfer the NodeToolResult that includes output since version 0.0.5
+// CASSANDRA-16057
public class NodeToolResultWithOutput
{
private final NodeToolResult result;
diff --git a/test/distributed/org/apache/cassandra/distributed/test/NodeToolTest.java b/test/distributed/org/apache/cassandra/distributed/test/NodeToolTest.java
index 1a1bdc7..adafe2b 100644
--- a/test/distributed/org/apache/cassandra/distributed/test/NodeToolTest.java
+++ b/test/distributed/org/apache/cassandra/distributed/test/NodeToolTest.java
@@ -21,13 +21,14 @@ package org.apache.cassandra.distributed.test;
import org.junit.Test;
import org.apache.cassandra.distributed.api.ICluster;
+import org.apache.cassandra.distributed.api.NodeToolResult;
import static org.junit.Assert.assertEquals;
public class NodeToolTest extends TestBaseImpl
{
@Test
- public void test() throws Throwable
+ public void testCommands() throws Throwable
{
try (ICluster cluster = init(builder().withNodes(1).start()))
{
@@ -36,4 +37,16 @@ public class NodeToolTest extends TestBaseImpl
assertEquals(1, cluster.get(1).nodetool("not_a_legal_command"));
}
}
+
+ @Test
+ public void testCaptureConsoleOutput() throws Throwable
+ {
+ try (ICluster cluster = init(builder().withNodes(1).start()))
+ {
+ NodeToolResult ringResult = cluster.get(1).nodetoolResult("ring");
+ ringResult.asserts().stdoutContains("Datacenter: datacenter0");
+ ringResult.asserts().stdoutContains("127.0.0.1 rack0 Up Normal");
+ assertEquals("Non-empty error output", "", ringResult.getStderr());
+ }
+ }
}
diff --git a/test/distributed/org/apache/cassandra/distributed/util/NodetoolUtils.java b/test/distributed/org/apache/cassandra/distributed/util/NodetoolUtils.java
index 1bb6adf..834e661 100644
--- a/test/distributed/org/apache/cassandra/distributed/util/NodetoolUtils.java
+++ b/test/distributed/org/apache/cassandra/distributed/util/NodetoolUtils.java
@@ -25,7 +25,10 @@ import org.apache.cassandra.distributed.api.IInvokableInstance;
import org.apache.cassandra.distributed.api.NodeToolResult;
import org.apache.cassandra.distributed.impl.Instance;
import org.apache.cassandra.distributed.shared.NodeToolResultWithOutput;
+import org.apache.cassandra.tools.Output;
+// Prefer to use the NodeToolResult that includes output since version 0.0.5
+// CASSANDRA-16057
public final class NodetoolUtils
{
private NodetoolUtils()
@@ -53,7 +56,7 @@ public final class NodetoolUtils
{
System.setOut(newOut);
System.setErr(newErr);
- Instance.DTestNodeTool nodetool = new Instance.DTestNodeTool(withNotifications);
+ Instance.DTestNodeTool nodetool = new Instance.DTestNodeTool(withNotifications, new Output(newOut, newErr));
int rc = nodetool.execute(args);
NodeToolResult result = new NodeToolResult(args, rc, nodetool.getNotifications(), nodetool.getLatestError());
return new NodeToolResultWithOutput(result, toolOut, toolErr);
@@ -65,4 +68,4 @@ public final class NodetoolUtils
}
});
}
-}
\ No newline at end of file
+}
diff --git a/src/java/org/apache/cassandra/tools/nodetool/Version.java b/test/unit/org/apache/cassandra/tools/nodetool/SjkTest.java
similarity index 69%
copy from src/java/org/apache/cassandra/tools/nodetool/Version.java
copy to test/unit/org/apache/cassandra/tools/nodetool/SjkTest.java
index 395a247..c183edf 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/Version.java
+++ b/test/unit/org/apache/cassandra/tools/nodetool/SjkTest.java
@@ -17,17 +17,16 @@
*/
package org.apache.cassandra.tools.nodetool;
-import io.airlift.airline.Command;
+import org.junit.Test;
-import org.apache.cassandra.tools.NodeProbe;
-import org.apache.cassandra.tools.NodeTool.NodeToolCmd;
+import org.apache.cassandra.tools.ToolRunner;
-@Command(name = "version", description = "Print cassandra version")
-public class Version extends NodeToolCmd
+public class SjkTest
{
- @Override
- public void execute(NodeProbe probe)
+ @Test
+ public void sjkHelpReturnsRc0()
{
- System.out.println("ReleaseVersion: " + probe.getReleaseVersion());
+ ToolRunner.ToolResult result = ToolRunner.invokeNodetool("sjk", "--help");
+ result.assertOnExitCode();
}
-}
\ No newline at end of file
+}
diff --git a/tools/stress/src/org/apache/cassandra/stress/CompactionStress.java b/tools/stress/src/org/apache/cassandra/stress/CompactionStress.java
index 5daf654..88aa6a4 100644
--- a/tools/stress/src/org/apache/cassandra/stress/CompactionStress.java
+++ b/tools/stress/src/org/apache/cassandra/stress/CompactionStress.java
@@ -262,7 +262,7 @@ public abstract class CompactionStress implements Runnable
{
System.out.println("========");
System.out.println(String.format("Pending compactions: %d\n", CompactionManager.instance.getPendingTasks()));
- CompactionStats.reportCompactionTable(CompactionManager.instance.getCompactions(), 0, true);
+ CompactionStats.reportCompactionTable(CompactionManager.instance.getCompactions(), 0, true, System.out);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org