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