diff --git a/CHANGES.txt b/CHANGES.txt index e549cda4a7..f1dcf5212e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.0.17 + * Fix progress stats and units in compactionstats (CASSANDRA-12244) * Better handle missing partition columns in system_schema.columns (CASSANDRA-14379) * Delay hints store excise by write timeout to avoid race with decommission (CASSANDRA-13740) * Deprecate background repair and probablistic read_repair_chance table options diff --git a/src/java/org/apache/cassandra/cache/AutoSavingCache.java b/src/java/org/apache/cassandra/cache/AutoSavingCache.java index e39dcf1610..00431b96c3 100644 --- a/src/java/org/apache/cassandra/cache/AutoSavingCache.java +++ b/src/java/org/apache/cassandra/cache/AutoSavingCache.java @@ -42,6 +42,7 @@ import org.apache.cassandra.db.SystemKeyspace; import org.apache.cassandra.db.compaction.CompactionInfo; import org.apache.cassandra.db.compaction.CompactionManager; import org.apache.cassandra.db.compaction.OperationType; +import org.apache.cassandra.db.compaction.CompactionInfo.Unit; import org.apache.cassandra.io.FSWriteError; import org.apache.cassandra.io.util.*; import org.apache.cassandra.io.util.ChecksummedRandomAccessReader.CorruptFileException; @@ -304,7 +305,7 @@ public class AutoSavingCache extends InstrumentingCache range : StorageService.instance.getLocalRanges(baseCfs.keyspace.getName())) { - rangesLeft++; rangesTotal++; - // This will reset rangesLeft, so that the number of ranges left will be less than the total ranges at the - // end of the method. - if (lastToken == null || range.contains(lastToken)) - rangesLeft = 0; - } - - return new CompactionInfo(baseCfs.metadata, OperationType.VIEW_BUILD, rangesLeft, rangesTotal, "ranges", compactionId); + if ((lastToken != null) && lastToken.compareTo(range.right) > 0) + rangesCompleted++; + } + return new CompactionInfo(baseCfs.metadata, OperationType.VIEW_BUILD, rangesCompleted, rangesTotal, Unit.RANGES, compactionId); } public void stop() diff --git a/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java b/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java index ebe98e5a34..ff362e898f 100644 --- a/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java +++ b/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java @@ -30,14 +30,15 @@ import java.util.UUID; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import org.apache.cassandra.db.ColumnFamilyStore; import org.apache.cassandra.db.Keyspace; import org.apache.cassandra.db.compaction.CompactionInfo; import org.apache.cassandra.db.compaction.CompactionInterruptedException; import org.apache.cassandra.db.compaction.OperationType; +import org.apache.cassandra.db.compaction.CompactionInfo.Unit; import org.apache.cassandra.db.lifecycle.LifecycleTransaction; import org.apache.cassandra.io.sstable.format.SSTableReader; import org.apache.cassandra.utils.Pair; @@ -308,7 +309,7 @@ public class IndexSummaryRedistribution extends CompactionInfo.Holder public CompactionInfo getCompactionInfo() { - return new CompactionInfo(OperationType.INDEX_SUMMARY, (memoryPoolBytes - remainingSpace), memoryPoolBytes, "bytes", compactionId); + return new CompactionInfo(OperationType.INDEX_SUMMARY, (memoryPoolBytes - remainingSpace), memoryPoolBytes, Unit.BYTES, compactionId); } /** Utility class for sorting sstables by their read rates. */ diff --git a/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java b/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java index bac23c2f8b..36b5733609 100644 --- a/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java +++ b/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java @@ -26,8 +26,10 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.apache.cassandra.db.compaction.CompactionInfo; import org.apache.cassandra.db.compaction.CompactionManagerMBean; import org.apache.cassandra.db.compaction.OperationType; +import org.apache.cassandra.db.compaction.CompactionInfo.Unit; import org.apache.cassandra.io.util.FileUtils; import org.apache.cassandra.tools.NodeProbe; import org.apache.cassandra.tools.NodeTool.NodeToolCmd; @@ -61,9 +63,10 @@ public class CompactionStats extends NodeToolCmd String taskType = c.get("taskType"); String keyspace = c.get("keyspace"); String columnFamily = c.get("columnfamily"); - String completedStr = humanReadable ? FileUtils.stringifyFileSize(completed) : Long.toString(completed); - String totalStr = humanReadable ? FileUtils.stringifyFileSize(total) : Long.toString(total); String unit = c.get("unit"); + boolean toFileSize = humanReadable && Unit.isFileSize(unit); + String completedStr = toFileSize ? FileUtils.stringifyFileSize(completed) : Long.toString(completed); + String totalStr = toFileSize ? FileUtils.stringifyFileSize(total) : Long.toString(total); String percentComplete = total == 0 ? "n/a" : new DecimalFormat("0.00").format((double) completed / total * 100) + "%"; String id = c.get("compactionId"); addLine(lines, columnSizes, id, taskType, keyspace, columnFamily, completedStr, totalStr, unit, percentComplete);