Skip to content

Commit

Permalink
CASSANDRA-18305: Formatting fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
mghildiy committed Jun 18, 2023
1 parent 8f53e9d commit b28ffca
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 82 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2336,11 +2336,6 @@ public void setMaxConcurrentAutoUpgradeTasks(int value)
}
}

public double getCompactionRate()
{
return compactionRateLimiter.getRate();
}

public List<Holder> getCompactionsMatching(Iterable<TableMetadata> columnFamilies, Predicate<CompactionInfo> predicate)
{
Preconditions.checkArgument(columnFamilies != null, "Attempted to getCompactionsMatching in CompactionManager with no columnFamilies specified.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,9 +165,4 @@ public interface CompactionManagerMBean
* when automatic sstable upgrades are enabled
*/
public void setMaxConcurrentAutoUpgradeTasks(int value);

/**
* Get the compaction rate
*/
public double getCompactionRate();
}
8 changes: 3 additions & 5 deletions src/java/org/apache/cassandra/tools/NodeProbe.java
Original file line number Diff line number Diff line change
Expand Up @@ -1342,11 +1342,6 @@ public double getCompactionThroughputMebibytesAsDouble()
return ssProxy.getCompactionThroughtputMibPerSecAsDouble();
}

public double getCompactionRate()
{
return compactionProxy.getCompactionRate();
}

public long getCompactionThroughputBytes()
{
return ssProxy.getCompactionThroughtputBytesPerSec();
Expand Down Expand Up @@ -1898,6 +1893,9 @@ public Object getCompactionMetric(String metricName)
switch(metricName)
{
case "BytesCompacted":
case "CompactionsAborted":
case "CompactionsReduced":
case "SSTablesDroppedFromCompaction":
return JMX.newMBeanProxy(mbeanServerConn,
new ObjectName("org.apache.cassandra.metrics:type=Compaction,name=" + metricName),
CassandraMetricsRegistry.JmxCounterMBean.class);
Expand Down
103 changes: 45 additions & 58 deletions src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,95 +58,82 @@ public class CompactionStats extends NodeToolCmd
public void execute(NodeProbe probe)
{
PrintStream out = probe.output().out;
out.print(pendingTasksAndConcurrentCompactorsStats(probe));
out.print(compactionsCompletedStats(probe));
out.print(compactionThroughPutStats(probe));
out.println();
TableBuilder tableBuilder = new TableBuilder();
pendingTasksAndConcurrentCompactorsStats(probe, tableBuilder);
compactionsStats(probe, tableBuilder);
tableBuilder.printTo(out);
CompactionManagerMBean cm = probe.getCompactionManagerProxy();
reportCompactionTable(cm.getCompactions(), probe.getCompactionThroughputBytes(), humanReadable, vtableOutput, out);
reportCompactionTable(cm.getCompactions(), probe.getCompactionThroughputBytes(), humanReadable, vtableOutput, out, tableBuilder);
}

private static String pendingTasksAndConcurrentCompactorsStats(NodeProbe probe)
private void pendingTasksAndConcurrentCompactorsStats(NodeProbe probe, TableBuilder tableBuilder)
{
Map<String, Map<String, Integer>> pendingTaskNumberByTable =
(Map<String, Map<String, Integer>>) probe.getCompactionMetric("PendingTasksByTableName");
StringBuffer toPrint = new StringBuffer();
toPrint.append(String.format("%s concurrent compactors, %s pending tasks", probe.getConcurrentCompactors()
, numPendingTasks(pendingTaskNumberByTable)));
toPrint.append(LINE_SEPARATOR);
(Map<String, Map<String, Integer>>) probe.getCompactionMetric("PendingTasksByTableName");

tableBuilder.add("concurrent compactors", Integer.toString(probe.getConcurrentCompactors()));
tableBuilder.add("pending compaction tasks", Integer.toString(numPendingTasks(pendingTaskNumberByTable)));

for (Entry<String, Map<String, Integer>> ksEntry : pendingTaskNumberByTable.entrySet())
{
String ksName = ksEntry.getKey();
for (Entry<String, Integer> tableEntry : ksEntry.getValue().entrySet())
{
toPrint.append("- " + ksName + '.' + tableEntry.getKey() + ": " + tableEntry.getValue());
toPrint.append(LINE_SEPARATOR);
}
}

return toPrint.toString();
tableBuilder.add(ksEntry.getKey(), tableEntry.getKey(), tableEntry.getValue().toString());
}

private static int numPendingTasks(Map<String, Map<String, Integer>> pendingTaskNumberByTable)
private int numPendingTasks(Map<String, Map<String, Integer>> pendingTaskNumberByTable)
{
int numTotalPendingTasks = 0;
for (Entry<String, Map<String, Integer>> ksEntry : pendingTaskNumberByTable.entrySet())
{
for (Entry<String, Integer> tableEntry : ksEntry.getValue().entrySet())
numTotalPendingTasks += tableEntry.getValue();
}

return numTotalPendingTasks;
}

private static String compactionsCompletedStats(NodeProbe probe)
private void compactionsStats(NodeProbe probe, TableBuilder tableBuilder)
{
Long completedTasks = (Long)probe.getCompactionMetric("CompletedTasks");
Long completedTasks = (Long) probe.getCompactionMetric("CompletedTasks");
tableBuilder.add("compactions completed", completedTasks.toString());

CassandraMetricsRegistry.JmxMeterMBean totalCompactionsCompletedMetrics =
(CassandraMetricsRegistry.JmxMeterMBean)probe.getCompactionMetric("TotalCompactionsCompleted");
NumberFormat formatter = new DecimalFormat("##.00");
StringBuffer toPrint = new StringBuffer();
toPrint.append(String.format("compactions completed: %s", completedTasks));
toPrint.append(LINE_SEPARATOR);
toPrint.append(String.format("\tminute rate: %s/second", formatter.format(totalCompactionsCompletedMetrics.getOneMinuteRate())));
toPrint.append(LINE_SEPARATOR);
toPrint.append(String.format("\t5 minute rate: %s/second", formatter.format(totalCompactionsCompletedMetrics.getFiveMinuteRate())));
toPrint.append(LINE_SEPARATOR);
toPrint.append(String.format("\t15 minute rate: %s/second", formatter.format(totalCompactionsCompletedMetrics.getFifteenMinuteRate())));
toPrint.append(LINE_SEPARATOR);
toPrint.append(String.format("\tMean rate: %s/second", formatter.format(totalCompactionsCompletedMetrics.getMeanRate())));
toPrint.append(LINE_SEPARATOR);

return toPrint.toString();
}
(CassandraMetricsRegistry.JmxMeterMBean)probe.getCompactionMetric("TotalCompactionsCompleted");

private static String compactionThroughPutStats(NodeProbe probe)
{
double configured = probe.getCompactionThroughputMebibytesAsDouble();
double actual = probe.getCompactionRate() / (1024 * 1024);
if(configured == 0)
{
return String.format("compaction throughput absolute: %s MBps", actual);
}
else
{
double percentage = (actual / configured) * 100;
return String.format("compaction throughput ratio: %s MBps / %s MBps (%s%s)", actual, configured, percentage, "%");
}
CassandraMetricsRegistry.JmxCounterMBean bytesCompacted =
(CassandraMetricsRegistry.JmxCounterMBean)probe.getCompactionMetric("BytesCompacted");
tableBuilder.add("data compacted", FileUtils.stringifyFileSize(Double.parseDouble(Long.toString(bytesCompacted.getCount()))));

CassandraMetricsRegistry.JmxCounterMBean compactionsAborted =
(CassandraMetricsRegistry.JmxCounterMBean)probe.getCompactionMetric("CompactionsAborted");
tableBuilder.add("compactions aborted", Long.toString(compactionsAborted.getCount()));

CassandraMetricsRegistry.JmxCounterMBean compactionsReduced =
(CassandraMetricsRegistry.JmxCounterMBean)probe.getCompactionMetric("CompactionsReduced");
tableBuilder.add("compactions reduced", Long.toString(compactionsReduced.getCount()));

CassandraMetricsRegistry.JmxCounterMBean sstablesDroppedFromCompaction =
(CassandraMetricsRegistry.JmxCounterMBean)probe.getCompactionMetric("SSTablesDroppedFromCompaction");
tableBuilder.add("sstables dropped from compaction", Long.toString(sstablesDroppedFromCompaction.getCount()));

NumberFormat formatter = new DecimalFormat("0.00");

tableBuilder.add("minute rate", String.format("%s/second", formatter.format(totalCompactionsCompletedMetrics.getOneMinuteRate())));
tableBuilder.add("5 minute rate", String.format("%s/second", formatter.format(totalCompactionsCompletedMetrics.getFiveMinuteRate())));
tableBuilder.add("15 minute rate", String.format("%s/second", formatter.format(totalCompactionsCompletedMetrics.getFifteenMinuteRate())));
tableBuilder.add("mean rate", String.format("%s/second", formatter.format(totalCompactionsCompletedMetrics.getMeanRate())));

double configured = probe.getCompactionThroughput();
tableBuilder.add("compaction throughput (MBps)", configured == 0 ? "throttling disabled (0)" : Double.toString(configured));
}

public static void reportCompactionTable(List<Map<String,String>> compactions, long compactionThroughputInBytes, boolean humanReadable, PrintStream out)
public static void reportCompactionTable(List<Map<String,String>> compactions, long compactionThroughputInBytes, boolean humanReadable, PrintStream out, TableBuilder table)
{
reportCompactionTable(compactions, compactionThroughputInBytes, humanReadable, false, out);
reportCompactionTable(compactions, compactionThroughputInBytes, humanReadable, false, out, table);
}

public static void reportCompactionTable(List<Map<String,String>> compactions, long compactionThroughputInBytes, boolean humanReadable, boolean vtableOutput, PrintStream out)
public static void reportCompactionTable(List<Map<String,String>> compactions, long compactionThroughputInBytes, boolean humanReadable, boolean vtableOutput, PrintStream out, TableBuilder table)
{
if (!compactions.isEmpty())
{
long remainingBytes = 0;
TableBuilder table = new TableBuilder();

if (vtableOutput)
table.add("keyspace", "table", "task id", "completion ratio", "kind", "progress", "sstables", "total", "unit", "target directory");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,13 +130,19 @@ compactionId, OperationType.COMPACTION, CQLTester.KEYSPACE, currentTable(), byte
CompactionInfo.Unit.BYTES, (double) bytesCompacted / bytesTotal * 100);
Assertions.assertThat(stdout).containsPattern(expectedStatsPattern);

Assertions.assertThat(stdout).containsPattern("[0-9]* concurrent compactors, [0-9]* pending tasks");
Assertions.assertThat(stdout).containsPattern("compactions completed: [0-9]*");
Assertions.assertThat(stdout).containsPattern("minute rate: [0-9]*.[0-9]*[0-9]*/second");
Assertions.assertThat(stdout).containsPattern("5 minute rate: [0-9]*.[0-9]*[0-9]*/second");
Assertions.assertThat(stdout).containsPattern("15 minute rate: [0-9]*.[0-9]*[0-9]*/second");
Assertions.assertThat(stdout).containsPattern("Mean rate: [0-9]*.[0-9]*[0-9]*/second");
Assertions.assertThat(stdout).containsPattern("compaction throughput");
assertThat(stdout).containsPattern("concurrent compactors\\s+[0-9]*");
assertThat(stdout).containsPattern("pending compaction tasks\\s+[0-9]*");
assertThat(stdout).containsPattern("compactions completed\\s+[0-9]*");
assertThat(stdout).containsPattern("minute rate\\s+[0-9]*.[0-9]*[0-9]*/second");
assertThat(stdout).containsPattern("5 minute rate\\s+[0-9]*.[0-9]*[0-9]*/second");
assertThat(stdout).containsPattern("15 minute rate\\s+[0-9]*.[0-9]*[0-9]*/second");
assertThat(stdout).containsPattern("mean rate\\s+[0-9]*.[0-9]*[0-9]*/second");
assertThat(stdout).containsPattern("compaction throughput \\(MBps\\) throttling disabled \\(0\\)");
assertThat(stdout).containsPattern("compactions completed\\s+[0-9]*");
assertThat(stdout).containsPattern("data compacted\\s+[0-9]*");
assertThat(stdout).containsPattern("compactions aborted\\s+[0-9]*");
assertThat(stdout).containsPattern("compactions reduced\\s+[0-9]*");
assertThat(stdout).containsPattern("sstables dropped from compaction\\s+[0-9]*");

CompactionManager.instance.active.finishCompaction(compactionHolder);
waitForNumberOfPendingTasks(0, "compactionstats");
Expand Down Expand Up @@ -304,7 +310,7 @@ private String waitForNumberOfPendingTasks(int pendingTasksToWaitFor, String...
tool.assertOnCleanExit();
String output = tool.getStdout();
stdout.set(output);
return output.contains(pendingTasksToWaitFor + " pending tasks" );
return output.contains("pending compaction tasks "+ pendingTasksToWaitFor);
});

return stdout.get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
import org.apache.cassandra.stress.operations.userdefined.SchemaInsert;
import org.apache.cassandra.stress.settings.StressSettings;
import org.apache.cassandra.tools.nodetool.CompactionStats;
import org.apache.cassandra.tools.nodetool.formatter.TableBuilder;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.JVMStabilityInspector;
import org.apache.cassandra.utils.concurrent.Future;
Expand Down Expand Up @@ -274,7 +275,7 @@ void reportCompactionStats()
{
System.out.println("========");
System.out.println(String.format("Pending compactions: %d\n", CompactionManager.instance.getPendingTasks()));
CompactionStats.reportCompactionTable(CompactionManager.instance.getCompactions(), 0, true, System.out);
CompactionStats.reportCompactionTable(CompactionManager.instance.getCompactions(), 0, true, System.out, new TableBuilder());
}


Expand Down

0 comments on commit b28ffca

Please sign in to comment.