You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by mc...@apache.org on 2018/05/04 05:21:28 UTC

[1/6] cassandra git commit: fix viewbuilder progress and display in compactionstats

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-3.0 15c463cb0 -> 9d498dced
  refs/heads/cassandra-3.11 dd9ae1d3e -> bc30a6f73
  refs/heads/trunk 645d8278b -> 78ca3447c


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/cassandra-3.0
Commit: 9d498dced6cea77b027b8a74bf4ae9201c8afdf5
Parents: 15c463c
Author: Mick Semb Wever <mc...@apache.org>
Authored: Wed May 2 14:21:40 2018 +1000
Committer: Mick Semb Wever <mc...@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-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


[2/6] cassandra git commit: fix viewbuilder progress and display in compactionstats

Posted by mc...@apache.org.
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/cassandra-3.11
Commit: 9d498dced6cea77b027b8a74bf4ae9201c8afdf5
Parents: 15c463c
Author: Mick Semb Wever <mc...@apache.org>
Authored: Wed May 2 14:21:40 2018 +1000
Committer: Mick Semb Wever <mc...@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-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


[5/6] cassandra git commit: Merge branch 'cassandra-3.0' into cassandra-3.11

Posted by mc...@apache.org.
Merge branch 'cassandra-3.0' into cassandra-3.11


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/bc30a6f7
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/bc30a6f7
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/bc30a6f7

Branch: refs/heads/cassandra-3.11
Commit: bc30a6f733545205271a2cdf82cfa7ab42eee6f4
Parents: dd9ae1d 9d498dc
Author: Mick Semb Wever <mc...@apache.org>
Authored: Fri May 4 14:47:10 2018 +1000
Committer: Mick Semb Wever <mc...@apache.org>
Committed: Fri May 4 15:01:54 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/bc30a6f7/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 2d7053d,f1dcf52..5f66b62
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,15 -1,5 +1,16 @@@
 -3.0.17
 +3.11.3
 + * Allow existing nodes to use all peers in shadow round (CASSANDRA-13851)
 + * Fix cqlsh to read connection.ssl cqlshrc option again (CASSANDRA-14299)
 + * Downgrade log level to trace for CommitLogSegmentManager (CASSANDRA-14370)
 + * CQL fromJson(null) throws NullPointerException (CASSANDRA-13891)
 + * Serialize empty buffer as empty string for json output format (CASSANDRA-14245)
 + * Allow logging implementation to be interchanged for embedded testing (CASSANDRA-13396)
 + * SASI tokenizer for simple delimiter based entries (CASSANDRA-14247)
 + * Fix Loss of digits when doing CAST from varint/bigint to decimal (CASSANDRA-14170)
 + * RateBasedBackPressure unnecessarily invokes a lock on the Guava RateLimiter (CASSANDRA-14163)
 + * Fix wildcard GROUP BY queries (CASSANDRA-14209)
 +Merged from 3.0:
+  * 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/bc30a6f7/src/java/org/apache/cassandra/cache/AutoSavingCache.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/cache/AutoSavingCache.java
index aa13ca3,00431b9..a40a8a9
--- a/src/java/org/apache/cassandra/cache/AutoSavingCache.java
+++ b/src/java/org/apache/cassandra/cache/AutoSavingCache.java
@@@ -42,9 -41,11 +42,10 @@@ import org.apache.cassandra.db.ColumnFa
  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;
 +import org.apache.cassandra.io.util.CorruptFileException;
  import org.apache.cassandra.io.util.DataInputPlus.DataInputStreamPlus;
  import org.apache.cassandra.service.CacheService;
  import org.apache.cassandra.utils.JVMStabilityInspector;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/bc30a6f7/src/java/org/apache/cassandra/db/compaction/CompactionInfo.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/bc30a6f7/src/java/org/apache/cassandra/db/view/ViewBuilder.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/view/ViewBuilder.java
index 8e647ea,68cb265..d9c9e71
--- a/src/java/org/apache/cassandra/db/view/ViewBuilder.java
+++ b/src/java/org/apache/cassandra/db/view/ViewBuilder.java
@@@ -190,25 -188,9 +193,25 @@@ public class ViewBuilder extends Compac
          }
      }
  
 +    private void updateDistributed(String ksname, String viewName, UUID localHostId)
 +    {
 +        try
 +        {
 +            SystemDistributedKeyspace.successfulViewBuild(ksname, viewName, localHostId);
 +            SystemKeyspace.setViewBuiltReplicated(ksname, viewName);
 +        }
 +        catch (Exception e)
 +        {
 +            ScheduledExecutors.nonPeriodicTasks.schedule(() -> CompactionManager.instance.submitViewBuilder(this),
 +                                                         5,
 +                                                         TimeUnit.MINUTES);
 +            logger.warn("Failed to updated the distributed status of view, sleeping 5 minutes before retrying", e);
 +        }
 +    }
 +
      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

http://git-wip-us.apache.org/repos/asf/cassandra/blob/bc30a6f7/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java
index 73626d3,ff362e8..ab23ef3
--- a/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java
+++ b/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java
@@@ -38,9 -38,9 +38,10 @@@ 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.FBUtilities;
  import org.apache.cassandra.utils.Pair;
  import org.apache.cassandra.utils.concurrent.Refs;
  

http://git-wip-us.apache.org/repos/asf/cassandra/blob/bc30a6f7/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
index 4fd0423,36b5733..d615516
--- a/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
@@@ -17,16 -17,19 +17,18 @@@
   */
  package org.apache.cassandra.tools.nodetool;
  
 -import static java.lang.String.format;
 -import io.airlift.command.Command;
 -import io.airlift.command.Option;
 -
  import java.text.DecimalFormat;
 -import java.util.ArrayList;
  import java.util.List;
  import java.util.Map;
 +import java.util.Map.Entry;
 +
 +import io.airlift.command.Command;
 +import io.airlift.command.Option;
  
+ 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;
@@@ -85,12 -63,13 +87,13 @@@ public class CompactionStats extends No
                  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);
 +                table.add(id, taskType, keyspace, columnFamily, completedStr, totalStr, unit, percentComplete);
                  if (taskType.equals(OperationType.COMPACTION.toString()))
                      remainingBytes += total - completed;
              }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


[4/6] cassandra git commit: Merge branch 'cassandra-3.0' into cassandra-3.11

Posted by mc...@apache.org.
Merge branch 'cassandra-3.0' into cassandra-3.11


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/bc30a6f7
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/bc30a6f7
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/bc30a6f7

Branch: refs/heads/trunk
Commit: bc30a6f733545205271a2cdf82cfa7ab42eee6f4
Parents: dd9ae1d 9d498dc
Author: Mick Semb Wever <mc...@apache.org>
Authored: Fri May 4 14:47:10 2018 +1000
Committer: Mick Semb Wever <mc...@apache.org>
Committed: Fri May 4 15:01:54 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/bc30a6f7/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 2d7053d,f1dcf52..5f66b62
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,15 -1,5 +1,16 @@@
 -3.0.17
 +3.11.3
 + * Allow existing nodes to use all peers in shadow round (CASSANDRA-13851)
 + * Fix cqlsh to read connection.ssl cqlshrc option again (CASSANDRA-14299)
 + * Downgrade log level to trace for CommitLogSegmentManager (CASSANDRA-14370)
 + * CQL fromJson(null) throws NullPointerException (CASSANDRA-13891)
 + * Serialize empty buffer as empty string for json output format (CASSANDRA-14245)
 + * Allow logging implementation to be interchanged for embedded testing (CASSANDRA-13396)
 + * SASI tokenizer for simple delimiter based entries (CASSANDRA-14247)
 + * Fix Loss of digits when doing CAST from varint/bigint to decimal (CASSANDRA-14170)
 + * RateBasedBackPressure unnecessarily invokes a lock on the Guava RateLimiter (CASSANDRA-14163)
 + * Fix wildcard GROUP BY queries (CASSANDRA-14209)
 +Merged from 3.0:
+  * 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/bc30a6f7/src/java/org/apache/cassandra/cache/AutoSavingCache.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/cache/AutoSavingCache.java
index aa13ca3,00431b9..a40a8a9
--- a/src/java/org/apache/cassandra/cache/AutoSavingCache.java
+++ b/src/java/org/apache/cassandra/cache/AutoSavingCache.java
@@@ -42,9 -41,11 +42,10 @@@ import org.apache.cassandra.db.ColumnFa
  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;
 +import org.apache.cassandra.io.util.CorruptFileException;
  import org.apache.cassandra.io.util.DataInputPlus.DataInputStreamPlus;
  import org.apache.cassandra.service.CacheService;
  import org.apache.cassandra.utils.JVMStabilityInspector;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/bc30a6f7/src/java/org/apache/cassandra/db/compaction/CompactionInfo.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/bc30a6f7/src/java/org/apache/cassandra/db/view/ViewBuilder.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/view/ViewBuilder.java
index 8e647ea,68cb265..d9c9e71
--- a/src/java/org/apache/cassandra/db/view/ViewBuilder.java
+++ b/src/java/org/apache/cassandra/db/view/ViewBuilder.java
@@@ -190,25 -188,9 +193,25 @@@ public class ViewBuilder extends Compac
          }
      }
  
 +    private void updateDistributed(String ksname, String viewName, UUID localHostId)
 +    {
 +        try
 +        {
 +            SystemDistributedKeyspace.successfulViewBuild(ksname, viewName, localHostId);
 +            SystemKeyspace.setViewBuiltReplicated(ksname, viewName);
 +        }
 +        catch (Exception e)
 +        {
 +            ScheduledExecutors.nonPeriodicTasks.schedule(() -> CompactionManager.instance.submitViewBuilder(this),
 +                                                         5,
 +                                                         TimeUnit.MINUTES);
 +            logger.warn("Failed to updated the distributed status of view, sleeping 5 minutes before retrying", e);
 +        }
 +    }
 +
      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

http://git-wip-us.apache.org/repos/asf/cassandra/blob/bc30a6f7/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java
index 73626d3,ff362e8..ab23ef3
--- a/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java
+++ b/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java
@@@ -38,9 -38,9 +38,10 @@@ 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.FBUtilities;
  import org.apache.cassandra.utils.Pair;
  import org.apache.cassandra.utils.concurrent.Refs;
  

http://git-wip-us.apache.org/repos/asf/cassandra/blob/bc30a6f7/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
index 4fd0423,36b5733..d615516
--- a/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
@@@ -17,16 -17,19 +17,18 @@@
   */
  package org.apache.cassandra.tools.nodetool;
  
 -import static java.lang.String.format;
 -import io.airlift.command.Command;
 -import io.airlift.command.Option;
 -
  import java.text.DecimalFormat;
 -import java.util.ArrayList;
  import java.util.List;
  import java.util.Map;
 +import java.util.Map.Entry;
 +
 +import io.airlift.command.Command;
 +import io.airlift.command.Option;
  
+ 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;
@@@ -85,12 -63,13 +87,13 @@@ public class CompactionStats extends No
                  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);
 +                table.add(id, taskType, keyspace, columnFamily, completedStr, totalStr, unit, percentComplete);
                  if (taskType.equals(OperationType.COMPACTION.toString()))
                      remainingBytes += total - completed;
              }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


[6/6] cassandra git commit: Merge branch 'cassandra-3.11' into trunk

Posted by mc...@apache.org.
Merge branch 'cassandra-3.11' into trunk


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/78ca3447
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/78ca3447
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/78ca3447

Branch: refs/heads/trunk
Commit: 78ca3447c9735682119b01bdf98f06bb75f413ff
Parents: 645d827 bc30a6f
Author: Mick Semb Wever <mc...@apache.org>
Authored: Fri May 4 15:08:21 2018 +1000
Committer: Mick Semb Wever <mc...@apache.org>
Committed: Fri May 4 15:14:04 2018 +1000

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../apache/cassandra/cache/AutoSavingCache.java |  3 +-
 .../cassandra/db/compaction/CompactionInfo.java | 33 +++++++++++++++++---
 .../cassandra/db/view/ViewBuilderTask.java      |  5 +--
 .../io/sstable/IndexSummaryRedistribution.java  |  5 +--
 .../tools/nodetool/CompactionStats.java         |  7 +++--
 6 files changed, 42 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/78ca3447/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index f0afbe6,5f66b62..628d0af
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -246,8 -10,11 +246,9 @@@
   * RateBasedBackPressure unnecessarily invokes a lock on the Guava RateLimiter (CASSANDRA-14163)
   * Fix wildcard GROUP BY queries (CASSANDRA-14209)
  Merged from 3.0:
+  * 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
 -   (CASSANDRA-13910)
   * Add missed CQL keywords to documentation (CASSANDRA-14359)
   * Fix unbounded validation compactions on repair / revert CASSANDRA-13797 (CASSANDRA-14332)
   * Avoid deadlock when running nodetool refresh before node is fully up (CASSANDRA-14310)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/78ca3447/src/java/org/apache/cassandra/cache/AutoSavingCache.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/78ca3447/src/java/org/apache/cassandra/db/compaction/CompactionInfo.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/compaction/CompactionInfo.java
index d3235bc,93bb4c9..ccdfeb4
--- a/src/java/org/apache/cassandra/db/compaction/CompactionInfo.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionInfo.java
@@@ -32,20 -32,43 +32,43 @@@ public final class CompactionInfo imple
      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 CompactionInfo(TableMetadata metadata, OperationType tasktype, long bytesComplete, long totalBytes, UUID compactionId)
 +    {
-         this(metadata, tasktype, bytesComplete, totalBytes, "bytes", compactionId);
++        this(metadata, tasktype, bytesComplete, totalBytes, Unit.BYTES, compactionId);
 +    }
 +
-     public CompactionInfo(OperationType tasktype, long completed, long total, String unit, UUID compactionId)
+     public static enum Unit
+     {
 -        BYTES("bytes"), RANGES("ranges"), KEYS("keys");
++        BYTES("bytes"), RANGES("token range parts"), KEYS("keys");
+ 
+         private final String name;
+ 
+         private Unit(String name)
+         {
+             this.name = name;
+         }
+ 
+         @Override
+         public String toString()
+         {
 -            return name;
++            return this.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, Unit.BYTES, compactionId);
 -    }
 -
+     public CompactionInfo(OperationType tasktype, long completed, long total, Unit unit, UUID compactionId)
      {
          this(null, tasktype, completed, total, unit, compactionId);
      }
  
-     public CompactionInfo(TableMetadata metadata, OperationType tasktype, long completed, long total, String unit, UUID compactionId)
 -    public CompactionInfo(CFMetaData cfm, OperationType tasktype, long completed, long total, Unit unit, UUID compactionId)
++    public CompactionInfo(TableMetadata metadata, OperationType tasktype, long completed, long total, Unit unit, UUID compactionId)
      {
          this.tasktype = tasktype;
          this.completed = completed;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/78ca3447/src/java/org/apache/cassandra/db/view/ViewBuilderTask.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/view/ViewBuilderTask.java
index 0273c17,0000000..1b16f18
mode 100644,000000..100644
--- a/src/java/org/apache/cassandra/db/view/ViewBuilderTask.java
+++ b/src/java/org/apache/cassandra/db/view/ViewBuilderTask.java
@@@ -1,250 -1,0 +1,251 @@@
 +/*
 + * 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.db.view;
 +
 +import java.util.Collection;
 +import java.util.Collections;
 +import java.util.Iterator;
 +import java.util.UUID;
 +import java.util.concurrent.Callable;
 +import java.util.concurrent.atomic.AtomicLong;
 +
 +import com.google.common.base.Function;
 +import com.google.common.base.Objects;
 +import com.google.common.collect.Iterators;
 +import com.google.common.collect.PeekingIterator;
 +import com.google.common.util.concurrent.Futures;
 +import org.slf4j.Logger;
 +import org.slf4j.LoggerFactory;
 +
 +import org.apache.cassandra.db.ColumnFamilyStore;
 +import org.apache.cassandra.db.DecoratedKey;
 +import org.apache.cassandra.db.DeletionTime;
 +import org.apache.cassandra.db.Mutation;
 +import org.apache.cassandra.db.ReadExecutionController;
 +import org.apache.cassandra.db.ReadQuery;
 +import org.apache.cassandra.db.SinglePartitionReadCommand;
 +import org.apache.cassandra.db.SystemKeyspace;
 +import org.apache.cassandra.db.compaction.CompactionInfo;
++import org.apache.cassandra.db.compaction.CompactionInfo.Unit;
 +import org.apache.cassandra.db.compaction.CompactionInterruptedException;
 +import org.apache.cassandra.db.compaction.OperationType;
 +import org.apache.cassandra.db.lifecycle.SSTableSet;
 +import org.apache.cassandra.db.partitions.UnfilteredPartitionIterators;
 +import org.apache.cassandra.db.rows.Rows;
 +import org.apache.cassandra.db.rows.UnfilteredRowIterator;
 +import org.apache.cassandra.db.rows.UnfilteredRowIterators;
 +import org.apache.cassandra.dht.Range;
 +import org.apache.cassandra.dht.Token;
 +import org.apache.cassandra.io.sstable.ReducingKeyIterator;
 +import org.apache.cassandra.io.sstable.format.SSTableReader;
 +import org.apache.cassandra.service.StorageProxy;
 +import org.apache.cassandra.utils.FBUtilities;
 +import org.apache.cassandra.utils.UUIDGen;
 +import org.apache.cassandra.utils.concurrent.Refs;
 +
 +public class ViewBuilderTask extends CompactionInfo.Holder implements Callable<Long>
 +{
 +    private static final Logger logger = LoggerFactory.getLogger(ViewBuilderTask.class);
 +
 +    private static final int ROWS_BETWEEN_CHECKPOINTS = 1000;
 +
 +    private final ColumnFamilyStore baseCfs;
 +    private final View view;
 +    private final Range<Token> range;
 +    private final UUID compactionId;
 +    private volatile Token prevToken;
 +    private volatile long keysBuilt = 0;
 +    private volatile boolean isStopped = false;
 +    private volatile boolean isCompactionInterrupted = false;
 +
 +    ViewBuilderTask(ColumnFamilyStore baseCfs, View view, Range<Token> range, Token lastToken, long keysBuilt)
 +    {
 +        this.baseCfs = baseCfs;
 +        this.view = view;
 +        this.range = range;
 +        this.compactionId = UUIDGen.getTimeUUID();
 +        this.prevToken = lastToken;
 +        this.keysBuilt = keysBuilt;
 +    }
 +
 +    private void buildKey(DecoratedKey key)
 +    {
 +        ReadQuery selectQuery = view.getReadQuery();
 +
 +        if (!selectQuery.selectsKey(key))
 +        {
 +            logger.trace("Skipping {}, view query filters", key);
 +            return;
 +        }
 +
 +        int nowInSec = FBUtilities.nowInSeconds();
 +        SinglePartitionReadCommand command = view.getSelectStatement().internalReadForView(key, nowInSec);
 +
 +        // We're rebuilding everything from what's on disk, so we read everything, consider that as new updates
 +        // and pretend that there is nothing pre-existing.
 +        UnfilteredRowIterator empty = UnfilteredRowIterators.noRowsIterator(baseCfs.metadata(), key, Rows.EMPTY_STATIC_ROW, DeletionTime.LIVE, false);
 +
 +        try (ReadExecutionController orderGroup = command.executionController();
 +             UnfilteredRowIterator data = UnfilteredPartitionIterators.getOnlyElement(command.executeLocally(orderGroup), command))
 +        {
 +            Iterator<Collection<Mutation>> mutations = baseCfs.keyspace.viewManager
 +                                                       .forTable(baseCfs.metadata.id)
 +                                                       .generateViewUpdates(Collections.singleton(view), data, empty, nowInSec, true);
 +
 +            AtomicLong noBase = new AtomicLong(Long.MAX_VALUE);
 +            mutations.forEachRemaining(m -> StorageProxy.mutateMV(key.getKey(), m, true, noBase, System.nanoTime()));
 +        }
 +    }
 +
 +    public Long call()
 +    {
 +        String ksName = baseCfs.metadata.keyspace;
 +
 +        if (prevToken == null)
 +            logger.debug("Starting new view build for range {}", range);
 +        else
 +            logger.debug("Resuming view build for range {} from token {} with {} covered keys", range, prevToken, keysBuilt);
 +
 +        Function<org.apache.cassandra.db.lifecycle.View, Iterable<SSTableReader>> function;
 +        function = org.apache.cassandra.db.lifecycle.View.select(SSTableSet.CANONICAL, s -> range.intersects(s.getBounds()));
 +
 +        try (ColumnFamilyStore.RefViewFragment viewFragment = baseCfs.selectAndReference(function);
 +             Refs<SSTableReader> sstables = viewFragment.refs;
 +             ReducingKeyIterator keyIter = new ReducingKeyIterator(sstables))
 +        {
 +            PeekingIterator<DecoratedKey> iter = Iterators.peekingIterator(keyIter);
 +            while (!isStopped && iter.hasNext())
 +            {
 +                DecoratedKey key = iter.next();
 +                Token token = key.getToken();
 +                //skip tokens already built or not present in range
 +                if (range.contains(token) && (prevToken == null || token.compareTo(prevToken) > 0))
 +                {
 +                    buildKey(key);
 +                    ++keysBuilt;
 +                    //build other keys sharing the same token
 +                    while (iter.hasNext() && iter.peek().getToken().equals(token))
 +                    {
 +                        key = iter.next();
 +                        buildKey(key);
 +                        ++keysBuilt;
 +                    }
 +                    if (keysBuilt % ROWS_BETWEEN_CHECKPOINTS == 1)
 +                        SystemKeyspace.updateViewBuildStatus(ksName, view.name, range, token, keysBuilt);
 +                    prevToken = token;
 +                }
 +            }
 +        }
 +
 +        finish();
 +
 +        return keysBuilt;
 +    }
 +
 +    private void finish()
 +    {
 +        String ksName = baseCfs.keyspace.getName();
 +        if (!isStopped)
 +        {
 +            // Save the completed status using the end of the range as last token. This way it will be possible for
 +            // future view build attempts to don't even create a task for this range
 +            SystemKeyspace.updateViewBuildStatus(ksName, view.name, range, range.right, keysBuilt);
 +
 +            logger.debug("Completed build of view({}.{}) for range {} after covering {} keys ", ksName, view.name, range, keysBuilt);
 +        }
 +        else
 +        {
 +            logger.debug("Stopped build for view({}.{}) for range {} after covering {} keys", ksName, view.name, range, keysBuilt);
 +
 +            // If it's stopped due to a compaction interruption we should throw that exception.
 +            // Otherwise we assume that the task has been stopped due to a schema update and we can finish successfully.
 +            if (isCompactionInterrupted)
 +                throw new StoppedException(ksName, view.name, getCompactionInfo());
 +        }
 +    }
 +
 +    @Override
 +    public CompactionInfo getCompactionInfo()
 +    {
 +        // If there's splitter, calculate progress based on last token position
 +        if (range.left.getPartitioner().splitter().isPresent())
 +        {
 +            long progress = prevToken == null ? 0 : Math.round(prevToken.getPartitioner().splitter().get().positionInRange(prevToken, range) * 1000);
-             return new CompactionInfo(baseCfs.metadata(), OperationType.VIEW_BUILD, progress, 1000, "token range parts", compactionId);
++            return new CompactionInfo(baseCfs.metadata(), OperationType.VIEW_BUILD, progress, 1000, Unit.RANGES, compactionId);
 +        }
 +
 +        // When there is no splitter, estimate based on number of total keys but
 +        // take the max with keysBuilt + 1 to avoid having more completed than total
 +        long keysTotal = Math.max(keysBuilt + 1, baseCfs.estimatedKeysForRange(range));
-         return new CompactionInfo(baseCfs.metadata(), OperationType.VIEW_BUILD, keysBuilt, keysTotal, "keys", compactionId);
++        return new CompactionInfo(baseCfs.metadata(), OperationType.VIEW_BUILD, keysBuilt, keysTotal, Unit.KEYS, compactionId);
 +    }
 +
 +    @Override
 +    public void stop()
 +    {
 +        stop(true);
 +    }
 +
 +    synchronized void stop(boolean isCompactionInterrupted)
 +    {
 +        isStopped = true;
 +        this.isCompactionInterrupted = isCompactionInterrupted;
 +    }
 +
 +    long keysBuilt()
 +    {
 +        return keysBuilt;
 +    }
 +
 +    /**
 +     * {@link CompactionInterruptedException} with {@link Object#equals(Object)} and {@link Object#hashCode()}
 +     * implementations that consider equals all the exceptions produced by the same view build, independently of their
 +     * token range.
 +     * <p>
 +     * This is used to avoid Guava's {@link Futures#allAsList(Iterable)} log spamming when multiple build tasks fail
 +     * due to compaction interruption.
 +     */
 +    static class StoppedException extends CompactionInterruptedException
 +    {
 +        private final String ksName, viewName;
 +
 +        private StoppedException(String ksName, String viewName, CompactionInfo info)
 +        {
 +            super(info);
 +            this.ksName = ksName;
 +            this.viewName = viewName;
 +        }
 +
 +        @Override
 +        public boolean equals(Object o)
 +        {
 +            if (!(o instanceof StoppedException))
 +                return false;
 +
 +            StoppedException that = (StoppedException) o;
 +            return Objects.equal(this.ksName, that.ksName) && Objects.equal(this.viewName, that.viewName);
 +        }
 +
 +        @Override
 +        public int hashCode()
 +        {
 +            return 31 * ksName.hashCode() + viewName.hashCode();
 +        }
 +    }
 +}

http://git-wip-us.apache.org/repos/asf/cassandra/blob/78ca3447/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java
index 24de918,ab23ef3..1aaeb8b
--- a/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java
+++ b/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java
@@@ -28,18 -28,19 +28,19 @@@ import java.util.Map
  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.schema.TableId;
  import org.apache.cassandra.utils.FBUtilities;
  import org.apache.cassandra.utils.Pair;
  import org.apache.cassandra.utils.concurrent.Refs;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/78ca3447/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
index 5eb5b24,d615516..574220e
--- a/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/CompactionStats.java
@@@ -22,11 -22,13 +22,13 @@@ import java.util.List
  import java.util.Map;
  import java.util.Map.Entry;
  
 -import io.airlift.command.Command;
 -import io.airlift.command.Option;
 +import io.airlift.airline.Command;
 +import io.airlift.airline.Option;
  
+ 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;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


[3/6] cassandra git commit: fix viewbuilder progress and display in compactionstats

Posted by mc...@apache.org.
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 <mc...@apache.org>
Authored: Wed May 2 14:21:40 2018 +1000
Committer: Mick Semb Wever <mc...@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-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org