fix viewbuilder progress and display in compactionstats patch by Zhao Yang (jasonstack); reviewed by Mick Semb Wever for CASSANDRA-12244
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/9d498dce Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/9d498dce Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/9d498dce Branch: refs/heads/trunk Commit: 9d498dced6cea77b027b8a74bf4ae9201c8afdf5 Parents: 15c463c Author: Mick Semb Wever <m...@apache.org> Authored: Wed May 2 14:21:40 2018 +1000 Committer: Mick Semb Wever <m...@apache.org> Committed: Fri May 4 14:46:25 2018 +1000 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../apache/cassandra/cache/AutoSavingCache.java | 3 +- .../cassandra/db/compaction/CompactionInfo.java | 33 +++++++++++++++++--- .../apache/cassandra/db/view/ViewBuilder.java | 19 ++++++----- .../io/sstable/IndexSummaryRedistribution.java | 5 +-- .../tools/nodetool/CompactionStats.java | 7 +++-- 6 files changed, 48 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/9d498dce/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index e549cda..f1dcf52 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 http://git-wip-us.apache.org/repos/asf/cassandra/blob/9d498dce/src/java/org/apache/cassandra/cache/AutoSavingCache.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cache/AutoSavingCache.java b/src/java/org/apache/cassandra/cache/AutoSavingCache.java index e39dcf1..00431b9 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<K extends CacheKey, V> extends InstrumentingCache<K type, 0, keysEstimate, - "keys", + Unit.KEYS, UUIDGen.getTimeUUID()); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/9d498dce/src/java/org/apache/cassandra/db/compaction/CompactionInfo.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionInfo.java b/src/java/org/apache/cassandra/db/compaction/CompactionInfo.java index 3cd8737..404c07f 100644 --- a/src/java/org/apache/cassandra/db/compaction/CompactionInfo.java +++ b/src/java/org/apache/cassandra/db/compaction/CompactionInfo.java @@ -34,20 +34,43 @@ public final class CompactionInfo implements Serializable private final OperationType tasktype; private final long completed; private final long total; - private final String unit; + private final Unit unit; private final UUID compactionId; + public static enum Unit + { + BYTES("bytes"), RANGES("ranges"), KEYS("keys"); + + private final String name; + + private Unit(String name) + { + this.name = name; + } + + @Override + public String toString() + { + return name; + } + + public static boolean isFileSize(String unit) + { + return BYTES.toString().equals(unit); + } + } + public CompactionInfo(CFMetaData cfm, OperationType tasktype, long bytesComplete, long totalBytes, UUID compactionId) { - this(cfm, tasktype, bytesComplete, totalBytes, "bytes", compactionId); + this(cfm, tasktype, bytesComplete, totalBytes, Unit.BYTES, compactionId); } - public CompactionInfo(OperationType tasktype, long completed, long total, String unit, UUID compactionId) + public CompactionInfo(OperationType tasktype, long completed, long total, Unit unit, UUID compactionId) { this(null, tasktype, completed, total, unit, compactionId); } - public CompactionInfo(CFMetaData cfm, OperationType tasktype, long completed, long total, String unit, UUID compactionId) + public CompactionInfo(CFMetaData cfm, OperationType tasktype, long completed, long total, Unit unit, UUID compactionId) { this.tasktype = tasktype; this.completed = completed; @@ -129,7 +152,7 @@ public final class CompactionInfo implements Serializable ret.put("completed", Long.toString(completed)); ret.put("total", Long.toString(total)); ret.put("taskType", tasktype.toString()); - ret.put("unit", unit); + ret.put("unit", unit.toString()); ret.put("compactionId", compactionId == null ? "" : compactionId.toString()); return ret; } http://git-wip-us.apache.org/repos/asf/cassandra/blob/9d498dce/src/java/org/apache/cassandra/db/view/ViewBuilder.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/view/ViewBuilder.java b/src/java/org/apache/cassandra/db/view/ViewBuilder.java index 94314fd..68cb265 100644 --- a/src/java/org/apache/cassandra/db/view/ViewBuilder.java +++ b/src/java/org/apache/cassandra/db/view/ViewBuilder.java @@ -25,18 +25,21 @@ import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.Collectors; + import javax.annotation.Nullable; import com.google.common.base.Function; import com.google.common.collect.Iterables; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import org.apache.cassandra.concurrent.ScheduledExecutors; import org.apache.cassandra.db.*; 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.db.lifecycle.SSTableSet; import org.apache.cassandra.db.partitions.*; import org.apache.cassandra.db.rows.*; @@ -187,7 +190,7 @@ public class ViewBuilder extends CompactionInfo.Holder public CompactionInfo getCompactionInfo() { - long rangesLeft = 0, rangesTotal = 0; + long rangesCompleted = 0, rangesTotal = 0; Token lastToken = prevToken; // This approximation is not very accurate, but since we do not have a method which allows us to calculate the @@ -197,15 +200,11 @@ public class ViewBuilder extends CompactionInfo.Holder // has. for (Range<Token> 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() http://git-wip-us.apache.org/repos/asf/cassandra/blob/9d498dce/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java b/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java index ebe98e5..ff362e8 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. */ http://git-wip-us.apache.org/repos/asf/cassandra/blob/9d498dce/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java b/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java index bac23c2..36b5733 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); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org