This is an automated email from the ASF dual-hosted git repository.
brandonwilliams 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 2dbba13 Fix yaml format and alignment in tpstats
2dbba13 is described below
commit 2dbba13fdb555b3a297a7677896091cc880b5da5
Author: Stefan Miklosovic <[email protected]>
AuthorDate: Fri Aug 21 20:01:30 2020 +0200
Fix yaml format and alignment in tpstats
Patch by Stefan Miklosovic, reviewed by brandonwilliams for
CASSANDRA-11402
---
CHANGES.txt | 1 +
src/java/org/apache/cassandra/tools/NodeProbe.java | 40 +++++------
.../cassandra/tools/nodetool/ProxyHistograms.java | 12 ++--
.../cassandra/tools/nodetool/TableHistograms.java | 6 +-
.../apache/cassandra/tools/nodetool/TpStats.java | 2 -
.../tools/nodetool/stats/TpStatsHolder.java | 3 +-
.../tools/nodetool/stats/TpStatsPrinter.java | 78 +++++++++++++++-------
7 files changed, 85 insertions(+), 57 deletions(-)
diff --git a/CHANGES.txt b/CHANGES.txt
index 14df925..92c6b87 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,6 @@
4.0-beta3
* Add nodetool getfullquerylog (CASSANDRA-15988)
+ * Fix yaml format and alignment in tpstats (CASSANDRA-11402)
4.0-beta2
* Add addition incremental repair visibility to nodetool repair_admin
(CASSANDRA-14939)
diff --git a/src/java/org/apache/cassandra/tools/NodeProbe.java
b/src/java/org/apache/cassandra/tools/NodeProbe.java
index 685c153..3020fec 100644
--- a/src/java/org/apache/cassandra/tools/NodeProbe.java
+++ b/src/java/org/apache/cassandra/tools/NodeProbe.java
@@ -1634,26 +1634,26 @@ public class NodeProbe implements AutoCloseable
}
}
- public double[]
metricPercentilesAsArray(CassandraMetricsRegistry.JmxHistogramMBean metric)
- {
- return new double[]{ metric.get50thPercentile(),
- metric.get75thPercentile(),
- metric.get95thPercentile(),
- metric.get98thPercentile(),
- metric.get99thPercentile(),
- metric.getMin(),
- metric.getMax()};
- }
-
- public double[]
metricPercentilesAsArray(CassandraMetricsRegistry.JmxTimerMBean metric)
- {
- return new double[]{ metric.get50thPercentile(),
- metric.get75thPercentile(),
- metric.get95thPercentile(),
- metric.get98thPercentile(),
- metric.get99thPercentile(),
- metric.getMin(),
- metric.getMax()};
+ public Double[]
metricPercentilesAsArray(CassandraMetricsRegistry.JmxHistogramMBean metric)
+ {
+ return new Double[]{ metric.get50thPercentile(),
+ Double.valueOf(metric.get75thPercentile()),
+ Double.valueOf(metric.get95thPercentile()),
+ Double.valueOf(metric.get98thPercentile()),
+ Double.valueOf(metric.get99thPercentile()),
+ Double.valueOf(metric.getMin()),
+ Double.valueOf(metric.getMax())};
+ }
+
+ public Double[]
metricPercentilesAsArray(CassandraMetricsRegistry.JmxTimerMBean metric)
+ {
+ return new Double[]{ Double.valueOf(metric.get50thPercentile()),
+ Double.valueOf(metric.get75thPercentile()),
+ Double.valueOf(metric.get95thPercentile()),
+ Double.valueOf(metric.get98thPercentile()),
+ Double.valueOf(metric.get99thPercentile()),
+ Double.valueOf(metric.getMin()),
+ Double.valueOf(metric.getMax())};
}
public TabularData getCompactionHistory()
diff --git a/src/java/org/apache/cassandra/tools/nodetool/ProxyHistograms.java
b/src/java/org/apache/cassandra/tools/nodetool/ProxyHistograms.java
index 620d75a..1bf31d5 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/ProxyHistograms.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/ProxyHistograms.java
@@ -30,12 +30,12 @@ public class ProxyHistograms extends NodeToolCmd
public void execute(NodeProbe probe)
{
String[] percentiles = {"50%", "75%", "95%", "98%", "99%", "Min",
"Max"};
- double[] readLatency =
probe.metricPercentilesAsArray(probe.getProxyMetric("Read"));
- double[] writeLatency =
probe.metricPercentilesAsArray(probe.getProxyMetric("Write"));
- double[] rangeLatency =
probe.metricPercentilesAsArray(probe.getProxyMetric("RangeSlice"));
- double[] casReadLatency =
probe.metricPercentilesAsArray(probe.getProxyMetric("CASRead"));
- double[] casWriteLatency =
probe.metricPercentilesAsArray(probe.getProxyMetric("CASWrite"));
- double[] viewWriteLatency =
probe.metricPercentilesAsArray(probe.getProxyMetric("ViewWrite"));
+ Double[] readLatency =
probe.metricPercentilesAsArray(probe.getProxyMetric("Read"));
+ Double[] writeLatency =
probe.metricPercentilesAsArray(probe.getProxyMetric("Write"));
+ Double[] rangeLatency =
probe.metricPercentilesAsArray(probe.getProxyMetric("RangeSlice"));
+ Double[] casReadLatency =
probe.metricPercentilesAsArray(probe.getProxyMetric("CASRead"));
+ 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",
diff --git a/src/java/org/apache/cassandra/tools/nodetool/TableHistograms.java
b/src/java/org/apache/cassandra/tools/nodetool/TableHistograms.java
index cb3b946..1c6fec4 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/TableHistograms.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/TableHistograms.java
@@ -145,9 +145,9 @@ public class TableHistograms extends NodeToolCmd
}
String[] percentiles = new String[]{"50%", "75%", "95%",
"98%", "99%", "Min", "Max"};
- double[] readLatency =
probe.metricPercentilesAsArray((CassandraMetricsRegistry.JmxTimerMBean)
probe.getColumnFamilyMetric(keyspace, table, "ReadLatency"));
- double[] writeLatency =
probe.metricPercentilesAsArray((CassandraMetricsRegistry.JmxTimerMBean)
probe.getColumnFamilyMetric(keyspace, table, "WriteLatency"));
- double[] sstablesPerRead =
probe.metricPercentilesAsArray((CassandraMetricsRegistry.JmxHistogramMBean)
probe.getColumnFamilyMetric(keyspace, table, "SSTablesPerReadHistogram"));
+ Double[] readLatency =
probe.metricPercentilesAsArray((CassandraMetricsRegistry.JmxTimerMBean)
probe.getColumnFamilyMetric(keyspace, table, "ReadLatency"));
+ 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",
diff --git a/src/java/org/apache/cassandra/tools/nodetool/TpStats.java
b/src/java/org/apache/cassandra/tools/nodetool/TpStats.java
index 307c78d..d7e8f06 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/TpStats.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/TpStats.java
@@ -17,8 +17,6 @@
*/
package org.apache.cassandra.tools.nodetool;
-import javax.management.MBeanServerConnection;
-
import io.airlift.airline.Command;
import io.airlift.airline.Option;
diff --git
a/src/java/org/apache/cassandra/tools/nodetool/stats/TpStatsHolder.java
b/src/java/org/apache/cassandra/tools/nodetool/stats/TpStatsHolder.java
index f3e91dc..c641691 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/stats/TpStatsHolder.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/stats/TpStatsHolder.java
@@ -22,7 +22,6 @@ import java.util.HashMap;
import java.util.Map;
import org.apache.cassandra.tools.NodeProbe;
-import org.apache.cassandra.tools.nodetool.stats.StatsHolder;
public class TpStatsHolder implements StatsHolder
{
@@ -39,7 +38,7 @@ public class TpStatsHolder implements StatsHolder
HashMap<String, Object> result = new HashMap<>();
HashMap<String, Map<String, Object>> threadPools = new HashMap<>();
HashMap<String, Object> droppedMessage = new HashMap<>();
- HashMap<String, double[]> waitLatencies = new HashMap<>();
+ HashMap<String, Double[]> waitLatencies = new HashMap<>();
for (Map.Entry<String, String> tp : probe.getThreadPools().entries())
{
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 86bdf28..617342a 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/stats/TpStatsPrinter.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/stats/TpStatsPrinter.java
@@ -19,8 +19,17 @@
package org.apache.cassandra.tools.nodetool.stats;
import java.io.PrintStream;
-import java.util.Collections;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import java.util.stream.Stream;
+
+import com.google.common.collect.Multimap;
+
+import org.apache.cassandra.tools.nodetool.formatter.TableBuilder;
+
+import static java.util.stream.Collectors.toList;
public class TpStatsPrinter
{
@@ -35,7 +44,6 @@ public class TpStatsPrinter
default:
return new DefaultPrinter();
}
-
}
public static class DefaultPrinter implements StatsPrinter<TpStatsHolder>
@@ -43,43 +51,65 @@ public class TpStatsPrinter
@Override
public void print(TpStatsHolder data, PrintStream out)
{
- Map<String, Object> convertData = data.convert2Map();
+ final TableBuilder poolBuilder = new TableBuilder();
+ poolBuilder.add("Pool Name", "Active", "Pending", "Completed",
"Blocked", "All time blocked");
- out.printf("%-30s%10s%10s%15s%10s%18s%n", "Pool Name", "Active",
"Pending", "Completed", "Blocked", "All time blocked");
+ final Multimap<String, String> threadPools =
data.probe.getThreadPools();
- Map<Object, Object> threadPools = convertData.get("ThreadPools")
instanceof Map<?, ?> ? (Map)convertData.get("ThreadPools") :
Collections.emptyMap();
- for (Map.Entry<Object, Object> entry : threadPools.entrySet())
+ for (final Map.Entry<String, String> tpool : threadPools.entries())
{
- Map values = entry.getValue() instanceof Map<?, ?> ?
(Map)entry.getValue() : Collections.emptyMap();
- out.printf("%-30s%10s%10s%15s%10s%18s%n",
- entry.getKey(),
- values.get("ActiveTasks"),
- values.get("PendingTasks"),
- values.get("CompletedTasks"),
- values.get("CurrentlyBlockedTasks"),
- values.get("TotalBlockedTasks"));
+ poolBuilder.add(tpool.getValue(),
+
data.probe.getThreadPoolMetric(tpool.getKey(), tpool.getValue(),
"ActiveTasks").toString(),
+
data.probe.getThreadPoolMetric(tpool.getKey(), tpool.getValue(),
"PendingTasks").toString(),
+
data.probe.getThreadPoolMetric(tpool.getKey(), tpool.getValue(),
"CompletedTasks").toString(),
+
data.probe.getThreadPoolMetric(tpool.getKey(), tpool.getValue(),
"CurrentlyBlockedTasks").toString(),
+
data.probe.getThreadPoolMetric(tpool.getKey(), tpool.getValue(),
"TotalBlockedTasks").toString());
}
- out.printf("%n%-20s%10s%18s%18s%18s%18s%n", "Message type",
"Dropped", "", "Latency waiting in queue (micros)", "", "");
- out.printf("%-20s%10s%18s%18s%18s%18s%n", "", "", "50%", "95%",
"99%", "Max");
+ poolBuilder.printTo(System.out);
+
+ System.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");
+
+ final HashMap<String, Object> droppedMessage = new HashMap<>();
+ final HashMap<String, Double[]> waitLatencies = new HashMap<>();
+
+ for (final Map.Entry<String, Integer> entry :
data.probe.getDroppedMessages().entrySet())
+ {
+ droppedMessage.put(entry.getKey(), entry.getValue());
+ try
+ {
+ waitLatencies.put(entry.getKey(),
data.probe.metricPercentilesAsArray(data.probe.getMessagingQueueWaitMetrics(entry.getKey())));
+ }
+ catch (RuntimeException e)
+ {
+ // ignore the exceptions when fetching metrics
+ }
+ }
- Map<Object, Object> droppedMessages =
convertData.get("DroppedMessage") instanceof Map<?, ?> ?
(Map)convertData.get("DroppedMessage") : Collections.emptyMap();
- Map<Object, double[]> waitLatencies =
convertData.get("WaitLatencies") instanceof Map<?, ?> ?
(Map)convertData.get("WaitLatencies") : Collections.emptyMap();
- for (Map.Entry<Object, Object> entry : droppedMessages.entrySet())
+ for (final Map.Entry<String, Object> entry :
droppedMessage.entrySet())
{
- out.printf("%-20s%10s", entry.getKey(), entry.getValue());
+ final List<String> columns = Stream.of(entry.getKey(),
entry.getValue().toString()).collect(toList());
+
if (waitLatencies.containsKey(entry.getKey()))
{
- double[] latencies = waitLatencies.get(entry.getKey());
- out.printf("%18.2f%18.2f%18.2f%18.2f", latencies[0],
latencies[2], latencies[4], latencies[6]);
+ final Double[] latencies =
waitLatencies.get(entry.getKey());
+ columns.addAll(Arrays.asList(latencies[0].toString(),
+ latencies[2].toString(),
+ latencies[4].toString(),
+ latencies[6].toString()));
}
else
{
- out.printf("%18s%18s%18s%18s", "N/A", "N/A", "N/A", "N/A");
+ columns.addAll(Arrays.asList("N/A", "N/A", "N/A", "N/A"));
}
- out.printf("%n");
+ droppedBuilder.add(columns.toArray(new String[0]));
}
+
+ droppedBuilder.printTo(System.out);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]