Repository: cassandra
Updated Branches:
  refs/heads/trunk 60563f4e8 -> 3747a6cd9


Compaction performance improvements

Patch by Jeff Jirsa; Reviewed by Marcus Eriksson for CASSANDRA-14261


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

Branch: refs/heads/trunk
Commit: 3747a6cd993c1a4d1a4a9345f8efe3ebc6cb482b
Parents: 60563f4
Author: Jeff Jirsa <jji...@apple.com>
Authored: Thu Apr 12 08:45:27 2018 -0700
Committer: Jeff Jirsa <jji...@apple.com>
Committed: Thu Apr 12 08:45:27 2018 -0700

----------------------------------------------------------------------
 CHANGES.txt                                              |  1 +
 src/java/org/apache/cassandra/concurrent/SEPWorker.java  |  3 ++-
 .../db/partitions/UnfilteredPartitionIterators.java      | 11 ++++++++++-
 .../apache/cassandra/db/rows/SerializationHelper.java    |  5 +++++
 src/java/org/apache/cassandra/schema/ColumnMetadata.java |  4 ++--
 5 files changed, 20 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/3747a6cd/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 2dc2021..754b9f3 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.0
+ * Compaction performance improvements (CASSANDRA-14261) 
  * Refactor Pair usage to avoid boxing ints/longs (CASSANDRA-14260)
  * Add options to nodetool tablestats to sort and limit output 
(CASSANDRA-13889)
  * Rename internals to reflect CQL vocabulary (CASSANDRA-14354)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/3747a6cd/src/java/org/apache/cassandra/concurrent/SEPWorker.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/concurrent/SEPWorker.java 
b/src/java/org/apache/cassandra/concurrent/SEPWorker.java
index d3c87c6..918349f 100644
--- a/src/java/org/apache/cassandra/concurrent/SEPWorker.java
+++ b/src/java/org/apache/cassandra/concurrent/SEPWorker.java
@@ -17,6 +17,7 @@
  */
 package org.apache.cassandra.concurrent;
 
+import java.util.concurrent.ThreadLocalRandom;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.concurrent.locks.LockSupport;
@@ -230,7 +231,7 @@ final class SEPWorker extends 
AtomicReference<SEPWorker.Work> implements Runnabl
         // we should always have a thread about to wake up, but most threads 
are sleeping
         long sleep = 10000L * pool.spinningCount.get();
         sleep = Math.min(1000000, sleep);
-        sleep *= Math.random();
+        sleep *= ThreadLocalRandom.current().nextDouble();
         sleep = Math.max(10000, sleep);
 
         long start = System.nanoTime();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/3747a6cd/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java
----------------------------------------------------------------------
diff --git 
a/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java 
b/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java
index edb7833..f3c965a 100644
--- 
a/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java
+++ 
b/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java
@@ -139,10 +139,19 @@ public abstract class UnfilteredPartitionIterators
             {
                 UnfilteredRowIterators.MergeListener rowListener = 
listener.getRowMergeListener(partitionKey, toMerge);
 
+                // Make a single empty iterator object to merge, we don't need 
toMerge.size() copiess
+                UnfilteredRowIterator empty = null;
+
                 // Replace nulls by empty iterators
                 for (int i = 0; i < toMerge.size(); i++)
+                {
                     if (toMerge.get(i) == null)
-                        toMerge.set(i, EmptyIterators.unfilteredRow(metadata, 
partitionKey, isReverseOrder));
+                    {
+                        if (null == empty)
+                            empty = EmptyIterators.unfilteredRow(metadata, 
partitionKey, isReverseOrder);
+                        toMerge.set(i, empty);
+                    }
+                }
 
                 return UnfilteredRowIterators.merge(toMerge, nowInSec, 
rowListener);
             }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/3747a6cd/src/java/org/apache/cassandra/db/rows/SerializationHelper.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/rows/SerializationHelper.java 
b/src/java/org/apache/cassandra/db/rows/SerializationHelper.java
index c7fb8e4..db23cb8 100644
--- a/src/java/org/apache/cassandra/db/rows/SerializationHelper.java
+++ b/src/java/org/apache/cassandra/db/rows/SerializationHelper.java
@@ -51,6 +51,7 @@ public class SerializationHelper
     private final ColumnFilter columnsToFetch;
     private ColumnFilter.Tester tester;
 
+    private final boolean hasDroppedColumns;
     private final Map<ByteBuffer, DroppedColumn> droppedColumns;
     private DroppedColumn currentDroppedComplex;
 
@@ -61,6 +62,7 @@ public class SerializationHelper
         this.version = version;
         this.columnsToFetch = columnsToFetch;
         this.droppedColumns = metadata.droppedColumns;
+        this.hasDroppedColumns = droppedColumns.size() > 0;
     }
 
     public SerializationHelper(TableMetadata metadata, int version, Flag flag)
@@ -126,6 +128,9 @@ public class SerializationHelper
 
     public boolean isDropped(Cell cell, boolean isComplex)
     {
+        if (!hasDroppedColumns)
+            return false;
+
         DroppedColumn dropped = isComplex ? currentDroppedComplex : 
droppedColumns.get(cell.column().name.bytes);
         return dropped != null && cell.timestamp() <= dropped.droppedTime;
     }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/3747a6cd/src/java/org/apache/cassandra/schema/ColumnMetadata.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/schema/ColumnMetadata.java 
b/src/java/org/apache/cassandra/schema/ColumnMetadata.java
index 3b55c03..0380b35 100644
--- a/src/java/org/apache/cassandra/schema/ColumnMetadata.java
+++ b/src/java/org/apache/cassandra/schema/ColumnMetadata.java
@@ -445,11 +445,11 @@ public final class ColumnMetadata extends 
ColumnSpecification implements Selecta
     }
 
     /**
-     * Check if column is counter type. For thrift, it checks collection's 
value type
+     * Check if column is counter type.
      */
     public boolean isCounterColumn()
     {
-        if (type instanceof CollectionType) // for thrift
+        if (type instanceof CollectionType) // Possible with, for example, 
supercolumns
             return ((CollectionType) type).valueComparator().isCounter();
         return type.isCounter();
     }


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

Reply via email to