[2/4] cassandra git commit: Revert "Add row offset support to SASI"
http://git-wip-us.apache.org/repos/asf/cassandra/blob/490c1c27/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java b/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java index 07804d6..2210964 100644 --- a/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java +++ b/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java @@ -20,62 +20,28 @@ package org.apache.cassandra.index.sasi.disk; import java.io.IOException; import java.util.*; -import org.apache.cassandra.io.util.*; -import org.apache.cassandra.utils.*; -import org.apache.cassandra.utils.obs.BitUtil; +import org.apache.cassandra.io.util.DataOutputPlus; +import org.apache.cassandra.utils.Pair; -public interface TokenTreeBuilder extends Iterable> -{ -final static int BLOCK_BYTES = 4096; - -final static int LEAF_ENTRY_TYPE_BYTES = Short.BYTES; -final static int TOKEN_OFFSET_BYTES = LEAF_ENTRY_TYPE_BYTES; -final static int LEAF_PARTITON_OFFSET_BYTES = Long.BYTES; -final static int LEAF_ROW_OFFSET_BYTES = Long.BYTES; - -final static int LEAF_PARTITON_OFFSET_PACKED_BYTES = Integer.BYTES; -final static int LEAF_ROW_OFFSET_PACKED_BYTES = Integer.BYTES; -final static int COLLISION_ENTRY_BYTES = LEAF_PARTITON_OFFSET_BYTES + LEAF_ROW_OFFSET_BYTES; - -final static int HEADER_INFO_BYTE_BYTES = Byte.BYTES; -final static int HEADER_TOKEN_COUNT_BYTES = Short.BYTES; - -final static int ROOT_HEADER_MAGIC_SIZE = Short.BYTES; -final static int ROOT_HEADER_TOKEN_COUNT_SIZE = Long.BYTES; +import com.carrotsearch.hppc.LongSet; -// Partitioner token size in bytes -final static int TOKEN_BYTES = Long.BYTES; - -// Leaf entry size in bytes, see {@class SimpleLeafEntry} for a full description -final static int LEAF_ENTRY_BYTES = LEAF_ENTRY_TYPE_BYTES + TOKEN_BYTES + LEAF_PARTITON_OFFSET_BYTES + LEAF_ROW_OFFSET_BYTES; -// Shared header size in bytes, see {@class AbstractTreeBuilder$Header} for a full description -final static int SHARED_HEADER_BYTES = HEADER_INFO_BYTE_BYTES + HEADER_TOKEN_COUNT_BYTES + 2 * TOKEN_BYTES; -// Block header size in bytes, see {@class AbstractTreeBuilder$RootHeader} -final static int BLOCK_HEADER_BYTES = BitUtil.nextHighestPowerOfTwo(SHARED_HEADER_BYTES + ROOT_HEADER_MAGIC_SIZE + ROOT_HEADER_TOKEN_COUNT_SIZE + 2 * TOKEN_BYTES); - -// Overflow trailer capacity is currently 8 overflow items. Each overflow item consists of two longs. -final static int OVERFLOW_TRAILER_CAPACITY = 8; -final static int OVERFLOW_TRAILER_BYTES = OVERFLOW_TRAILER_CAPACITY * COLLISION_ENTRY_BYTES;; -final static int TOKENS_PER_BLOCK = (TokenTreeBuilder.BLOCK_BYTES - BLOCK_HEADER_BYTES - OVERFLOW_TRAILER_BYTES) / LEAF_ENTRY_BYTES; - -final static int LEGACY_LEAF_ENTRY_BYTES = Short.BYTES + Short.BYTES + TOKEN_BYTES + Integer.BYTES; -final static int LEGACY_TOKEN_OFFSET_BYTES = 2 * Short.BYTES; -final static byte LAST_LEAF_SHIFT = 1; - -/** - * {@code Header} size in bytes. - */ -final byte ENTRY_TYPE_MASK = 0x03; -final short AB_MAGIC = 0x5A51; -final short AC_MAGIC = 0x7C63; +public interface TokenTreeBuilder extends Iterable> +{ +int BLOCK_BYTES = 4096; +int BLOCK_HEADER_BYTES = 64; +int OVERFLOW_TRAILER_BYTES = 64; +int OVERFLOW_TRAILER_CAPACITY = OVERFLOW_TRAILER_BYTES / 8; +int TOKENS_PER_BLOCK = (BLOCK_BYTES - BLOCK_HEADER_BYTES - OVERFLOW_TRAILER_BYTES) / 16; +long MAX_OFFSET = (1L << 47) - 1; // 48 bits for (signed) offset +byte LAST_LEAF_SHIFT = 1; +byte SHARED_HEADER_BYTES = 19; +byte ENTRY_TYPE_MASK = 0x03; +short AB_MAGIC = 0x5A51; // note: ordinal positions are used here, do not change order enum EntryType { -SIMPLE, -FACTORED, -PACKED, -OVERFLOW; +SIMPLE, FACTORED, PACKED, OVERFLOW; public static EntryType of(int ordinal) { @@ -95,9 +61,9 @@ public interface TokenTreeBuilder extends Iterable> } } -void add(Long token, long partitionOffset, long rowOffset); -void add(SortedMap data); -void add(Iterator> data); +void add(Long token, long keyPosition); +void add(SortedMap data); +void add(Iterator> data); void add(TokenTreeBuilder ttb); boolean isEmpty(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/490c1c27/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java b/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java index a7b22f3..e55a806 100644 --- a/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java +++ b/src/java/org/apache/cassandra/index/sasi
[4/4] cassandra git commit: Merge branch 'cassandra-3.X' into trunk
Merge branch 'cassandra-3.X' into trunk Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/f55d1b9f Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/f55d1b9f Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/f55d1b9f Branch: refs/heads/trunk Commit: f55d1b9f02a0c5b10fd1527440dd2b0371f91fe0 Parents: 732af7d 490c1c2 Author: Pavel Yaskevich Authored: Thu Nov 17 15:27:14 2016 -0800 Committer: Pavel Yaskevich Committed: Thu Nov 17 15:27:14 2016 -0800 -- CHANGES.txt | 1 - .../org/apache/cassandra/db/ColumnIndex.java| 6 +- .../apache/cassandra/index/sasi/KeyFetcher.java | 98 --- .../apache/cassandra/index/sasi/SASIIndex.java | 11 +- .../cassandra/index/sasi/SASIIndexBuilder.java | 13 +- .../cassandra/index/sasi/SSTableIndex.java | 41 ++- .../cassandra/index/sasi/conf/ColumnIndex.java | 4 +- .../index/sasi/conf/view/RangeTermTree.java | 4 - .../sasi/disk/AbstractTokenTreeBuilder.java | 276 -- .../cassandra/index/sasi/disk/Descriptor.java | 33 +-- .../sasi/disk/DynamicTokenTreeBuilder.java | 59 ++-- .../cassandra/index/sasi/disk/KeyOffsets.java | 115 .../cassandra/index/sasi/disk/OnDiskIndex.java | 12 +- .../index/sasi/disk/OnDiskIndexBuilder.java | 16 +- .../index/sasi/disk/PerSSTableIndexWriter.java | 13 +- .../cassandra/index/sasi/disk/RowKey.java | 108 --- .../index/sasi/disk/StaticTokenTreeBuilder.java | 18 +- .../apache/cassandra/index/sasi/disk/Token.java | 9 +- .../cassandra/index/sasi/disk/TokenTree.java| 288 +++ .../index/sasi/disk/TokenTreeBuilder.java | 72 ++--- .../index/sasi/memory/IndexMemtable.java| 8 +- .../index/sasi/memory/KeyRangeIterator.java | 49 ++-- .../cassandra/index/sasi/memory/MemIndex.java | 4 +- .../index/sasi/memory/SkipListMemIndex.java | 12 +- .../index/sasi/memory/TrieMemIndex.java | 45 +-- .../index/sasi/plan/QueryController.java| 49 ++-- .../cassandra/index/sasi/plan/QueryPlan.java| 174 +++ .../io/sstable/format/SSTableFlushObserver.java | 5 - .../io/sstable/format/SSTableReader.java| 33 +-- .../io/sstable/format/big/BigTableWriter.java | 8 +- .../org/apache/cassandra/utils/obs/BitUtil.java | 2 +- test/data/legacy-sasi/on-disk-sa-int2.db| Bin 12312 -> 0 bytes .../cassandra/index/sasi/SASIIndexTest.java | 25 +- .../index/sasi/disk/KeyOffsetsTest.java | 48 .../index/sasi/disk/OnDiskIndexTest.java| 216 +++--- .../sasi/disk/PerSSTableIndexWriterTest.java| 112 ++-- .../index/sasi/disk/TokenTreeTest.java | 208 +++--- .../index/sasi/plan/OperationTest.java | 2 +- .../index/sasi/utils/KeyConverter.java | 69 - .../index/sasi/utils/LongIterator.java | 8 +- .../sasi/utils/RangeUnionIteratorTest.java | 17 -- 41 files changed, 745 insertions(+), 1546 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/f55d1b9f/CHANGES.txt -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/f55d1b9f/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java --
[1/4] cassandra git commit: Revert "Add row offset support to SASI"
Repository: cassandra Updated Branches: refs/heads/trunk 732af7de7 -> f55d1b9f0 http://git-wip-us.apache.org/repos/asf/cassandra/blob/490c1c27/test/unit/org/apache/cassandra/index/sasi/disk/TokenTreeTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/disk/TokenTreeTest.java b/test/unit/org/apache/cassandra/index/sasi/disk/TokenTreeTest.java index 7c2498c..927e165 100644 --- a/test/unit/org/apache/cassandra/index/sasi/disk/TokenTreeTest.java +++ b/test/unit/org/apache/cassandra/index/sasi/disk/TokenTreeTest.java @@ -19,31 +19,42 @@ package org.apache.cassandra.index.sasi.disk; import java.io.File; import java.io.IOException; +import java.nio.ByteBuffer; import java.util.*; import com.google.common.collect.Iterators; import com.google.common.collect.PeekingIterator; -import com.carrotsearch.hppc.cursors.LongObjectCursor; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.db.BufferDecoratedKey; -import org.apache.cassandra.db.ClusteringComparator; import org.apache.cassandra.db.DecoratedKey; -import org.apache.cassandra.db.marshal.LongType; import org.apache.cassandra.dht.Murmur3Partitioner; import org.apache.cassandra.index.sasi.disk.TokenTreeBuilder.EntryType; -import org.apache.cassandra.index.sasi.utils.*; -import org.apache.cassandra.io.util.*; +import org.apache.cassandra.index.sasi.utils.CombinedTerm; +import org.apache.cassandra.index.sasi.utils.CombinedValue; +import org.apache.cassandra.index.sasi.utils.MappedBuffer; +import org.apache.cassandra.index.sasi.utils.RangeIterator; +import org.apache.cassandra.db.marshal.LongType; +import org.apache.cassandra.index.sasi.utils.RangeUnionIterator; +import org.apache.cassandra.io.util.FileUtils; +import org.apache.cassandra.io.util.SequentialWriterOption; +import org.apache.cassandra.utils.MurmurHash; +import org.apache.cassandra.io.util.RandomAccessReader; +import org.apache.cassandra.io.util.SequentialWriter; import junit.framework.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.apache.commons.lang3.builder.HashCodeBuilder; +import com.carrotsearch.hppc.LongOpenHashSet; +import com.carrotsearch.hppc.LongSet; +import com.carrotsearch.hppc.cursors.LongCursor; +import com.google.common.base.Function; public class TokenTreeTest { -private static final ClusteringComparator CLUSTERING_COMPARATOR = new ClusteringComparator(LongType.instance); +private static final Function KEY_CONVERTER = new KeyConverter(); @BeforeClass public static void setupDD() @@ -51,30 +62,14 @@ public class TokenTreeTest DatabaseDescriptor.daemonInitialization(); } -static KeyOffsets singleOffset = new KeyOffsets() {{ put(1L, KeyOffsets.asArray(10L)); }}; -static KeyOffsets bigSingleOffset = new KeyOffsets() {{ put(2147521562L, KeyOffsets.asArray(10)); }}; -static KeyOffsets shortPackableCollision = new KeyOffsets() {{ -put(2L, KeyOffsets.asArray(10)); -put(3L, KeyOffsets.asArray(10)); -}}; // can pack two shorts -static KeyOffsets intPackableCollision = new KeyOffsets() -{{ -put(6L, KeyOffsets.asArray(10)); -put(((long) Short.MAX_VALUE) + 1, KeyOffsets.asArray(10)); -}}; // can pack int & short -static KeyOffsets multiCollision = new KeyOffsets() -{{ -put(3L, KeyOffsets.asArray(10)); -put(4L, KeyOffsets.asArray(10)); -put(5L, KeyOffsets.asArray(10)); -}}; // can't pack -static KeyOffsets unpackableCollision = new KeyOffsets() -{{ -put(((long) Short.MAX_VALUE) + 1, KeyOffsets.asArray(10)); -put(((long) Short.MAX_VALUE) + 2, KeyOffsets.asArray(10)); -}}; // can't pack +static LongSet singleOffset = new LongOpenHashSet() {{ add(1); }}; +static LongSet bigSingleOffset = new LongOpenHashSet() {{ add(2147521562L); }}; +static LongSet shortPackableCollision = new LongOpenHashSet() {{ add(2L); add(3L); }}; // can pack two shorts +static LongSet intPackableCollision = new LongOpenHashSet() {{ add(6L); add(((long) Short.MAX_VALUE) + 1); }}; // can pack int & short +static LongSet multiCollision = new LongOpenHashSet() {{ add(3L); add(4L); add(5L); }}; // can't pack +static LongSet unpackableCollision = new LongOpenHashSet() {{ add(((long) Short.MAX_VALUE) + 1); add(((long) Short.MAX_VALUE) + 2); }}; // can't pack -final static SortedMap simpleTokenMap = new TreeMap() +final static SortedMap simpleTokenMap = new TreeMap() {{ put(1L, bigSingleOffset); put(3L, shortPackableCollision); put(4L, intPackableCollision); put(6L, singleOffset); put(9L, multiCollision); put(10L, unpackableCollision); put(12L, singleOffset); put(13L, singleOffset); @@ -86,20 +81,18 @@ public class TokenTreeTest put(121L, singleOffset); put(122L, singleOffset); put(123L, singleOffset); put(125L, singleOffset)
[3/4] cassandra git commit: Revert "Add row offset support to SASI"
Revert "Add row offset support to SASI" This reverts commit 7d857b46fb070548bf5e5f6ff81db588f08ec22a. Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/490c1c27 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/490c1c27 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/490c1c27 Branch: refs/heads/trunk Commit: 490c1c27c9b700f14212d9591a516ddb8d0865c7 Parents: a1eef56 Author: Pavel Yaskevich Authored: Thu Nov 17 15:20:04 2016 -0800 Committer: Pavel Yaskevich Committed: Thu Nov 17 15:20:04 2016 -0800 -- CHANGES.txt | 1 - .../org/apache/cassandra/db/ColumnIndex.java| 6 +- .../apache/cassandra/index/sasi/KeyFetcher.java | 98 --- .../apache/cassandra/index/sasi/SASIIndex.java | 11 +- .../cassandra/index/sasi/SASIIndexBuilder.java | 13 +- .../cassandra/index/sasi/SSTableIndex.java | 41 ++- .../cassandra/index/sasi/conf/ColumnIndex.java | 4 +- .../index/sasi/conf/view/RangeTermTree.java | 4 - .../sasi/disk/AbstractTokenTreeBuilder.java | 276 -- .../cassandra/index/sasi/disk/Descriptor.java | 33 +-- .../sasi/disk/DynamicTokenTreeBuilder.java | 59 ++-- .../cassandra/index/sasi/disk/KeyOffsets.java | 115 .../cassandra/index/sasi/disk/OnDiskIndex.java | 12 +- .../index/sasi/disk/OnDiskIndexBuilder.java | 16 +- .../index/sasi/disk/PerSSTableIndexWriter.java | 13 +- .../cassandra/index/sasi/disk/RowKey.java | 108 --- .../index/sasi/disk/StaticTokenTreeBuilder.java | 18 +- .../apache/cassandra/index/sasi/disk/Token.java | 9 +- .../cassandra/index/sasi/disk/TokenTree.java| 288 +++ .../index/sasi/disk/TokenTreeBuilder.java | 72 ++--- .../index/sasi/memory/IndexMemtable.java| 8 +- .../index/sasi/memory/KeyRangeIterator.java | 49 ++-- .../cassandra/index/sasi/memory/MemIndex.java | 4 +- .../index/sasi/memory/SkipListMemIndex.java | 12 +- .../index/sasi/memory/TrieMemIndex.java | 45 +-- .../index/sasi/plan/QueryController.java| 49 ++-- .../cassandra/index/sasi/plan/QueryPlan.java| 174 +++ .../io/sstable/format/SSTableFlushObserver.java | 5 - .../io/sstable/format/SSTableReader.java| 33 +-- .../io/sstable/format/big/BigTableWriter.java | 8 +- .../org/apache/cassandra/utils/obs/BitUtil.java | 2 +- test/data/legacy-sasi/on-disk-sa-int2.db| Bin 12312 -> 0 bytes .../cassandra/index/sasi/SASIIndexTest.java | 25 +- .../index/sasi/disk/KeyOffsetsTest.java | 48 .../index/sasi/disk/OnDiskIndexTest.java| 216 +++--- .../sasi/disk/PerSSTableIndexWriterTest.java| 112 ++-- .../index/sasi/disk/TokenTreeTest.java | 208 +++--- .../index/sasi/plan/OperationTest.java | 2 +- .../index/sasi/utils/KeyConverter.java | 69 - .../index/sasi/utils/LongIterator.java | 8 +- .../sasi/utils/RangeUnionIteratorTest.java | 17 -- 41 files changed, 745 insertions(+), 1546 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/490c1c27/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index db06341..6ca26f9 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -45,7 +45,6 @@ * Allow filtering on partition key columns for queries without secondary indexes (CASSANDRA-11031) * Fix Cassandra Stress reporting thread model and precision (CASSANDRA-12585) * Add JMH benchmarks.jar (CASSANDRA-12586) - * Add row offset support to SASI (CASSANDRA-11990) * Cleanup uses of AlterTableStatementColumn (CASSANDRA-12567) * Add keep-alive to streaming (CASSANDRA-11841) * Tracing payload is passed through newSession(..) (CASSANDRA-11706) http://git-wip-us.apache.org/repos/asf/cassandra/blob/490c1c27/src/java/org/apache/cassandra/db/ColumnIndex.java -- diff --git a/src/java/org/apache/cassandra/db/ColumnIndex.java b/src/java/org/apache/cassandra/db/ColumnIndex.java index 8ea1272..de1b1df 100644 --- a/src/java/org/apache/cassandra/db/ColumnIndex.java +++ b/src/java/org/apache/cassandra/db/ColumnIndex.java @@ -121,10 +121,9 @@ public class ColumnIndex { Row staticRow = iterator.staticRow(); -long startPosition = currentPosition(); UnfilteredSerializer.serializer.serializeStaticRow(staticRow, header, writer, version); if (!observers.isEmpty()) -observers.forEach((o) -> o.nextUnfilteredCluster(staticRow, startPosition)); +observers.forEach((o) -> o.nextUnfilteredCluster(staticRow)); } } @@ -235,7 +234,6 @@ p
[3/3] cassandra git commit: Revert "Add row offset support to SASI"
Revert "Add row offset support to SASI" This reverts commit 7d857b46fb070548bf5e5f6ff81db588f08ec22a. Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/490c1c27 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/490c1c27 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/490c1c27 Branch: refs/heads/cassandra-3.X Commit: 490c1c27c9b700f14212d9591a516ddb8d0865c7 Parents: a1eef56 Author: Pavel Yaskevich Authored: Thu Nov 17 15:20:04 2016 -0800 Committer: Pavel Yaskevich Committed: Thu Nov 17 15:20:04 2016 -0800 -- CHANGES.txt | 1 - .../org/apache/cassandra/db/ColumnIndex.java| 6 +- .../apache/cassandra/index/sasi/KeyFetcher.java | 98 --- .../apache/cassandra/index/sasi/SASIIndex.java | 11 +- .../cassandra/index/sasi/SASIIndexBuilder.java | 13 +- .../cassandra/index/sasi/SSTableIndex.java | 41 ++- .../cassandra/index/sasi/conf/ColumnIndex.java | 4 +- .../index/sasi/conf/view/RangeTermTree.java | 4 - .../sasi/disk/AbstractTokenTreeBuilder.java | 276 -- .../cassandra/index/sasi/disk/Descriptor.java | 33 +-- .../sasi/disk/DynamicTokenTreeBuilder.java | 59 ++-- .../cassandra/index/sasi/disk/KeyOffsets.java | 115 .../cassandra/index/sasi/disk/OnDiskIndex.java | 12 +- .../index/sasi/disk/OnDiskIndexBuilder.java | 16 +- .../index/sasi/disk/PerSSTableIndexWriter.java | 13 +- .../cassandra/index/sasi/disk/RowKey.java | 108 --- .../index/sasi/disk/StaticTokenTreeBuilder.java | 18 +- .../apache/cassandra/index/sasi/disk/Token.java | 9 +- .../cassandra/index/sasi/disk/TokenTree.java| 288 +++ .../index/sasi/disk/TokenTreeBuilder.java | 72 ++--- .../index/sasi/memory/IndexMemtable.java| 8 +- .../index/sasi/memory/KeyRangeIterator.java | 49 ++-- .../cassandra/index/sasi/memory/MemIndex.java | 4 +- .../index/sasi/memory/SkipListMemIndex.java | 12 +- .../index/sasi/memory/TrieMemIndex.java | 45 +-- .../index/sasi/plan/QueryController.java| 49 ++-- .../cassandra/index/sasi/plan/QueryPlan.java| 174 +++ .../io/sstable/format/SSTableFlushObserver.java | 5 - .../io/sstable/format/SSTableReader.java| 33 +-- .../io/sstable/format/big/BigTableWriter.java | 8 +- .../org/apache/cassandra/utils/obs/BitUtil.java | 2 +- test/data/legacy-sasi/on-disk-sa-int2.db| Bin 12312 -> 0 bytes .../cassandra/index/sasi/SASIIndexTest.java | 25 +- .../index/sasi/disk/KeyOffsetsTest.java | 48 .../index/sasi/disk/OnDiskIndexTest.java| 216 +++--- .../sasi/disk/PerSSTableIndexWriterTest.java| 112 ++-- .../index/sasi/disk/TokenTreeTest.java | 208 +++--- .../index/sasi/plan/OperationTest.java | 2 +- .../index/sasi/utils/KeyConverter.java | 69 - .../index/sasi/utils/LongIterator.java | 8 +- .../sasi/utils/RangeUnionIteratorTest.java | 17 -- 41 files changed, 745 insertions(+), 1546 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/490c1c27/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index db06341..6ca26f9 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -45,7 +45,6 @@ * Allow filtering on partition key columns for queries without secondary indexes (CASSANDRA-11031) * Fix Cassandra Stress reporting thread model and precision (CASSANDRA-12585) * Add JMH benchmarks.jar (CASSANDRA-12586) - * Add row offset support to SASI (CASSANDRA-11990) * Cleanup uses of AlterTableStatementColumn (CASSANDRA-12567) * Add keep-alive to streaming (CASSANDRA-11841) * Tracing payload is passed through newSession(..) (CASSANDRA-11706) http://git-wip-us.apache.org/repos/asf/cassandra/blob/490c1c27/src/java/org/apache/cassandra/db/ColumnIndex.java -- diff --git a/src/java/org/apache/cassandra/db/ColumnIndex.java b/src/java/org/apache/cassandra/db/ColumnIndex.java index 8ea1272..de1b1df 100644 --- a/src/java/org/apache/cassandra/db/ColumnIndex.java +++ b/src/java/org/apache/cassandra/db/ColumnIndex.java @@ -121,10 +121,9 @@ public class ColumnIndex { Row staticRow = iterator.staticRow(); -long startPosition = currentPosition(); UnfilteredSerializer.serializer.serializeStaticRow(staticRow, header, writer, version); if (!observers.isEmpty()) -observers.forEach((o) -> o.nextUnfilteredCluster(staticRow, startPosition)); +observers.forEach((o) -> o.nextUnfilteredCluster(staticRow)); } } @@ -235,7 +23
[1/3] cassandra git commit: Revert "Add row offset support to SASI"
Repository: cassandra Updated Branches: refs/heads/cassandra-3.X a1eef56cc -> 490c1c27c http://git-wip-us.apache.org/repos/asf/cassandra/blob/490c1c27/test/unit/org/apache/cassandra/index/sasi/disk/TokenTreeTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/disk/TokenTreeTest.java b/test/unit/org/apache/cassandra/index/sasi/disk/TokenTreeTest.java index 7c2498c..927e165 100644 --- a/test/unit/org/apache/cassandra/index/sasi/disk/TokenTreeTest.java +++ b/test/unit/org/apache/cassandra/index/sasi/disk/TokenTreeTest.java @@ -19,31 +19,42 @@ package org.apache.cassandra.index.sasi.disk; import java.io.File; import java.io.IOException; +import java.nio.ByteBuffer; import java.util.*; import com.google.common.collect.Iterators; import com.google.common.collect.PeekingIterator; -import com.carrotsearch.hppc.cursors.LongObjectCursor; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.db.BufferDecoratedKey; -import org.apache.cassandra.db.ClusteringComparator; import org.apache.cassandra.db.DecoratedKey; -import org.apache.cassandra.db.marshal.LongType; import org.apache.cassandra.dht.Murmur3Partitioner; import org.apache.cassandra.index.sasi.disk.TokenTreeBuilder.EntryType; -import org.apache.cassandra.index.sasi.utils.*; -import org.apache.cassandra.io.util.*; +import org.apache.cassandra.index.sasi.utils.CombinedTerm; +import org.apache.cassandra.index.sasi.utils.CombinedValue; +import org.apache.cassandra.index.sasi.utils.MappedBuffer; +import org.apache.cassandra.index.sasi.utils.RangeIterator; +import org.apache.cassandra.db.marshal.LongType; +import org.apache.cassandra.index.sasi.utils.RangeUnionIterator; +import org.apache.cassandra.io.util.FileUtils; +import org.apache.cassandra.io.util.SequentialWriterOption; +import org.apache.cassandra.utils.MurmurHash; +import org.apache.cassandra.io.util.RandomAccessReader; +import org.apache.cassandra.io.util.SequentialWriter; import junit.framework.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.apache.commons.lang3.builder.HashCodeBuilder; +import com.carrotsearch.hppc.LongOpenHashSet; +import com.carrotsearch.hppc.LongSet; +import com.carrotsearch.hppc.cursors.LongCursor; +import com.google.common.base.Function; public class TokenTreeTest { -private static final ClusteringComparator CLUSTERING_COMPARATOR = new ClusteringComparator(LongType.instance); +private static final Function KEY_CONVERTER = new KeyConverter(); @BeforeClass public static void setupDD() @@ -51,30 +62,14 @@ public class TokenTreeTest DatabaseDescriptor.daemonInitialization(); } -static KeyOffsets singleOffset = new KeyOffsets() {{ put(1L, KeyOffsets.asArray(10L)); }}; -static KeyOffsets bigSingleOffset = new KeyOffsets() {{ put(2147521562L, KeyOffsets.asArray(10)); }}; -static KeyOffsets shortPackableCollision = new KeyOffsets() {{ -put(2L, KeyOffsets.asArray(10)); -put(3L, KeyOffsets.asArray(10)); -}}; // can pack two shorts -static KeyOffsets intPackableCollision = new KeyOffsets() -{{ -put(6L, KeyOffsets.asArray(10)); -put(((long) Short.MAX_VALUE) + 1, KeyOffsets.asArray(10)); -}}; // can pack int & short -static KeyOffsets multiCollision = new KeyOffsets() -{{ -put(3L, KeyOffsets.asArray(10)); -put(4L, KeyOffsets.asArray(10)); -put(5L, KeyOffsets.asArray(10)); -}}; // can't pack -static KeyOffsets unpackableCollision = new KeyOffsets() -{{ -put(((long) Short.MAX_VALUE) + 1, KeyOffsets.asArray(10)); -put(((long) Short.MAX_VALUE) + 2, KeyOffsets.asArray(10)); -}}; // can't pack +static LongSet singleOffset = new LongOpenHashSet() {{ add(1); }}; +static LongSet bigSingleOffset = new LongOpenHashSet() {{ add(2147521562L); }}; +static LongSet shortPackableCollision = new LongOpenHashSet() {{ add(2L); add(3L); }}; // can pack two shorts +static LongSet intPackableCollision = new LongOpenHashSet() {{ add(6L); add(((long) Short.MAX_VALUE) + 1); }}; // can pack int & short +static LongSet multiCollision = new LongOpenHashSet() {{ add(3L); add(4L); add(5L); }}; // can't pack +static LongSet unpackableCollision = new LongOpenHashSet() {{ add(((long) Short.MAX_VALUE) + 1); add(((long) Short.MAX_VALUE) + 2); }}; // can't pack -final static SortedMap simpleTokenMap = new TreeMap() +final static SortedMap simpleTokenMap = new TreeMap() {{ put(1L, bigSingleOffset); put(3L, shortPackableCollision); put(4L, intPackableCollision); put(6L, singleOffset); put(9L, multiCollision); put(10L, unpackableCollision); put(12L, singleOffset); put(13L, singleOffset); @@ -86,20 +81,18 @@ public class TokenTreeTest put(121L, singleOffset); put(122L, singleOffset); put(123L, singleOffset); put(125L, singl
[2/3] cassandra git commit: Revert "Add row offset support to SASI"
http://git-wip-us.apache.org/repos/asf/cassandra/blob/490c1c27/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java b/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java index 07804d6..2210964 100644 --- a/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java +++ b/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java @@ -20,62 +20,28 @@ package org.apache.cassandra.index.sasi.disk; import java.io.IOException; import java.util.*; -import org.apache.cassandra.io.util.*; -import org.apache.cassandra.utils.*; -import org.apache.cassandra.utils.obs.BitUtil; +import org.apache.cassandra.io.util.DataOutputPlus; +import org.apache.cassandra.utils.Pair; -public interface TokenTreeBuilder extends Iterable> -{ -final static int BLOCK_BYTES = 4096; - -final static int LEAF_ENTRY_TYPE_BYTES = Short.BYTES; -final static int TOKEN_OFFSET_BYTES = LEAF_ENTRY_TYPE_BYTES; -final static int LEAF_PARTITON_OFFSET_BYTES = Long.BYTES; -final static int LEAF_ROW_OFFSET_BYTES = Long.BYTES; - -final static int LEAF_PARTITON_OFFSET_PACKED_BYTES = Integer.BYTES; -final static int LEAF_ROW_OFFSET_PACKED_BYTES = Integer.BYTES; -final static int COLLISION_ENTRY_BYTES = LEAF_PARTITON_OFFSET_BYTES + LEAF_ROW_OFFSET_BYTES; - -final static int HEADER_INFO_BYTE_BYTES = Byte.BYTES; -final static int HEADER_TOKEN_COUNT_BYTES = Short.BYTES; - -final static int ROOT_HEADER_MAGIC_SIZE = Short.BYTES; -final static int ROOT_HEADER_TOKEN_COUNT_SIZE = Long.BYTES; +import com.carrotsearch.hppc.LongSet; -// Partitioner token size in bytes -final static int TOKEN_BYTES = Long.BYTES; - -// Leaf entry size in bytes, see {@class SimpleLeafEntry} for a full description -final static int LEAF_ENTRY_BYTES = LEAF_ENTRY_TYPE_BYTES + TOKEN_BYTES + LEAF_PARTITON_OFFSET_BYTES + LEAF_ROW_OFFSET_BYTES; -// Shared header size in bytes, see {@class AbstractTreeBuilder$Header} for a full description -final static int SHARED_HEADER_BYTES = HEADER_INFO_BYTE_BYTES + HEADER_TOKEN_COUNT_BYTES + 2 * TOKEN_BYTES; -// Block header size in bytes, see {@class AbstractTreeBuilder$RootHeader} -final static int BLOCK_HEADER_BYTES = BitUtil.nextHighestPowerOfTwo(SHARED_HEADER_BYTES + ROOT_HEADER_MAGIC_SIZE + ROOT_HEADER_TOKEN_COUNT_SIZE + 2 * TOKEN_BYTES); - -// Overflow trailer capacity is currently 8 overflow items. Each overflow item consists of two longs. -final static int OVERFLOW_TRAILER_CAPACITY = 8; -final static int OVERFLOW_TRAILER_BYTES = OVERFLOW_TRAILER_CAPACITY * COLLISION_ENTRY_BYTES;; -final static int TOKENS_PER_BLOCK = (TokenTreeBuilder.BLOCK_BYTES - BLOCK_HEADER_BYTES - OVERFLOW_TRAILER_BYTES) / LEAF_ENTRY_BYTES; - -final static int LEGACY_LEAF_ENTRY_BYTES = Short.BYTES + Short.BYTES + TOKEN_BYTES + Integer.BYTES; -final static int LEGACY_TOKEN_OFFSET_BYTES = 2 * Short.BYTES; -final static byte LAST_LEAF_SHIFT = 1; - -/** - * {@code Header} size in bytes. - */ -final byte ENTRY_TYPE_MASK = 0x03; -final short AB_MAGIC = 0x5A51; -final short AC_MAGIC = 0x7C63; +public interface TokenTreeBuilder extends Iterable> +{ +int BLOCK_BYTES = 4096; +int BLOCK_HEADER_BYTES = 64; +int OVERFLOW_TRAILER_BYTES = 64; +int OVERFLOW_TRAILER_CAPACITY = OVERFLOW_TRAILER_BYTES / 8; +int TOKENS_PER_BLOCK = (BLOCK_BYTES - BLOCK_HEADER_BYTES - OVERFLOW_TRAILER_BYTES) / 16; +long MAX_OFFSET = (1L << 47) - 1; // 48 bits for (signed) offset +byte LAST_LEAF_SHIFT = 1; +byte SHARED_HEADER_BYTES = 19; +byte ENTRY_TYPE_MASK = 0x03; +short AB_MAGIC = 0x5A51; // note: ordinal positions are used here, do not change order enum EntryType { -SIMPLE, -FACTORED, -PACKED, -OVERFLOW; +SIMPLE, FACTORED, PACKED, OVERFLOW; public static EntryType of(int ordinal) { @@ -95,9 +61,9 @@ public interface TokenTreeBuilder extends Iterable> } } -void add(Long token, long partitionOffset, long rowOffset); -void add(SortedMap data); -void add(Iterator> data); +void add(Long token, long keyPosition); +void add(SortedMap data); +void add(Iterator> data); void add(TokenTreeBuilder ttb); boolean isEmpty(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/490c1c27/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java b/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java index a7b22f3..e55a806 100644 --- a/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java +++ b/src/java/org/apache/cassandra/index/sasi
[2/3] cassandra git commit: Add row offset support to SASI
http://git-wip-us.apache.org/repos/asf/cassandra/blob/7d857b46/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java b/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java index 2210964..07804d6 100644 --- a/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java +++ b/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java @@ -20,28 +20,62 @@ package org.apache.cassandra.index.sasi.disk; import java.io.IOException; import java.util.*; -import org.apache.cassandra.io.util.DataOutputPlus; -import org.apache.cassandra.utils.Pair; +import org.apache.cassandra.io.util.*; +import org.apache.cassandra.utils.*; +import org.apache.cassandra.utils.obs.BitUtil; -import com.carrotsearch.hppc.LongSet; - -public interface TokenTreeBuilder extends Iterable> +public interface TokenTreeBuilder extends Iterable> { -int BLOCK_BYTES = 4096; -int BLOCK_HEADER_BYTES = 64; -int OVERFLOW_TRAILER_BYTES = 64; -int OVERFLOW_TRAILER_CAPACITY = OVERFLOW_TRAILER_BYTES / 8; -int TOKENS_PER_BLOCK = (BLOCK_BYTES - BLOCK_HEADER_BYTES - OVERFLOW_TRAILER_BYTES) / 16; -long MAX_OFFSET = (1L << 47) - 1; // 48 bits for (signed) offset -byte LAST_LEAF_SHIFT = 1; -byte SHARED_HEADER_BYTES = 19; -byte ENTRY_TYPE_MASK = 0x03; -short AB_MAGIC = 0x5A51; +final static int BLOCK_BYTES = 4096; + +final static int LEAF_ENTRY_TYPE_BYTES = Short.BYTES; +final static int TOKEN_OFFSET_BYTES = LEAF_ENTRY_TYPE_BYTES; +final static int LEAF_PARTITON_OFFSET_BYTES = Long.BYTES; +final static int LEAF_ROW_OFFSET_BYTES = Long.BYTES; + +final static int LEAF_PARTITON_OFFSET_PACKED_BYTES = Integer.BYTES; +final static int LEAF_ROW_OFFSET_PACKED_BYTES = Integer.BYTES; +final static int COLLISION_ENTRY_BYTES = LEAF_PARTITON_OFFSET_BYTES + LEAF_ROW_OFFSET_BYTES; + +final static int HEADER_INFO_BYTE_BYTES = Byte.BYTES; +final static int HEADER_TOKEN_COUNT_BYTES = Short.BYTES; + +final static int ROOT_HEADER_MAGIC_SIZE = Short.BYTES; +final static int ROOT_HEADER_TOKEN_COUNT_SIZE = Long.BYTES; + +// Partitioner token size in bytes +final static int TOKEN_BYTES = Long.BYTES; + +// Leaf entry size in bytes, see {@class SimpleLeafEntry} for a full description +final static int LEAF_ENTRY_BYTES = LEAF_ENTRY_TYPE_BYTES + TOKEN_BYTES + LEAF_PARTITON_OFFSET_BYTES + LEAF_ROW_OFFSET_BYTES; +// Shared header size in bytes, see {@class AbstractTreeBuilder$Header} for a full description +final static int SHARED_HEADER_BYTES = HEADER_INFO_BYTE_BYTES + HEADER_TOKEN_COUNT_BYTES + 2 * TOKEN_BYTES; +// Block header size in bytes, see {@class AbstractTreeBuilder$RootHeader} +final static int BLOCK_HEADER_BYTES = BitUtil.nextHighestPowerOfTwo(SHARED_HEADER_BYTES + ROOT_HEADER_MAGIC_SIZE + ROOT_HEADER_TOKEN_COUNT_SIZE + 2 * TOKEN_BYTES); + +// Overflow trailer capacity is currently 8 overflow items. Each overflow item consists of two longs. +final static int OVERFLOW_TRAILER_CAPACITY = 8; +final static int OVERFLOW_TRAILER_BYTES = OVERFLOW_TRAILER_CAPACITY * COLLISION_ENTRY_BYTES;; +final static int TOKENS_PER_BLOCK = (TokenTreeBuilder.BLOCK_BYTES - BLOCK_HEADER_BYTES - OVERFLOW_TRAILER_BYTES) / LEAF_ENTRY_BYTES; + +final static int LEGACY_LEAF_ENTRY_BYTES = Short.BYTES + Short.BYTES + TOKEN_BYTES + Integer.BYTES; +final static int LEGACY_TOKEN_OFFSET_BYTES = 2 * Short.BYTES; +final static byte LAST_LEAF_SHIFT = 1; + +/** + * {@code Header} size in bytes. + */ +final byte ENTRY_TYPE_MASK = 0x03; +final short AB_MAGIC = 0x5A51; +final short AC_MAGIC = 0x7C63; // note: ordinal positions are used here, do not change order enum EntryType { -SIMPLE, FACTORED, PACKED, OVERFLOW; +SIMPLE, +FACTORED, +PACKED, +OVERFLOW; public static EntryType of(int ordinal) { @@ -61,9 +95,9 @@ public interface TokenTreeBuilder extends Iterable> } } -void add(Long token, long keyPosition); -void add(SortedMap data); -void add(Iterator> data); +void add(Long token, long partitionOffset, long rowOffset); +void add(SortedMap data); +void add(Iterator> data); void add(TokenTreeBuilder ttb); boolean isEmpty(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/7d857b46/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java b/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java index e55a806..a7b22f3 100644 --- a/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java +++ b/src/java/org/apache/cassandra/index/sasi/
[1/3] cassandra git commit: Add row offset support to SASI
Repository: cassandra Updated Branches: refs/heads/trunk 3c95d4731 -> 7d857b46f http://git-wip-us.apache.org/repos/asf/cassandra/blob/7d857b46/test/unit/org/apache/cassandra/index/sasi/disk/TokenTreeTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/disk/TokenTreeTest.java b/test/unit/org/apache/cassandra/index/sasi/disk/TokenTreeTest.java index 927e165..7c2498c 100644 --- a/test/unit/org/apache/cassandra/index/sasi/disk/TokenTreeTest.java +++ b/test/unit/org/apache/cassandra/index/sasi/disk/TokenTreeTest.java @@ -19,42 +19,31 @@ package org.apache.cassandra.index.sasi.disk; import java.io.File; import java.io.IOException; -import java.nio.ByteBuffer; import java.util.*; import com.google.common.collect.Iterators; import com.google.common.collect.PeekingIterator; +import com.carrotsearch.hppc.cursors.LongObjectCursor; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.db.BufferDecoratedKey; +import org.apache.cassandra.db.ClusteringComparator; import org.apache.cassandra.db.DecoratedKey; +import org.apache.cassandra.db.marshal.LongType; import org.apache.cassandra.dht.Murmur3Partitioner; import org.apache.cassandra.index.sasi.disk.TokenTreeBuilder.EntryType; -import org.apache.cassandra.index.sasi.utils.CombinedTerm; -import org.apache.cassandra.index.sasi.utils.CombinedValue; -import org.apache.cassandra.index.sasi.utils.MappedBuffer; -import org.apache.cassandra.index.sasi.utils.RangeIterator; -import org.apache.cassandra.db.marshal.LongType; -import org.apache.cassandra.index.sasi.utils.RangeUnionIterator; -import org.apache.cassandra.io.util.FileUtils; -import org.apache.cassandra.io.util.SequentialWriterOption; -import org.apache.cassandra.utils.MurmurHash; -import org.apache.cassandra.io.util.RandomAccessReader; -import org.apache.cassandra.io.util.SequentialWriter; +import org.apache.cassandra.index.sasi.utils.*; +import org.apache.cassandra.io.util.*; import junit.framework.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.apache.commons.lang3.builder.HashCodeBuilder; -import com.carrotsearch.hppc.LongOpenHashSet; -import com.carrotsearch.hppc.LongSet; -import com.carrotsearch.hppc.cursors.LongCursor; -import com.google.common.base.Function; public class TokenTreeTest { -private static final Function KEY_CONVERTER = new KeyConverter(); +private static final ClusteringComparator CLUSTERING_COMPARATOR = new ClusteringComparator(LongType.instance); @BeforeClass public static void setupDD() @@ -62,14 +51,30 @@ public class TokenTreeTest DatabaseDescriptor.daemonInitialization(); } -static LongSet singleOffset = new LongOpenHashSet() {{ add(1); }}; -static LongSet bigSingleOffset = new LongOpenHashSet() {{ add(2147521562L); }}; -static LongSet shortPackableCollision = new LongOpenHashSet() {{ add(2L); add(3L); }}; // can pack two shorts -static LongSet intPackableCollision = new LongOpenHashSet() {{ add(6L); add(((long) Short.MAX_VALUE) + 1); }}; // can pack int & short -static LongSet multiCollision = new LongOpenHashSet() {{ add(3L); add(4L); add(5L); }}; // can't pack -static LongSet unpackableCollision = new LongOpenHashSet() {{ add(((long) Short.MAX_VALUE) + 1); add(((long) Short.MAX_VALUE) + 2); }}; // can't pack +static KeyOffsets singleOffset = new KeyOffsets() {{ put(1L, KeyOffsets.asArray(10L)); }}; +static KeyOffsets bigSingleOffset = new KeyOffsets() {{ put(2147521562L, KeyOffsets.asArray(10)); }}; +static KeyOffsets shortPackableCollision = new KeyOffsets() {{ +put(2L, KeyOffsets.asArray(10)); +put(3L, KeyOffsets.asArray(10)); +}}; // can pack two shorts +static KeyOffsets intPackableCollision = new KeyOffsets() +{{ +put(6L, KeyOffsets.asArray(10)); +put(((long) Short.MAX_VALUE) + 1, KeyOffsets.asArray(10)); +}}; // can pack int & short +static KeyOffsets multiCollision = new KeyOffsets() +{{ +put(3L, KeyOffsets.asArray(10)); +put(4L, KeyOffsets.asArray(10)); +put(5L, KeyOffsets.asArray(10)); +}}; // can't pack +static KeyOffsets unpackableCollision = new KeyOffsets() +{{ +put(((long) Short.MAX_VALUE) + 1, KeyOffsets.asArray(10)); +put(((long) Short.MAX_VALUE) + 2, KeyOffsets.asArray(10)); +}}; // can't pack -final static SortedMap simpleTokenMap = new TreeMap() +final static SortedMap simpleTokenMap = new TreeMap() {{ put(1L, bigSingleOffset); put(3L, shortPackableCollision); put(4L, intPackableCollision); put(6L, singleOffset); put(9L, multiCollision); put(10L, unpackableCollision); put(12L, singleOffset); put(13L, singleOffset); @@ -81,18 +86,20 @@ public class TokenTreeTest put(121L, singleOffset); put(122L, singleOffset); put(123L, singleOffset); put(125L, singleOffset)
[3/3] cassandra git commit: Add row offset support to SASI
Add row offset support to SASI Patch by Alex Petrov; reviewed by Pavel Yaskevich for CASSANDRA-11990 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7d857b46 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7d857b46 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7d857b46 Branch: refs/heads/trunk Commit: 7d857b46fb070548bf5e5f6ff81db588f08ec22a Parents: 3c95d47 Author: Alex Petrov Authored: Sun Jun 26 18:21:08 2016 +0200 Committer: Pavel Yaskevich Committed: Mon Sep 5 22:17:11 2016 -0700 -- CHANGES.txt | 1 + .../org/apache/cassandra/db/ColumnIndex.java| 6 +- .../apache/cassandra/index/sasi/KeyFetcher.java | 98 +++ .../apache/cassandra/index/sasi/SASIIndex.java | 11 +- .../cassandra/index/sasi/SASIIndexBuilder.java | 13 +- .../cassandra/index/sasi/SSTableIndex.java | 41 +-- .../cassandra/index/sasi/conf/ColumnIndex.java | 4 +- .../index/sasi/conf/view/RangeTermTree.java | 4 + .../sasi/disk/AbstractTokenTreeBuilder.java | 276 ++ .../cassandra/index/sasi/disk/Descriptor.java | 33 ++- .../sasi/disk/DynamicTokenTreeBuilder.java | 59 ++-- .../cassandra/index/sasi/disk/KeyOffsets.java | 115 .../cassandra/index/sasi/disk/OnDiskIndex.java | 12 +- .../index/sasi/disk/OnDiskIndexBuilder.java | 16 +- .../index/sasi/disk/PerSSTableIndexWriter.java | 13 +- .../cassandra/index/sasi/disk/RowKey.java | 108 +++ .../index/sasi/disk/StaticTokenTreeBuilder.java | 18 +- .../apache/cassandra/index/sasi/disk/Token.java | 10 +- .../cassandra/index/sasi/disk/TokenTree.java| 288 --- .../index/sasi/disk/TokenTreeBuilder.java | 72 +++-- .../index/sasi/memory/IndexMemtable.java| 8 +- .../index/sasi/memory/KeyRangeIterator.java | 49 ++-- .../cassandra/index/sasi/memory/MemIndex.java | 4 +- .../index/sasi/memory/SkipListMemIndex.java | 12 +- .../index/sasi/memory/TrieMemIndex.java | 45 ++- .../index/sasi/plan/QueryController.java| 49 ++-- .../cassandra/index/sasi/plan/QueryPlan.java| 174 --- .../io/sstable/format/SSTableFlushObserver.java | 5 + .../io/sstable/format/SSTableReader.java| 33 ++- .../io/sstable/format/big/BigTableWriter.java | 8 +- .../org/apache/cassandra/utils/obs/BitUtil.java | 2 +- test/data/legacy-sasi/on-disk-sa-int2.db| Bin 0 -> 12312 bytes .../cassandra/index/sasi/SASIIndexTest.java | 25 +- .../index/sasi/disk/KeyOffsetsTest.java | 48 .../index/sasi/disk/OnDiskIndexTest.java| 216 +++--- .../sasi/disk/PerSSTableIndexWriterTest.java| 112 ++-- .../index/sasi/disk/TokenTreeTest.java | 208 +++--- .../index/sasi/plan/OperationTest.java | 2 +- .../index/sasi/utils/KeyConverter.java | 69 + .../index/sasi/utils/LongIterator.java | 8 +- .../sasi/utils/RangeUnionIteratorTest.java | 17 ++ 41 files changed, 1547 insertions(+), 745 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/7d857b46/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index c466dfe..28c2d84 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.10 + * Add row offset support to SASI (CASSANDRA-11990) * Cleanup uses of AlterTableStatementColumn (CASSANDRA-12567) * Add keep-alive to streaming (CASSANDRA-11841) * Tracing payload is passed through newSession(..) (CASSANDRA-11706) http://git-wip-us.apache.org/repos/asf/cassandra/blob/7d857b46/src/java/org/apache/cassandra/db/ColumnIndex.java -- diff --git a/src/java/org/apache/cassandra/db/ColumnIndex.java b/src/java/org/apache/cassandra/db/ColumnIndex.java index 1116cc2..1f39927 100644 --- a/src/java/org/apache/cassandra/db/ColumnIndex.java +++ b/src/java/org/apache/cassandra/db/ColumnIndex.java @@ -121,9 +121,10 @@ public class ColumnIndex { Row staticRow = iterator.staticRow(); +long startPosition = currentPosition(); UnfilteredSerializer.serializer.serializeStaticRow(staticRow, header, writer, version); if (!observers.isEmpty()) -observers.forEach((o) -> o.nextUnfilteredCluster(staticRow)); +observers.forEach((o) -> o.nextUnfilteredCluster(staticRow, startPosition)); } } @@ -232,6 +233,7 @@ public class ColumnIndex private void add(Unfiltered unfiltered) throws IOException { +final long origPos = writer.position(); long pos = currentPosition(); if (firstClustering == null) @@ -
cassandra git commit: Fix rebuild of SASI indexes with existing index files
cassandra/index/sasi/conf/DataTracker.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/conf/DataTracker.java b/src/java/org/apache/cassandra/index/sasi/conf/DataTracker.java index 9475d12..af8e07d 100644 --- a/src/java/org/apache/cassandra/index/sasi/conf/DataTracker.java +++ b/src/java/org/apache/cassandra/index/sasi/conf/DataTracker.java @@ -92,6 +92,25 @@ public class DataTracker return false; } +public void dropData(Collection sstablesToRebuild) +{ +View currentView = view.get(); +if (currentView == null) +return; + +Set toRemove = new HashSet<>(sstablesToRebuild); +for (SSTableIndex index : currentView) +{ +SSTableReader sstable = index.getSSTable(); +if (!sstablesToRebuild.contains(sstable)) +continue; + +index.markObsolete(); +} + +update(toRemove, Collections.emptyList()); +} + public void dropData(long truncateUntil) { View currentView = view.get(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/fa113167/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java index e2797e2..0b4e9e2 100644 --- a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java +++ b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java @@ -17,7 +17,14 @@ */ package org.apache.cassandra.index.sasi; +import java.io.File; +import java.io.FileWriter; +import java.io.Writer; import java.nio.ByteBuffer; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.attribute.BasicFileAttributes; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -37,6 +44,7 @@ import org.apache.cassandra.db.*; import org.apache.cassandra.db.filter.ColumnFilter; import org.apache.cassandra.db.filter.DataLimits; import org.apache.cassandra.db.filter.RowFilter; +import org.apache.cassandra.db.lifecycle.SSTableSet; import org.apache.cassandra.db.marshal.*; import org.apache.cassandra.db.partitions.PartitionUpdate; import org.apache.cassandra.db.partitions.UnfilteredPartitionIterator; @@ -52,6 +60,8 @@ import org.apache.cassandra.index.sasi.exceptions.TimeQuotaExceededException; import org.apache.cassandra.index.sasi.memory.IndexMemtable; import org.apache.cassandra.index.sasi.plan.QueryController; import org.apache.cassandra.index.sasi.plan.QueryPlan; +import org.apache.cassandra.io.sstable.SSTable; +import org.apache.cassandra.io.sstable.format.big.BigFormat; import org.apache.cassandra.schema.IndexMetadata; import org.apache.cassandra.schema.KeyspaceMetadata; import org.apache.cassandra.schema.KeyspaceParams; @@ -1860,6 +1870,45 @@ public class SASIIndexTest } @Test +public void testTableRebuild() throws Exception +{ +ColumnFamilyStore store = Keyspace.open(KS_NAME).getColumnFamilyStore(CLUSTERING_CF_NAME_1); + +executeCQL(CLUSTERING_CF_NAME_1, "INSERT INTO %s.%s (name, nickname, location, age, height, score) VALUES (?, ?, ?, ?, ?, ?)", "Pavel", "xedin", "US", 27, 183, 1.0); +executeCQL(CLUSTERING_CF_NAME_1, "INSERT INTO %s.%s (name, location, age, height, score) VALUES (?, ?, ?, ?, ?)", "Pavel", "BY", 28, 182, 2.0); +executeCQL(CLUSTERING_CF_NAME_1, "INSERT INTO %s.%s (name, nickname, location, age, height, score) VALUES (?, ?, ?, ?, ?, ?)", "Jordan", "jrwest", "US", 27, 182, 1.0); + +store.forceBlockingFlush(); + +SSTable ssTable = store.getSSTables(SSTableSet.LIVE).iterator().next(); +Path path = FileSystems.getDefault().getPath(ssTable.getFilename().replace("-Data", "-SI_age")); + +// Overwrite index file with garbage +Writer writer = new FileWriter(path.toFile(), false); +writer.write("garbage"); +writer.close(); +long size1 = Files.readAttributes(path, BasicFileAttributes.class).size(); + +// Trying to query the corrupted index file yields no results +Assert.assertTrue(executeCQL(CLUSTERING_CF_NAME_1, "SELECT * FROM %s.%s WHERE age = 27 AND name = 'Pavel'").isEmpty()); + +// Rebuld index +store.rebuildSecondaryIndex("age"); + +long size2 = Files.readAttributes(path, BasicFileAttributes.class).size(); +// Make sure that garbage was overwriten +Assert.assertTrue(size2 > size1); + +// Make sure that indexes work for rebuit tables +CQLTester.assertRows(executeCQL(CLUSTERING_C
cassandra git commit: Fix clustering indexes in presence of static columns in SASI
Repository: cassandra Updated Branches: refs/heads/trunk 55a45b58d -> 5c6cdc60a Fix clustering indexes in presence of static columns in SASI Patch by Alex Petrov; reviewed by Pavel Yaskevich for CASSANDRA-12378 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5c6cdc60 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5c6cdc60 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5c6cdc60 Branch: refs/heads/trunk Commit: 5c6cdc60a7c05bc82f5eae848eeb9ab99ff6a53f Parents: 55a45b5 Author: Alex Petrov Authored: Fri Aug 5 16:12:34 2016 +0200 Committer: Pavel Yaskevich Committed: Wed Aug 17 14:45:02 2016 -0700 -- CHANGES.txt | 1 + .../org/apache/cassandra/index/sasi/conf/ColumnIndex.java | 4 test/unit/org/apache/cassandra/SchemaLoader.java | 1 + .../org/apache/cassandra/index/sasi/SASIIndexTest.java| 10 +- 4 files changed, 11 insertions(+), 5 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/5c6cdc60/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index d5e220c..fa7ec69 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.10 + * Fix clustering indexes in presence of static columns in SASI (CASSANDRA-12378) * Fix queries on columns with reversed type on SASI indexes (CASSANDRA-12223) * Added slow query log (CASSANDRA-12403) * Count full coordinated request against timeout (CASSANDRA-12256) http://git-wip-us.apache.org/repos/asf/cassandra/blob/5c6cdc60/src/java/org/apache/cassandra/index/sasi/conf/ColumnIndex.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/conf/ColumnIndex.java b/src/java/org/apache/cassandra/index/sasi/conf/ColumnIndex.java index 3f268e3..440d475 100644 --- a/src/java/org/apache/cassandra/index/sasi/conf/ColumnIndex.java +++ b/src/java/org/apache/cassandra/index/sasi/conf/ColumnIndex.java @@ -232,6 +232,10 @@ public class ColumnIndex switch (column.kind) { case CLUSTERING: +// skip indexing of static clustering when regular column is indexed +if (row.isStatic()) +return null; + return row.clustering().get(column.position()); // treat static cell retrieval the same was as regular http://git-wip-us.apache.org/repos/asf/cassandra/blob/5c6cdc60/test/unit/org/apache/cassandra/SchemaLoader.java -- diff --git a/test/unit/org/apache/cassandra/SchemaLoader.java b/test/unit/org/apache/cassandra/SchemaLoader.java index 81d25b9..c178ee0 100644 --- a/test/unit/org/apache/cassandra/SchemaLoader.java +++ b/test/unit/org/apache/cassandra/SchemaLoader.java @@ -596,6 +596,7 @@ public class SchemaLoader .addClusteringColumn("age", Int32Type.instance) .addRegularColumn("height", Int32Type.instance) .addRegularColumn("score", DoubleType.instance) + .addStaticColumn("nickname", UTF8Type.instance) .build(); Indexes indexes = cfm.getIndexes(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/5c6cdc60/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java index da1d0e3..e2797e2 100644 --- a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java +++ b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java @@ -1661,9 +1661,9 @@ public class SASIIndexTest { ColumnFamilyStore store = Keyspace.open(KS_NAME).getColumnFamilyStore(CLUSTERING_CF_NAME_1); -executeCQL(CLUSTERING_CF_NAME_1, "INSERT INTO %s.%s (name, location, age, height, score) VALUES (?, ?, ?, ?, ?)", "Pavel", "US", 27, 183, 1.0); -executeCQL(CLUSTERING_CF_NAME_1, "INSERT INTO %s.%s (name, location, age, height, score) VALUES (?, ?, ?, ?, ?)", "Pavel", "BY", 28, 182, 2.0); -executeCQL(CLUSTERING_CF_NAME_1 ,"INSERT INTO %s.%s (name, location, age, height, score) VALUES (?, ?, ?, ?, ?)", "Jordan", "US", 27, 182, 1.0); +executeCQL(CLUSTERING_CF_NAME_1, "INSERT INTO %s.%s (name, nickname, location, age, height, score) VALUES
cassandra git commit: Fix queries on columns with reversed type on SASI indexes
Repository: cassandra Updated Branches: refs/heads/trunk d4d71cd33 -> 55a45b58d Fix queries on columns with reversed type on SASI indexes Patch by Alex Petrov; reviewed by xedin for CASSANDRA-12223 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/55a45b58 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/55a45b58 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/55a45b58 Branch: refs/heads/trunk Commit: 55a45b58d678eb919fa6b5a4c224fb43791e0234 Parents: d4d71cd Author: Alex Petrov Authored: Fri Aug 5 16:01:50 2016 +0200 Committer: Pavel Yaskevich Committed: Wed Aug 17 14:40:17 2016 -0700 -- CHANGES.txt | 1 + .../cassandra/index/sasi/plan/Expression.java | 21 ++-- .../cassandra/index/sasi/SASIIndexTest.java | 54 3 files changed, 72 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/55a45b58/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 51b87db..d5e220c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.10 + * Fix queries on columns with reversed type on SASI indexes (CASSANDRA-12223) * Added slow query log (CASSANDRA-12403) * Count full coordinated request against timeout (CASSANDRA-12256) * Allow TTL with null value on insert and update (CASSANDRA-12216) http://git-wip-us.apache.org/repos/asf/cassandra/blob/55a45b58/src/java/org/apache/cassandra/index/sasi/plan/Expression.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/plan/Expression.java b/src/java/org/apache/cassandra/index/sasi/plan/Expression.java index cc156ee..93f1938 100644 --- a/src/java/org/apache/cassandra/index/sasi/plan/Expression.java +++ b/src/java/org/apache/cassandra/index/sasi/plan/Expression.java @@ -166,17 +166,30 @@ public class Expression break; case LTE: -upperInclusive = true; +if (index.getDefinition().isReversedType()) +lowerInclusive = true; +else +upperInclusive = true; case LT: operation = Op.RANGE; -upper = new Bound(value, upperInclusive); +if (index.getDefinition().isReversedType()) +lower = new Bound(value, lowerInclusive); +else +upper = new Bound(value, upperInclusive); break; case GTE: -lowerInclusive = true; +if (index.getDefinition().isReversedType()) +upperInclusive = true; +else +lowerInclusive = true; case GT: operation = Op.RANGE; -lower = new Bound(value, lowerInclusive); +if (index.getDefinition().isReversedType()) +upper = new Bound(value, upperInclusive); +else +lower = new Bound(value, lowerInclusive); + break; } http://git-wip-us.apache.org/repos/asf/cassandra/blob/55a45b58/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java index 47e3895..da1d0e3 100644 --- a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java +++ b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java @@ -2119,6 +2119,60 @@ public class SASIIndexTest } @Test +public void testConditionalsWithReversedType() +{ +final String TABLE_NAME = "reversed_clustering"; + +QueryProcessor.executeOnceInternal(String.format("CREATE TABLE IF NOT EXISTS %s.%s (pk text, ck int, v int, PRIMARY KEY (pk, ck)) " + + "WITH CLUSTERING ORDER BY (ck DESC);", KS_NAME, TABLE_NAME)); +QueryProcessor.executeOnceInternal(String.format("CREATE CUSTOM INDEX ON %s.%s (ck) USING 'org.apache.cassandra.index.sasi.SASIIndex'", KS_NAME, TABLE_NAME)); +QueryProcessor.executeOnceInternal(String.format("CREATE CUSTOM INDEX ON %s.%s (v) USING 'org.apache.cassandra.index.sasi.SASIIndex'", KS_NAME, TABLE_NAME)); + +QueryProcessor.executeOnceInternal(String.format("INSERT INTO %s.%s (pk, ck, v) VALUES ('Alex', 1, 1);", KS_NAME, TABLE_NAME)); +QueryProcessor.executeOnceIntern
[2/2] cassandra git commit: Merge branch cassandra-3.9 into trunk
Merge branch cassandra-3.9 into trunk Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/71f3c91d Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/71f3c91d Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/71f3c91d Branch: refs/heads/trunk Commit: 71f3c91d142daf10fbd9d1e99d5e111d4be8bf96 Parents: 73b5cab 7107646 Author: Pavel Yaskevich Authored: Mon Jul 4 21:26:29 2016 -0700 Committer: Pavel Yaskevich Committed: Mon Jul 4 21:26:29 2016 -0700 -- CHANGES.txt | 1 + .../cassandra/index/sasi/disk/OnDiskIndex.java | 7 .../cassandra/index/sasi/plan/Expression.java | 11 -- .../unit/org/apache/cassandra/SchemaLoader.java | 35 +++ .../cassandra/index/sasi/SASIIndexTest.java | 30 +++- .../index/sasi/disk/OnDiskIndexTest.java| 36 6 files changed, 108 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/71f3c91d/CHANGES.txt -- diff --cc CHANGES.txt index 8726a45,68854b3..290a2d1 --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -1,7 -1,5 +1,8 @@@ +3.10 + * Remove pre-startup check for open JMX port (CASSANDRA-12074) + 3.9 + * Fix SASI PREFIX search in CONTAINS mode with partial terms (CASSANDRA-12073) * Increase size of flushExecutor thread pool (CASSANDRA-12071) Merged from 3.0: * Avoid digest mismatch with empty but static rows (CASSANDRA-12090)
cassandra git commit: Fix SASI PREFIX search in CONTAINS mode with partial terms
Repository: cassandra Updated Branches: refs/heads/cassandra-3.9 0702e4580 -> 7107646ac Fix SASI PREFIX search in CONTAINS mode with partial terms patch by doanduyhai; reviewed by xedin for CASSANDRA-12073 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7107646a Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7107646a Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7107646a Branch: refs/heads/cassandra-3.9 Commit: 7107646ace81fe8f9e1de1e87c5dc4cdfd9f6607 Parents: 0702e45 Author: Pavel Yaskevich Authored: Mon Jul 4 14:14:59 2016 -0700 Committer: Pavel Yaskevich Committed: Mon Jul 4 21:24:20 2016 -0700 -- CHANGES.txt | 1 + .../cassandra/index/sasi/disk/OnDiskIndex.java | 7 .../cassandra/index/sasi/plan/Expression.java | 11 -- .../unit/org/apache/cassandra/SchemaLoader.java | 35 +++ .../cassandra/index/sasi/SASIIndexTest.java | 30 +++- .../index/sasi/disk/OnDiskIndexTest.java| 36 6 files changed, 108 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/7107646a/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index ee5a4af..68854b3 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.9 + * Fix SASI PREFIX search in CONTAINS mode with partial terms (CASSANDRA-12073) * Increase size of flushExecutor thread pool (CASSANDRA-12071) Merged from 3.0: * Avoid digest mismatch with empty but static rows (CASSANDRA-12090) http://git-wip-us.apache.org/repos/asf/cassandra/blob/7107646a/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java b/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java index 80092ef..4d43cd9 100644 --- a/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java +++ b/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java @@ -756,6 +756,13 @@ public class OnDiskIndex implements Iterable, Closeable { DataTerm currentTerm = currentBlock.getTerm(nextOffset()); +// we need to step over all of the partial terms, in PREFIX mode, +// encountered by the query until upper-bound tells us to stop +if (e.getOp() == Op.PREFIX && currentTerm.isPartial()) +continue; + +// haven't reached the start of the query range yet, let's +// keep skip the current term until lower bound is satisfied if (checkLower && !e.isLowerSatisfiedBy(currentTerm)) continue; http://git-wip-us.apache.org/repos/asf/cassandra/blob/7107646a/src/java/org/apache/cassandra/index/sasi/plan/Expression.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/plan/Expression.java b/src/java/org/apache/cassandra/index/sasi/plan/Expression.java index ce420d1..cc156ee 100644 --- a/src/java/org/apache/cassandra/index/sasi/plan/Expression.java +++ b/src/java/org/apache/cassandra/index/sasi/plan/Expression.java @@ -322,9 +322,6 @@ public class Expression if (!hasLower()) return true; -if (nonMatchingPartial(term)) -return false; - int cmp = term.compareTo(validator, lower.value, false); return cmp > 0 || cmp == 0 && lower.inclusive; } @@ -334,9 +331,6 @@ public class Expression if (!hasUpper()) return true; -if (nonMatchingPartial(term)) -return false; - int cmp = term.compareTo(validator, upper.value, false); return cmp < 0 || cmp == 0 && upper.inclusive; } @@ -385,11 +379,6 @@ public class Expression && exclusions.equals(o.exclusions); } -private boolean nonMatchingPartial(OnDiskIndex.DataTerm term) -{ -return term.isPartial() && operation == Op.PREFIX; -} - public static class Bound { public final ByteBuffer value; http://git-wip-us.apache.org/repos/asf/cassandra/blob/7107646a/test/unit/org/apache/cassandra/SchemaLoader.java -- diff --git a/test/unit/org/apache/cassandra/SchemaLoader.java b/test/unit/org/apache/cassandra/SchemaLoader.java index 6aea343..28fc8d5 100644 --- a/test/unit/org/apache/cassandra/SchemaLoader.java +++ b/test/unit/org/apache/cassandra/SchemaLoader.java
[1/2] cassandra git commit: Fix SASI PREFIX search in CONTAINS mode with partial terms
Repository: cassandra Updated Branches: refs/heads/trunk 73b5cabbc -> 71f3c91d1 Fix SASI PREFIX search in CONTAINS mode with partial terms patch by doanduyhai; reviewed by xedin for CASSANDRA-12073 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7107646a Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7107646a Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7107646a Branch: refs/heads/trunk Commit: 7107646ace81fe8f9e1de1e87c5dc4cdfd9f6607 Parents: 0702e45 Author: Pavel Yaskevich Authored: Mon Jul 4 14:14:59 2016 -0700 Committer: Pavel Yaskevich Committed: Mon Jul 4 21:24:20 2016 -0700 -- CHANGES.txt | 1 + .../cassandra/index/sasi/disk/OnDiskIndex.java | 7 .../cassandra/index/sasi/plan/Expression.java | 11 -- .../unit/org/apache/cassandra/SchemaLoader.java | 35 +++ .../cassandra/index/sasi/SASIIndexTest.java | 30 +++- .../index/sasi/disk/OnDiskIndexTest.java| 36 6 files changed, 108 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/7107646a/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index ee5a4af..68854b3 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.9 + * Fix SASI PREFIX search in CONTAINS mode with partial terms (CASSANDRA-12073) * Increase size of flushExecutor thread pool (CASSANDRA-12071) Merged from 3.0: * Avoid digest mismatch with empty but static rows (CASSANDRA-12090) http://git-wip-us.apache.org/repos/asf/cassandra/blob/7107646a/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java b/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java index 80092ef..4d43cd9 100644 --- a/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java +++ b/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java @@ -756,6 +756,13 @@ public class OnDiskIndex implements Iterable, Closeable { DataTerm currentTerm = currentBlock.getTerm(nextOffset()); +// we need to step over all of the partial terms, in PREFIX mode, +// encountered by the query until upper-bound tells us to stop +if (e.getOp() == Op.PREFIX && currentTerm.isPartial()) +continue; + +// haven't reached the start of the query range yet, let's +// keep skip the current term until lower bound is satisfied if (checkLower && !e.isLowerSatisfiedBy(currentTerm)) continue; http://git-wip-us.apache.org/repos/asf/cassandra/blob/7107646a/src/java/org/apache/cassandra/index/sasi/plan/Expression.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/plan/Expression.java b/src/java/org/apache/cassandra/index/sasi/plan/Expression.java index ce420d1..cc156ee 100644 --- a/src/java/org/apache/cassandra/index/sasi/plan/Expression.java +++ b/src/java/org/apache/cassandra/index/sasi/plan/Expression.java @@ -322,9 +322,6 @@ public class Expression if (!hasLower()) return true; -if (nonMatchingPartial(term)) -return false; - int cmp = term.compareTo(validator, lower.value, false); return cmp > 0 || cmp == 0 && lower.inclusive; } @@ -334,9 +331,6 @@ public class Expression if (!hasUpper()) return true; -if (nonMatchingPartial(term)) -return false; - int cmp = term.compareTo(validator, upper.value, false); return cmp < 0 || cmp == 0 && upper.inclusive; } @@ -385,11 +379,6 @@ public class Expression && exclusions.equals(o.exclusions); } -private boolean nonMatchingPartial(OnDiskIndex.DataTerm term) -{ -return term.isPartial() && operation == Op.PREFIX; -} - public static class Bound { public final ByteBuffer value; http://git-wip-us.apache.org/repos/asf/cassandra/blob/7107646a/test/unit/org/apache/cassandra/SchemaLoader.java -- diff --git a/test/unit/org/apache/cassandra/SchemaLoader.java b/test/unit/org/apache/cassandra/SchemaLoader.java index 6aea343..28fc8d5 100644 --- a/test/unit/org/apache/cassandra/SchemaLoader.java +++ b/test/unit/org/apache/cassandra/SchemaLoader.java
cassandra git commit: Correct english word stemming test and add a test for french
Repository: cassandra Updated Branches: refs/heads/trunk f1cabcade -> eb82861c8 Correct english word stemming test and add a test for french patch by doanduyhai; reviewed by xedin for CASSANDRA-12078 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/eb82861c Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/eb82861c Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/eb82861c Branch: refs/heads/trunk Commit: eb82861c8d4c497d64b5e61a1606bdd270e8e109 Parents: f1cabca Author: Pavel Yaskevich Authored: Sun Jun 26 01:48:23 2016 -0700 Committer: Pavel Yaskevich Committed: Sun Jun 26 01:50:32 2016 -0700 -- .../sasi/analyzer/filter/StemmingFilters.java | 2 +- .../french_skip_stop_words_before_stemming.txt | 1 + .../sasi/analyzer/StandardAnalyzerTest.java | 33 +++- 3 files changed, 34 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/eb82861c/src/java/org/apache/cassandra/index/sasi/analyzer/filter/StemmingFilters.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/analyzer/filter/StemmingFilters.java b/src/java/org/apache/cassandra/index/sasi/analyzer/filter/StemmingFilters.java index 9e098d1..cb840a8 100644 --- a/src/java/org/apache/cassandra/index/sasi/analyzer/filter/StemmingFilters.java +++ b/src/java/org/apache/cassandra/index/sasi/analyzer/filter/StemmingFilters.java @@ -37,7 +37,7 @@ public class StemmingFilters public String process(String input) throws Exception { -if (stemmer == null) +if (input == null || stemmer == null) return input; stemmer.setCurrent(input); return (stemmer.stem()) ? stemmer.getCurrent() : input; http://git-wip-us.apache.org/repos/asf/cassandra/blob/eb82861c/test/resources/tokenization/french_skip_stop_words_before_stemming.txt -- diff --git a/test/resources/tokenization/french_skip_stop_words_before_stemming.txt b/test/resources/tokenization/french_skip_stop_words_before_stemming.txt new file mode 100644 index 000..59a1c23 --- /dev/null +++ b/test/resources/tokenization/french_skip_stop_words_before_stemming.txt @@ -0,0 +1 @@ +"La danse sous la pluie" est une chanson connue \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cassandra/blob/eb82861c/test/unit/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzerTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzerTest.java b/test/unit/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzerTest.java index e307512..7a88a3d 100644 --- a/test/unit/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzerTest.java +++ b/test/unit/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzerTest.java @@ -25,6 +25,8 @@ import java.util.Locale; import org.junit.Test; +import org.apache.cassandra.serializers.UTF8Serializer; + import static org.junit.Assert.assertEquals; public class StandardAnalyzerTest @@ -151,7 +153,36 @@ public class StandardAnalyzerTest while (tokenizer.hasNext()) tokens.add(tokenizer.next()); -assertEquals(40249, tokens.size()); +assertEquals(37739, tokens.size()); +} + +@Test +public void testSkipStopWordBeforeStemmingFrench() throws Exception +{ +InputStream is = StandardAnalyzerTest.class.getClassLoader() + .getResourceAsStream("tokenization/french_skip_stop_words_before_stemming.txt"); + +StandardTokenizerOptions options = new StandardTokenizerOptions.OptionsBuilder().stemTerms(true) +.ignoreStopTerms(true).useLocale(Locale.FRENCH) +.alwaysLowerCaseTerms(true).build(); +StandardAnalyzer tokenizer = new StandardAnalyzer(); +tokenizer.init(options); + +List tokens = new ArrayList<>(); +List words = new ArrayList<>(); +tokenizer.reset(is); +while (tokenizer.hasNext()) +{ +final ByteBuffer nextToken = tokenizer.next(); +tokens.add(nextToken); + words.add(UTF8Serializer.instance.deserialize(nextToken.duplicate())); +} + +assertEquals(4, tokens.size()); +assertEquals("dans", words.get(0)); +assertEquals("plui", words.get(1)); +assertEquals("chanson", words.get(2)); +assertEquals("connu", words.get(3)); } @Test
cassandra git commit: Move skip_stop_words filter before stemming
Repository: cassandra Updated Branches: refs/heads/trunk ff8d078c5 -> c253f0806 Move skip_stop_words filter before stemming patch by doanduyhai; reviewed by xedin for CASSANDRA-12078 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c253f080 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c253f080 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c253f080 Branch: refs/heads/trunk Commit: c253f0806779cc09fa03fa638d09d1da1ffba70b Parents: ff8d078 Author: Pavel Yaskevich Authored: Thu Jun 23 22:10:53 2016 -0700 Committer: Pavel Yaskevich Committed: Thu Jun 23 22:10:53 2016 -0700 -- CHANGES.txt | 1 + .../apache/cassandra/index/sasi/analyzer/StandardAnalyzer.java | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/c253f080/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index eec4d66..d40cab4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.8 + * Move skip_stop_words filter before stemming (CASSANDRA-12078) * Support seek() in EncryptedFileSegmentInputStream (CASSANDRA-11957) * SSTable tools mishandling LocalPartitioner (CASSANDRA-12002) * When SEPWorker assigned work, set thread name to match pool (CASSANDRA-11966) http://git-wip-us.apache.org/repos/asf/cassandra/blob/c253f080/src/java/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzer.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzer.java b/src/java/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzer.java index 5e09b9f..069164c 100644 --- a/src/java/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzer.java +++ b/src/java/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzer.java @@ -128,10 +128,10 @@ public class StandardAnalyzer extends AbstractAnalyzer builder = builder.add("to_lower", new BasicResultFilters.LowerCase()); if (!options.isCaseSensitive() && options.shouldUpperCaseTerms()) builder = builder.add("to_upper", new BasicResultFilters.UpperCase()); -if (options.shouldStemTerms()) -builder = builder.add("term_stemming", new StemmingFilters.DefaultStemmingFilter(options.getLocale())); if (options.shouldIgnoreStopTerms()) builder = builder.add("skip_stop_words", new StopWordFilters.DefaultStopWordFilter(options.getLocale())); +if (options.shouldStemTerms()) +builder = builder.add("term_stemming", new StemmingFilters.DefaultStemmingFilter(options.getLocale())); return builder.build(); }
[2/3] cassandra git commit: Add uncompressed chunk cache for RandomAccessReader
http://git-wip-us.apache.org/repos/asf/cassandra/blob/30bb255e/src/java/org/apache/cassandra/io/util/CompressedSegmentedFile.java -- diff --git a/src/java/org/apache/cassandra/io/util/CompressedSegmentedFile.java b/src/java/org/apache/cassandra/io/util/CompressedSegmentedFile.java index 16f791a..7365d40 100644 --- a/src/java/org/apache/cassandra/io/util/CompressedSegmentedFile.java +++ b/src/java/org/apache/cassandra/io/util/CompressedSegmentedFile.java @@ -17,49 +17,61 @@ */ package org.apache.cassandra.io.util; -import com.google.common.util.concurrent.RateLimiter; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.concurrent.ThreadLocalRandom; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.primitives.Ints; +import org.apache.cassandra.cache.ChunkCache; import org.apache.cassandra.config.Config; +import org.apache.cassandra.config.Config.DiskAccessMode; +import org.apache.cassandra.io.compress.*; +import org.apache.cassandra.io.sstable.CorruptSSTableException; import org.apache.cassandra.config.DatabaseDescriptor; -import org.apache.cassandra.io.compress.CompressedRandomAccessReader; -import org.apache.cassandra.io.compress.CompressedSequentialWriter; -import org.apache.cassandra.io.compress.CompressionMetadata; -import org.apache.cassandra.utils.JVMStabilityInspector; import org.apache.cassandra.utils.concurrent.Ref; public class CompressedSegmentedFile extends SegmentedFile implements ICompressedFile { -private static final Logger logger = LoggerFactory.getLogger(CompressedSegmentedFile.class); -private static final boolean useMmap = DatabaseDescriptor.getDiskAccessMode() == Config.DiskAccessMode.mmap; - public final CompressionMetadata metadata; -private final MmappedRegions regions; -public CompressedSegmentedFile(ChannelProxy channel, int bufferSize, CompressionMetadata metadata) +public CompressedSegmentedFile(ChannelProxy channel, CompressionMetadata metadata, Config.DiskAccessMode mode) { this(channel, - bufferSize, metadata, - useMmap + mode == DiskAccessMode.mmap ? MmappedRegions.map(channel, metadata) : null); } -public CompressedSegmentedFile(ChannelProxy channel, int bufferSize, CompressionMetadata metadata, MmappedRegions regions) +public CompressedSegmentedFile(ChannelProxy channel, CompressionMetadata metadata, MmappedRegions regions) +{ +this(channel, metadata, regions, createRebufferer(channel, metadata, regions)); +} + +private static RebuffererFactory createRebufferer(ChannelProxy channel, CompressionMetadata metadata, MmappedRegions regions) +{ +return ChunkCache.maybeWrap(chunkReader(channel, metadata, regions)); +} + +public static ChunkReader chunkReader(ChannelProxy channel, CompressionMetadata metadata, MmappedRegions regions) +{ +return regions != null + ? new Mmap(channel, metadata, regions) + : new Standard(channel, metadata); +} + +public CompressedSegmentedFile(ChannelProxy channel, CompressionMetadata metadata, MmappedRegions regions, RebuffererFactory rebufferer) { -super(new Cleanup(channel, metadata, regions), channel, bufferSize, metadata.dataLength, metadata.compressedFileLength); +super(new Cleanup(channel, metadata, regions, rebufferer), channel, rebufferer, metadata.compressedFileLength); this.metadata = metadata; -this.regions = regions; } private CompressedSegmentedFile(CompressedSegmentedFile copy) { super(copy); this.metadata = copy.metadata; -this.regions = copy.regions; } public ChannelProxy channel() @@ -67,33 +79,21 @@ public class CompressedSegmentedFile extends SegmentedFile implements ICompresse return channel; } -public MmappedRegions regions() -{ -return regions; -} - private static final class Cleanup extends SegmentedFile.Cleanup { final CompressionMetadata metadata; -private final MmappedRegions regions; -protected Cleanup(ChannelProxy channel, CompressionMetadata metadata, MmappedRegions regions) +protected Cleanup(ChannelProxy channel, CompressionMetadata metadata, MmappedRegions regions, ReaderFileProxy rebufferer) { -super(channel); +super(channel, rebufferer); this.metadata = metadata; -this.regions = regions; } public void tidy() { -Throwable err = regions == null ? null : regions.close(null); -if (err != null) +if (ChunkCache.instance != null) { -JVMStabilityInspector.inspectThrowable(err);
[1/3] cassandra git commit: Add uncompressed chunk cache for RandomAccessReader
Repository: cassandra Updated Branches: refs/heads/trunk 16e350753 -> 30bb255ec http://git-wip-us.apache.org/repos/asf/cassandra/blob/30bb255e/test/unit/org/apache/cassandra/cql3/validation/entities/FrozenCollectionsTest.java -- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/FrozenCollectionsTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/FrozenCollectionsTest.java index 4c7c135..4c52ed2 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/FrozenCollectionsTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/FrozenCollectionsTest.java @@ -41,10 +41,12 @@ import static org.junit.Assert.assertEquals; public class FrozenCollectionsTest extends CQLTester { @BeforeClass -public static void setUpClass() +public static void setUpClass() // overrides CQLTester.setUpClass() { // Selecting partitioner for a table is not exposed on CREATE TABLE. StorageService.instance.setPartitionerUnsafe(ByteOrderedPartitioner.instance); + +prepareServer(); } @Test http://git-wip-us.apache.org/repos/asf/cassandra/blob/30bb255e/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java -- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java index 5501561..2bffb09 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java @@ -29,10 +29,12 @@ import org.apache.cassandra.service.StorageService; public class UserTypesTest extends CQLTester { @BeforeClass -public static void setUpClass() +public static void setUpClass() // overrides CQLTester.setUpClass() { // Selecting partitioner for a table is not exposed on CREATE TABLE. StorageService.instance.setPartitionerUnsafe(ByteOrderedPartitioner.instance); + +prepareServer(); } @Test http://git-wip-us.apache.org/repos/asf/cassandra/blob/30bb255e/test/unit/org/apache/cassandra/cql3/validation/miscellaneous/CrcCheckChanceTest.java -- diff --git a/test/unit/org/apache/cassandra/cql3/validation/miscellaneous/CrcCheckChanceTest.java b/test/unit/org/apache/cassandra/cql3/validation/miscellaneous/CrcCheckChanceTest.java index d059f7d..2760ae5 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/miscellaneous/CrcCheckChanceTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/miscellaneous/CrcCheckChanceTest.java @@ -30,8 +30,8 @@ import org.apache.cassandra.db.ColumnFamilyStore; import org.apache.cassandra.db.Keyspace; import org.apache.cassandra.db.compaction.CompactionInterruptedException; import org.apache.cassandra.db.compaction.CompactionManager; -import org.apache.cassandra.io.compress.CompressedRandomAccessReader; import org.apache.cassandra.io.sstable.format.SSTableReader; +import org.apache.cassandra.io.util.RandomAccessReader; import org.apache.cassandra.utils.FBUtilities; @@ -153,8 +153,8 @@ public class CrcCheckChanceTest extends CQLTester // note: only compressed files currently perform crc checks, so only the dfile reader is relevant here SSTableReader baseSSTable = cfs.getLiveSSTables().iterator().next(); SSTableReader idxSSTable = indexCfs.getLiveSSTables().iterator().next(); -try (CompressedRandomAccessReader baseDataReader = (CompressedRandomAccessReader)baseSSTable.openDataReader(); - CompressedRandomAccessReader idxDataReader = (CompressedRandomAccessReader)idxSSTable.openDataReader()) +try (RandomAccessReader baseDataReader = baseSSTable.openDataReader(); + RandomAccessReader idxDataReader = idxSSTable.openDataReader()) { Assert.assertEquals(0.03, baseDataReader.getCrcCheckChance()); Assert.assertEquals(0.03, idxDataReader.getCrcCheckChance()); http://git-wip-us.apache.org/repos/asf/cassandra/blob/30bb255e/test/unit/org/apache/cassandra/db/ScrubTest.java -- diff --git a/test/unit/org/apache/cassandra/db/ScrubTest.java b/test/unit/org/apache/cassandra/db/ScrubTest.java index a736668..df654bf 100644 --- a/test/unit/org/apache/cassandra/db/ScrubTest.java +++ b/test/unit/org/apache/cassandra/db/ScrubTest.java @@ -29,6 +29,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.apache.cassandra.*; +import org.apache.cassandra.cache.ChunkCache; import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.cql3.Operator; @@ -417,6 +418,8 @@ public
[3/3] cassandra git commit: Add uncompressed chunk cache for RandomAccessReader
Add uncompressed chunk cache for RandomAccessReader patch by Branimir Lambov; reviewed by Pavel Yaskevich for CASSANDRA-5863 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/30bb255e Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/30bb255e Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/30bb255e Branch: refs/heads/trunk Commit: 30bb255ec9fb36ace2aab51474bd3bfb9bbd3bed Parents: 16e3507 Author: Branimir Lambov Authored: Wed Mar 2 11:15:44 2016 +0200 Committer: Pavel Yaskevich Committed: Thu Apr 28 22:14:42 2016 -0700 -- CHANGES.txt | 1 + conf/cassandra.yaml | 11 +- lib/caffeine-2.2.6.jar | Bin 0 -> 947685 bytes lib/licenses/caffeine-2.2.6.txt | 202 ++ .../org/apache/cassandra/cache/CacheSize.java | 14 + .../org/apache/cassandra/cache/ChunkCache.java | 301 +++ src/java/org/apache/cassandra/cache/ICache.java | 10 +- .../cassandra/db/compaction/Scrubber.java | 2 +- .../cassandra/hints/ChecksummedDataInput.java | 104 +++-- .../hints/CompressedChecksummedDataInput.java | 44 +-- .../CompressedChecksummedDataInputBuilder.java | 36 -- .../hints/EncryptedChecksummedDataInput.java| 51 +-- .../org/apache/cassandra/hints/HintsReader.java | 10 +- .../compress/CompressedRandomAccessReader.java | 286 -- .../io/sstable/format/SSTableReader.java| 2 +- .../io/sstable/format/big/BigTableWriter.java | 13 + .../io/util/AbstractReaderFileProxy.java| 61 +++ .../io/util/BufferManagingRebufferer.java | 127 +++ .../io/util/BufferedSegmentedFile.java | 15 +- .../apache/cassandra/io/util/ChannelProxy.java | 1 + .../io/util/ChecksummedRandomAccessReader.java | 109 +++--- .../apache/cassandra/io/util/ChunkReader.java | 56 +++ .../io/util/CompressedSegmentedFile.java| 283 -- .../io/util/DataIntegrityMetadata.java | 13 +- .../cassandra/io/util/ICompressedFile.java | 2 - .../cassandra/io/util/LimitingRebufferer.java | 106 ++ .../cassandra/io/util/MmapRebufferer.java | 49 +++ .../cassandra/io/util/MmappedRegions.java | 33 +- .../cassandra/io/util/MmappedSegmentedFile.java | 58 +-- .../cassandra/io/util/RandomAccessReader.java | 257 + .../cassandra/io/util/ReaderFileProxy.java | 36 ++ .../apache/cassandra/io/util/Rebufferer.java| 84 + .../cassandra/io/util/RebuffererFactory.java| 32 ++ .../apache/cassandra/io/util/SegmentedFile.java | 56 +-- .../cassandra/io/util/SimpleChunkReader.java| 78 .../apache/cassandra/metrics/CacheMetrics.java | 4 +- .../cassandra/metrics/CacheMissMetrics.java | 114 ++ .../compress/CompressedInputStream.java | 11 +- .../org/apache/cassandra/tools/NodeProbe.java | 9 + .../apache/cassandra/tools/nodetool/Info.java | 22 ++ .../apache/cassandra/utils/ChecksumType.java| 28 +- .../cassandra/utils/memory/BufferPool.java | 2 +- .../org/apache/cassandra/cql3/CachingBench.java | 375 +++ .../org/apache/cassandra/cql3/CQLTester.java| 6 +- .../selection/SelectionColumnMappingTest.java | 2 + .../entities/FrozenCollectionsTest.java | 4 +- .../cql3/validation/entities/UserTypesTest.java | 4 +- .../miscellaneous/CrcCheckChanceTest.java | 6 +- .../unit/org/apache/cassandra/db/ScrubTest.java | 3 + .../org/apache/cassandra/db/VerifyTest.java | 3 + .../compaction/BlacklistingCompactionsTest.java | 3 + .../hints/ChecksummedDataInputTest.java | 6 +- .../CompressedRandomAccessReaderTest.java | 29 +- .../CompressedSequentialWriterTest.java | 2 +- .../io/util/BufferedRandomAccessFileTest.java | 5 +- .../cassandra/io/util/MmappedRegionsTest.java | 32 +- .../io/util/RandomAccessReaderTest.java | 27 +- 57 files changed, 2387 insertions(+), 853 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/30bb255e/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 78518b6..4f7d6dd 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.6 + * Add uncompressed chunk cache for RandomAccessReader (CASSANDRA-5863) * Clarify ClusteringPrefix hierarchy (CASSANDRA-11213) * Always perform collision check before joining ring (CASSANDRA-10134) * SSTableWriter output discrepancy (CASSANDRA-11646) http://git-wip-us.apache.org/repos/asf/cassandra/blob/30bb255e/conf/cassandra.yaml -- diff --git a/conf/cassandra.yaml b/conf/cassandra.yaml index 582859c
[1/2] cassandra git commit: StaticTokenTreeBuilder should respect posibility of duplicate tokens
Repository: cassandra Updated Branches: refs/heads/trunk 677230df6 -> 94b234313 StaticTokenTreeBuilder should respect posibility of duplicate tokens patch by jrwest and xedin; reviewed by xedin for CASSANDRA-11525 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/020dd2d1 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/020dd2d1 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/020dd2d1 Branch: refs/heads/trunk Commit: 020dd2d1034abc5c729edf1975953614b33c5a8b Parents: 11da411 Author: Jordan West Authored: Thu Apr 7 19:07:50 2016 -0700 Committer: Pavel Yaskevich Committed: Fri Apr 8 21:22:00 2016 -0700 -- CHANGES.txt | 1 + .../sasi/disk/AbstractTokenTreeBuilder.java | 1 + .../index/sasi/disk/StaticTokenTreeBuilder.java | 92 +--- .../cassandra/index/sasi/disk/TokenTree.java| 18 ++-- .../index/sasi/disk/TokenTreeTest.java | 72 ++- 5 files changed, 122 insertions(+), 62 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/020dd2d1/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 58d8ae8..392d9e7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.5 + * StaticTokenTreeBuilder should respect posibility of duplicate tokens (CASSANDRA-11525) * Correctly fix potential assertion error during compaction (CASSANDRA-11353) * Avoid index segment stitching in RAM which lead to OOM on big SSTable files (CASSANDRA-11383) * Fix clustering and row filters for LIKE queries on clustering columns (CASSANDRA-11397) http://git-wip-us.apache.org/repos/asf/cassandra/blob/020dd2d1/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java b/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java index 4e93b2b..9a1f7f1 100644 --- a/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java +++ b/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java @@ -397,6 +397,7 @@ public abstract class AbstractTokenTreeBuilder implements TokenTreeBuilder public short offsetExtra() { +// exta offset is supposed to be an unsigned 16-bit integer return (short) offset; } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/020dd2d1/src/java/org/apache/cassandra/index/sasi/disk/StaticTokenTreeBuilder.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/disk/StaticTokenTreeBuilder.java b/src/java/org/apache/cassandra/index/sasi/disk/StaticTokenTreeBuilder.java index 147427e..7a41b38 100644 --- a/src/java/org/apache/cassandra/index/sasi/disk/StaticTokenTreeBuilder.java +++ b/src/java/org/apache/cassandra/index/sasi/disk/StaticTokenTreeBuilder.java @@ -79,7 +79,7 @@ public class StaticTokenTreeBuilder extends AbstractTokenTreeBuilder public boolean isEmpty() { -return combinedTerm.getTokenIterator().getCount() == 0; +return tokenCount == 0; } public Iterator> iterator() @@ -100,7 +100,7 @@ public class StaticTokenTreeBuilder extends AbstractTokenTreeBuilder public long getTokenCount() { -return combinedTerm.getTokenIterator().getCount(); +return tokenCount; } @Override @@ -130,64 +130,50 @@ public class StaticTokenTreeBuilder extends AbstractTokenTreeBuilder { RangeIterator tokens = combinedTerm.getTokenIterator(); -tokenCount = tokens.getCount(); +tokenCount = 0; treeMinToken = tokens.getMinimum(); treeMaxToken = tokens.getMaximum(); numBlocks = 1; -if (tokenCount <= TOKENS_PER_BLOCK) +root = new InteriorNode(); +rightmostParent = (InteriorNode) root; +Leaf lastLeaf = null; +Long lastToken, firstToken = null; +int leafSize = 0; +while (tokens.hasNext()) { -leftmostLeaf = new StaticLeaf(tokens, tokens.getMinimum(), tokens.getMaximum(), tokens.getCount(), true); -rightmostLeaf = leftmostLeaf; -root = leftmostLeaf; +Long token = tokens.next().get(); +if (firstToken == null) +firstToken = token; + +tokenCount++; +leafSize++; + +// skip until the last token in the leaf +if (tokenCount % TOKENS_PER_BLOCK != 0 && token != treeMaxToken) +continue; + +
[2/2] cassandra git commit: Merge branch 'cassandra-3.5' into trunk
Merge branch 'cassandra-3.5' into trunk Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/94b23431 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/94b23431 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/94b23431 Branch: refs/heads/trunk Commit: 94b234313073242c47d1aba3de6f79a4fda0a93d Parents: 677230d 020dd2d Author: Pavel Yaskevich Authored: Fri Apr 8 21:27:07 2016 -0700 Committer: Pavel Yaskevich Committed: Fri Apr 8 21:27:07 2016 -0700 -- CHANGES.txt | 1 + .../sasi/disk/AbstractTokenTreeBuilder.java | 1 + .../index/sasi/disk/StaticTokenTreeBuilder.java | 92 +--- .../cassandra/index/sasi/disk/TokenTree.java| 18 ++-- .../index/sasi/disk/TokenTreeTest.java | 72 ++- 5 files changed, 122 insertions(+), 62 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/94b23431/CHANGES.txt -- diff --cc CHANGES.txt index 5b71af1,392d9e7..59ab55b --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -1,54 -1,5 +1,55 @@@ +3.6 + * Support for non-frozen user-defined types, updating + individual fields of user-defined types (CASSANDRA-7423) + * Make LZ4 compression level configurable (CASSANDRA-11051) + * Allow per-partition LIMIT clause in CQL (CASSANDRA-7017) + * Make custom filtering more extensible with UserExpression (CASSANDRA-11295) + * Improve field-checking and error reporting in cassandra.yaml (CASSANDRA-10649) + * Print CAS stats in nodetool proxyhistograms (CASSANDRA-11507) + * More user friendly error when providing an invalid token to nodetool (CASSANDRA-9348) + * Add static column support to SASI index (CASSANDRA-11183) + * Support EQ/PREFIX queries in SASI CONTAINS mode without tokenization (CASSANDRA-11434) + * Support LIKE operator in prepared statements (CASSANDRA-11456) + * Add a command to see if a Materialized View has finished building (CASSANDRA-9967) + * Log endpoint and port associated with streaming operation (CASSANDRA-8777) + * Print sensible units for all log messages (CASSANDRA-9692) + * Upgrade Netty to version 4.0.34 (CASSANDRA-11096) + * Break the CQL grammar into separate Parser and Lexer (CASSANDRA-11372) + * Compress only inter-dc traffic by default (CASSANDRA-) + * Add metrics to track write amplification (CASSANDRA-11420) + * cassandra-stress: cannot handle "value-less" tables (CASSANDRA-7739) + * Add/drop multiple columns in one ALTER TABLE statement (CASSANDRA-10411) + * Add require_endpoint_verification opt for internode encryption (CASSANDRA-9220) + * Add auto import java.util for UDF code block (CASSANDRA-11392) + * Add --hex-format option to nodetool getsstables (CASSANDRA-11337) + * sstablemetadata should print sstable min/max token (CASSANDRA-7159) + * Do not wrap CassandraException in TriggerExecutor (CASSANDRA-9421) + * COPY TO should have higher double precision (CASSANDRA-11255) + * Stress should exit with non-zero status after failure (CASSANDRA-10340) + * Add client to cqlsh SHOW_SESSION (CASSANDRA-8958) + * Fix nodetool tablestats keyspace level metrics (CASSANDRA-11226) + * Store repair options in parent_repair_history (CASSANDRA-11244) + * Print current leveling in sstableofflinerelevel (CASSANDRA-9588) + * Change repair message for keyspaces with RF 1 (CASSANDRA-11203) + * Remove hard-coded SSL cipher suites and protocols (CASSANDRA-10508) + * Improve concurrency in CompactionStrategyManager (CASSANDRA-10099) + * (cqlsh) interpret CQL type for formatting blobs (CASSANDRA-11274) + * Refuse to start and print txn log information in case of disk + corruption (CASSANDRA-10112) + * Resolve some eclipse-warnings (CASSANDRA-11086) + * (cqlsh) Show static columns in a different color (CASSANDRA-11059) + * Allow to remove TTLs on table with default_time_to_live (CASSANDRA-11207) +Merged from 3.0: + * Notify indexers of expired rows during compaction (CASSANDRA-11329) + * Properly respond with ProtocolError when a v1/v2 native protocol + header is received (CASSANDRA-11464) + * Validate that num_tokens and initial_token are consistent with one another (CASSANDRA-10120) +Merged from 2.2: + * IncomingStreamingConnection version check message wrong (CASSANDRA-11462) + + 3.5 + * StaticTokenTreeBuilder should respect posibility of duplicate tokens (CASSANDRA-11525) * Correctly fix potential assertion error during compaction (CASSANDRA-11353) * Avoid index segment stitching in RAM which lead to OOM on big SSTable files (CASSANDRA-11383) * Fix clustering and row filters for LIKE queries on clustering columns (CASSANDRA-11397)
cassandra git commit: StaticTokenTreeBuilder should respect posibility of duplicate tokens
Repository: cassandra Updated Branches: refs/heads/cassandra-3.5 11da411fb -> 020dd2d10 StaticTokenTreeBuilder should respect posibility of duplicate tokens patch by jrwest and xedin; reviewed by xedin for CASSANDRA-11525 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/020dd2d1 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/020dd2d1 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/020dd2d1 Branch: refs/heads/cassandra-3.5 Commit: 020dd2d1034abc5c729edf1975953614b33c5a8b Parents: 11da411 Author: Jordan West Authored: Thu Apr 7 19:07:50 2016 -0700 Committer: Pavel Yaskevich Committed: Fri Apr 8 21:22:00 2016 -0700 -- CHANGES.txt | 1 + .../sasi/disk/AbstractTokenTreeBuilder.java | 1 + .../index/sasi/disk/StaticTokenTreeBuilder.java | 92 +--- .../cassandra/index/sasi/disk/TokenTree.java| 18 ++-- .../index/sasi/disk/TokenTreeTest.java | 72 ++- 5 files changed, 122 insertions(+), 62 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/020dd2d1/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 58d8ae8..392d9e7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.5 + * StaticTokenTreeBuilder should respect posibility of duplicate tokens (CASSANDRA-11525) * Correctly fix potential assertion error during compaction (CASSANDRA-11353) * Avoid index segment stitching in RAM which lead to OOM on big SSTable files (CASSANDRA-11383) * Fix clustering and row filters for LIKE queries on clustering columns (CASSANDRA-11397) http://git-wip-us.apache.org/repos/asf/cassandra/blob/020dd2d1/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java b/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java index 4e93b2b..9a1f7f1 100644 --- a/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java +++ b/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java @@ -397,6 +397,7 @@ public abstract class AbstractTokenTreeBuilder implements TokenTreeBuilder public short offsetExtra() { +// exta offset is supposed to be an unsigned 16-bit integer return (short) offset; } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/020dd2d1/src/java/org/apache/cassandra/index/sasi/disk/StaticTokenTreeBuilder.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/disk/StaticTokenTreeBuilder.java b/src/java/org/apache/cassandra/index/sasi/disk/StaticTokenTreeBuilder.java index 147427e..7a41b38 100644 --- a/src/java/org/apache/cassandra/index/sasi/disk/StaticTokenTreeBuilder.java +++ b/src/java/org/apache/cassandra/index/sasi/disk/StaticTokenTreeBuilder.java @@ -79,7 +79,7 @@ public class StaticTokenTreeBuilder extends AbstractTokenTreeBuilder public boolean isEmpty() { -return combinedTerm.getTokenIterator().getCount() == 0; +return tokenCount == 0; } public Iterator> iterator() @@ -100,7 +100,7 @@ public class StaticTokenTreeBuilder extends AbstractTokenTreeBuilder public long getTokenCount() { -return combinedTerm.getTokenIterator().getCount(); +return tokenCount; } @Override @@ -130,64 +130,50 @@ public class StaticTokenTreeBuilder extends AbstractTokenTreeBuilder { RangeIterator tokens = combinedTerm.getTokenIterator(); -tokenCount = tokens.getCount(); +tokenCount = 0; treeMinToken = tokens.getMinimum(); treeMaxToken = tokens.getMaximum(); numBlocks = 1; -if (tokenCount <= TOKENS_PER_BLOCK) +root = new InteriorNode(); +rightmostParent = (InteriorNode) root; +Leaf lastLeaf = null; +Long lastToken, firstToken = null; +int leafSize = 0; +while (tokens.hasNext()) { -leftmostLeaf = new StaticLeaf(tokens, tokens.getMinimum(), tokens.getMaximum(), tokens.getCount(), true); -rightmostLeaf = leftmostLeaf; -root = leftmostLeaf; +Long token = tokens.next().get(); +if (firstToken == null) +firstToken = token; + +tokenCount++; +leafSize++; + +// skip until the last token in the leaf +if (tokenCount % TOKENS_PER_BLOCK != 0 && token != treeMaxToken) +
cassandra git commit: Add static column support to SASI index
Repository: cassandra Updated Branches: refs/heads/trunk a7b138ad6 -> b7d1d447b Add static column support to SASI index patch by doanduyhai and xedin; reviewed by xedin for CASSANDRA-11183 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b7d1d447 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b7d1d447 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b7d1d447 Branch: refs/heads/trunk Commit: b7d1d447bb52ed912fdd1199086cce34a2d82c45 Parents: a7b138a Author: Pavel Yaskevich Authored: Mon Apr 4 01:05:04 2016 -0700 Committer: Pavel Yaskevich Committed: Mon Apr 4 11:43:37 2016 -0700 -- CHANGES.txt | 1 + .../org/apache/cassandra/db/ColumnIndex.java| 8 +- .../cassandra/index/sasi/SASIIndexBuilder.java | 3 + .../cassandra/index/sasi/conf/ColumnIndex.java | 8 ++ .../cassandra/index/sasi/plan/Operation.java| 26 ++-- .../cassandra/index/sasi/plan/QueryPlan.java| 4 +- .../unit/org/apache/cassandra/SchemaLoader.java | 38 ++ .../validation/entities/SecondaryIndexTest.java | 10 +- .../cassandra/index/sasi/SASIIndexTest.java | 102 ++- .../index/sasi/plan/OperationTest.java | 125 ++- 10 files changed, 272 insertions(+), 53 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/b7d1d447/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 13e9325..d576b8e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.6 + * Add static column support to SASI index (CASSANDRA-11183) * Support EQ/PREFIX queries in SASI CONTAINS mode without tokenization (CASSANDRA-11434) * Support LIKE operator in prepared statements (CASSANDRA-11456) * Add a command to see if a Materialized View has finished building (CASSANDRA-9967) http://git-wip-us.apache.org/repos/asf/cassandra/blob/b7d1d447/src/java/org/apache/cassandra/db/ColumnIndex.java -- diff --git a/src/java/org/apache/cassandra/db/ColumnIndex.java b/src/java/org/apache/cassandra/db/ColumnIndex.java index 930fc05..1942052 100644 --- a/src/java/org/apache/cassandra/db/ColumnIndex.java +++ b/src/java/org/apache/cassandra/db/ColumnIndex.java @@ -109,7 +109,13 @@ public class ColumnIndex ByteBufferUtil.writeWithShortLength(iterator.partitionKey().getKey(), writer); DeletionTime.serializer.serialize(iterator.partitionLevelDeletion(), writer); if (header.hasStatic()) - UnfilteredSerializer.serializer.serializeStaticRow(iterator.staticRow(), header, writer, version); +{ +Row staticRow = iterator.staticRow(); + +UnfilteredSerializer.serializer.serializeStaticRow(staticRow, header, writer, version); +if (!observers.isEmpty()) +observers.forEach((o) -> o.nextUnfilteredCluster(staticRow)); +} } public ColumnIndex build() throws IOException http://git-wip-us.apache.org/repos/asf/cassandra/blob/b7d1d447/src/java/org/apache/cassandra/index/sasi/SASIIndexBuilder.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/SASIIndexBuilder.java b/src/java/org/apache/cassandra/index/sasi/SASIIndexBuilder.java index fc5b675..205bf7e 100644 --- a/src/java/org/apache/cassandra/index/sasi/SASIIndexBuilder.java +++ b/src/java/org/apache/cassandra/index/sasi/SASIIndexBuilder.java @@ -78,6 +78,9 @@ class SASIIndexBuilder extends SecondaryIndexBuilder try (SSTableIdentityIterator partition = new SSTableIdentityIterator(sstable, dataFile, key)) { +// if the row has statics attached, it has to be indexed separately + indexWriter.nextUnfilteredCluster(partition.staticRow()); + while (partition.hasNext()) indexWriter.nextUnfilteredCluster(partition.next()); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/b7d1d447/src/java/org/apache/cassandra/index/sasi/conf/ColumnIndex.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/conf/ColumnIndex.java b/src/java/org/apache/cassandra/index/sasi/conf/ColumnIndex.java index 8ee94d1..3f268e3 100644 --- a/src/java/org/apache/cassandra/index/sasi/conf/ColumnIndex.java +++ b/src/java/org/apache/cassandra/index/sasi/conf/ColumnIndex.java @@ -226,11 +226,19 @@ public class ColumnIndex public
cassandra git commit: Support EQ/PREFIX queries in SASI CONTAINS mode without tokenization
Repository: cassandra Updated Branches: refs/heads/trunk e375a9b1b -> 2ca2fffee Support EQ/PREFIX queries in SASI CONTAINS mode without tokenization patch by jrwest and xedin; reviewed by xedin for CASSANDRA-11434 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/2ca2fffe Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/2ca2fffe Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/2ca2fffe Branch: refs/heads/trunk Commit: 2ca2fffee80c75e3d1aa38badbefbd3b35851901 Parents: e375a9b Author: Jordan West Authored: Thu Mar 24 23:32:45 2016 -0700 Committer: Pavel Yaskevich Committed: Sun Apr 3 00:27:54 2016 -0700 -- CHANGES.txt | 1 + .../cassandra/index/sasi/SSTableIndex.java | 11 + .../org/apache/cassandra/index/sasi/Term.java | 24 +-- .../cassandra/index/sasi/TermIterator.java | 9 .../cassandra/index/sasi/conf/ColumnIndex.java | 6 ++- .../cassandra/index/sasi/disk/Descriptor.java | 2 +- .../cassandra/index/sasi/disk/OnDiskIndex.java | 23 -- .../index/sasi/disk/OnDiskIndexBuilder.java | 36 +++- .../index/sasi/memory/TrieMemIndex.java | 1 + .../cassandra/index/sasi/plan/Expression.java | 10 + .../cassandra/index/sasi/sa/IndexedTerm.java| 43 +++ .../cassandra/index/sasi/sa/IntegralSA.java | 5 ++- .../cassandra/index/sasi/sa/SuffixSA.java | 41 -- .../cassandra/index/sasi/sa/TermIterator.java | 2 +- .../index/sasi/utils/CombinedTerm.java | 5 +++ .../index/sasi/utils/CombinedTermIterator.java | 5 ++- .../cassandra/index/sasi/SASIIndexTest.java | 45 .../index/sasi/disk/OnDiskIndexTest.java| 9 +++- 18 files changed, 230 insertions(+), 48 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/2ca2fffe/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index a01196f..e5ee3d8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.6 + * Support EQ/PREFIX queries in SASI CONTAINS mode without tokenization (CASSANDRA-11434) * Support LIKE operator in prepared statements (CASSANDRA-11456) * Add a command to see if a Materialized View has finished building (CASSANDRA-9967) * Log endpoint and port associated with streaming operation (CASSANDRA-8777) http://git-wip-us.apache.org/repos/asf/cassandra/blob/2ca2fffe/src/java/org/apache/cassandra/index/sasi/SSTableIndex.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/SSTableIndex.java b/src/java/org/apache/cassandra/index/sasi/SSTableIndex.java index 7b65232..c67c39c 100644 --- a/src/java/org/apache/cassandra/index/sasi/SSTableIndex.java +++ b/src/java/org/apache/cassandra/index/sasi/SSTableIndex.java @@ -27,6 +27,7 @@ import org.apache.cassandra.db.DecoratedKey; import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.index.sasi.conf.ColumnIndex; import org.apache.cassandra.index.sasi.disk.OnDiskIndex; +import org.apache.cassandra.index.sasi.disk.OnDiskIndexBuilder; import org.apache.cassandra.index.sasi.disk.Token; import org.apache.cassandra.index.sasi.plan.Expression; import org.apache.cassandra.index.sasi.utils.RangeIterator; @@ -67,6 +68,16 @@ public class SSTableIndex this.index = new OnDiskIndex(indexFile, validator, new DecoratedKeyFetcher(sstable)); } +public OnDiskIndexBuilder.Mode mode() +{ +return index.mode(); +} + +public boolean hasMarkedPartials() +{ +return index.hasMarkedPartials(); +} + public ByteBuffer minTerm() { return index.minTerm(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/2ca2fffe/src/java/org/apache/cassandra/index/sasi/Term.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/Term.java b/src/java/org/apache/cassandra/index/sasi/Term.java index 8e8ceb2..8f42d58 100644 --- a/src/java/org/apache/cassandra/index/sasi/Term.java +++ b/src/java/org/apache/cassandra/index/sasi/Term.java @@ -23,30 +23,41 @@ import org.apache.cassandra.index.sasi.disk.OnDiskIndexBuilder.TermSize; import org.apache.cassandra.index.sasi.utils.MappedBuffer; import org.apache.cassandra.db.marshal.AbstractType; +import static org.apache.cassandra.index.sasi.disk.OnDiskIndexBuilder.IS_PARTIAL_BIT; + public class Term { protected final MappedBuffer content; protected final TermSize termSize; +private final boolean hasMarkedPartials; -public Term(MappedBuffer content, TermSize size) +public Term(MappedBuffer cont
[1/3] cassandra git commit: Avoid index segment stitching in RAM which lead to OOM on big SSTable files
Repository: cassandra Updated Branches: refs/heads/trunk 494386de8 -> b6ff7f6c0 http://git-wip-us.apache.org/repos/asf/cassandra/blob/5c4d5c73/test/unit/org/apache/cassandra/index/sasi/disk/PerSSTableIndexWriterTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/disk/PerSSTableIndexWriterTest.java b/test/unit/org/apache/cassandra/index/sasi/disk/PerSSTableIndexWriterTest.java index 4663692..39a0fbc 100644 --- a/test/unit/org/apache/cassandra/index/sasi/disk/PerSSTableIndexWriterTest.java +++ b/test/unit/org/apache/cassandra/index/sasi/disk/PerSSTableIndexWriterTest.java @@ -20,14 +20,18 @@ package org.apache.cassandra.index.sasi.disk; import java.io.File; import java.nio.ByteBuffer; import java.util.*; +import java.util.concurrent.Callable; +import java.util.concurrent.ThreadLocalRandom; import org.apache.cassandra.SchemaLoader; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; import org.apache.cassandra.db.Clustering; import org.apache.cassandra.db.ColumnFamilyStore; import org.apache.cassandra.db.DecoratedKey; import org.apache.cassandra.db.Keyspace; import org.apache.cassandra.db.compaction.OperationType; +import org.apache.cassandra.db.marshal.LongType; import org.apache.cassandra.db.rows.BTreeRow; import org.apache.cassandra.db.rows.BufferCell; import org.apache.cassandra.db.rows.Row; @@ -36,6 +40,7 @@ import org.apache.cassandra.index.sasi.utils.RangeIterator; import org.apache.cassandra.db.marshal.Int32Type; import org.apache.cassandra.db.marshal.UTF8Type; import org.apache.cassandra.exceptions.ConfigurationException; +import org.apache.cassandra.io.FSError; import org.apache.cassandra.io.sstable.Descriptor; import org.apache.cassandra.io.util.FileUtils; import org.apache.cassandra.schema.KeyspaceMetadata; @@ -158,4 +163,89 @@ public class PerSSTableIndexWriterTest extends SchemaLoader FileUtils.closeQuietly(index); } + +@Test +public void testSparse() throws Exception +{ +final String columnName = "timestamp"; + +ColumnFamilyStore cfs = Keyspace.open(KS_NAME).getColumnFamilyStore(CF_NAME); +ColumnDefinition column = cfs.metadata.getColumnDefinition(UTF8Type.instance.decompose(columnName)); + +SASIIndex sasi = (SASIIndex) cfs.indexManager.getIndexByName(columnName); + +File directory = cfs.getDirectories().getDirectoryForNewSSTables(); +Descriptor descriptor = Descriptor.fromFilename(cfs.getSSTablePath(directory)); +PerSSTableIndexWriter indexWriter = (PerSSTableIndexWriter) sasi.getFlushObserver(descriptor, OperationType.FLUSH); + +final long now = System.currentTimeMillis(); + +indexWriter.begin(); +indexWriter.indexes.put(column, indexWriter.newIndex(sasi.getIndex())); + +populateSegment(cfs.metadata, indexWriter.getIndex(column), new HashMap>() +{{ +put(now, new HashSet<>(Arrays.asList(0, 1))); +put(now + 1, new HashSet<>(Arrays.asList(2, 3))); +put(now + 2, new HashSet<>(Arrays.asList(4, 5, 6, 7, 8, 9))); +}}); + +Callable segmentBuilder = indexWriter.getIndex(column).scheduleSegmentFlush(false); + +Assert.assertNull(segmentBuilder.call()); + +PerSSTableIndexWriter.Index index = indexWriter.getIndex(column); +Random random = ThreadLocalRandom.current(); + +Set segments = new HashSet<>(); +// now let's test multiple correct segments with yield incorrect final segment +for (int i = 0; i < 3; i++) +{ +populateSegment(cfs.metadata, index, new HashMap>() +{{ +put(now, new HashSet<>(Arrays.asList(random.nextInt(), random.nextInt(), random.nextInt(; +put(now + 1, new HashSet<>(Arrays.asList(random.nextInt(), random.nextInt(), random.nextInt(; +put(now + 2, new HashSet<>(Arrays.asList(random.nextInt(), random.nextInt(), random.nextInt(; +}}); + +try +{ +// flush each of the new segments, they should all succeed +OnDiskIndex segment = index.scheduleSegmentFlush(false).call(); +index.segments.add(Futures.immediateFuture(segment)); +segments.add(segment.getIndexPath()); +} +catch (Exception | FSError e) +{ +e.printStackTrace(); +Assert.fail(); +} +} + +// make sure that all of the segments are present of the filesystem +for (String segment : segments) +Assert.assertTrue(new File(segment).exists()); + +indexWriter.complete(); + +// make sure that individual segments have been cleaned up +for (String segment : segments) +Assert.assertFalse(new File(segment).exists()); +
[3/3] cassandra git commit: Merge branch 'cassandra-3.5' into trunk
Merge branch 'cassandra-3.5' into trunk Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b6ff7f6c Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b6ff7f6c Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b6ff7f6c Branch: refs/heads/trunk Commit: b6ff7f6c0d2849676efe05422e7c0d5bf0949a3e Parents: 494386d 5c4d5c7 Author: Pavel Yaskevich Authored: Sun Mar 27 15:24:29 2016 -0700 Committer: Pavel Yaskevich Committed: Sun Mar 27 15:24:29 2016 -0700 -- CHANGES.txt | 1 + .../sasi/disk/AbstractTokenTreeBuilder.java | 672 .../sasi/disk/DynamicTokenTreeBuilder.java | 189 + .../index/sasi/disk/OnDiskIndexBuilder.java | 52 +- .../index/sasi/disk/PerSSTableIndexWriter.java | 38 +- .../index/sasi/disk/StaticTokenTreeBuilder.java | 266 ++ .../apache/cassandra/index/sasi/disk/Token.java | 5 + .../cassandra/index/sasi/disk/TokenTree.java| 6 +- .../index/sasi/disk/TokenTreeBuilder.java | 805 +-- .../index/sasi/memory/KeyRangeIterator.java | 11 + .../cassandra/index/sasi/sa/SuffixSA.java | 7 +- .../index/sasi/utils/CombinedTerm.java | 47 +- .../index/sasi/disk/OnDiskIndexTest.java| 20 +- .../sasi/disk/PerSSTableIndexWriterTest.java| 90 +++ .../index/sasi/disk/TokenTreeTest.java | 217 +++-- .../index/sasi/utils/LongIterator.java | 8 + 16 files changed, 1482 insertions(+), 952 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/b6ff7f6c/CHANGES.txt -- diff --cc CHANGES.txt index b1b9034,2907df9..1a548d7 --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -1,26 -1,5 +1,27 @@@ +3.6 + * Add auto import java.util for UDF code block (CASSANDRA-11392) + * Add --hex-format option to nodetool getsstables (CASSANDRA-11337) + * sstablemetadata should print sstable min/max token (CASSANDRA-7159) + * Do not wrap CassandraException in TriggerExecutor (CASSANDRA-9421) + * COPY TO should have higher double precision (CASSANDRA-11255) + * Stress should exit with non-zero status after failure (CASSANDRA-10340) + * Add client to cqlsh SHOW_SESSION (CASSANDRA-8958) + * Fix nodetool tablestats keyspace level metrics (CASSANDRA-11226) + * Store repair options in parent_repair_history (CASSANDRA-11244) + * Print current leveling in sstableofflinerelevel (CASSANDRA-9588) + * Change repair message for keyspaces with RF 1 (CASSANDRA-11203) + * Remove hard-coded SSL cipher suites and protocols (CASSANDRA-10508) + * Improve concurrency in CompactionStrategyManager (CASSANDRA-10099) + * (cqlsh) interpret CQL type for formatting blobs (CASSANDRA-11274) + * Refuse to start and print txn log information in case of disk + corruption (CASSANDRA-10112) + * Resolve some eclipse-warnings (CASSANDRA-11086) + * (cqlsh) Show static columns in a different color (CASSANDRA-11059) + * Allow to remove TTLs on table with default_time_to_live (CASSANDRA-11207) + + 3.5 + * Avoid index segment stitching in RAM which lead to OOM on big SSTable files (CASSANDRA-11383) * Fix clustering and row filters for LIKE queries on clustering columns (CASSANDRA-11397) Merged from 3.0: * Enable SO_REUSEADDR for JMX RMI server sockets (CASSANDRA-11093) http://git-wip-us.apache.org/repos/asf/cassandra/blob/b6ff7f6c/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndexBuilder.java -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/b6ff7f6c/src/java/org/apache/cassandra/index/sasi/disk/PerSSTableIndexWriter.java -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/b6ff7f6c/test/unit/org/apache/cassandra/index/sasi/disk/PerSSTableIndexWriterTest.java --
[2/3] cassandra git commit: Avoid index segment stitching in RAM which lead to OOM on big SSTable files
Avoid index segment stitching in RAM which lead to OOM on big SSTable files patch by jrwest and xedin; reviewed by xedin for CASSANDRA-11383 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5c4d5c73 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5c4d5c73 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5c4d5c73 Branch: refs/heads/trunk Commit: 5c4d5c731f1299ba310c81603914a1a8956e644c Parents: f6c5d72 Author: Jordan West Authored: Mon Mar 21 12:00:31 2016 -0700 Committer: Pavel Yaskevich Committed: Sun Mar 27 15:21:16 2016 -0700 -- CHANGES.txt | 1 + .../sasi/disk/AbstractTokenTreeBuilder.java | 672 .../sasi/disk/DynamicTokenTreeBuilder.java | 189 + .../index/sasi/disk/OnDiskIndexBuilder.java | 52 +- .../index/sasi/disk/PerSSTableIndexWriter.java | 37 +- .../index/sasi/disk/StaticTokenTreeBuilder.java | 266 ++ .../apache/cassandra/index/sasi/disk/Token.java | 5 + .../cassandra/index/sasi/disk/TokenTree.java| 6 +- .../index/sasi/disk/TokenTreeBuilder.java | 805 +-- .../index/sasi/memory/KeyRangeIterator.java | 11 + .../cassandra/index/sasi/sa/SuffixSA.java | 7 +- .../index/sasi/utils/CombinedTerm.java | 46 +- .../index/sasi/disk/OnDiskIndexTest.java| 20 +- .../sasi/disk/PerSSTableIndexWriterTest.java| 90 +++ .../index/sasi/disk/TokenTreeTest.java | 217 +++-- .../index/sasi/utils/LongIterator.java | 8 + 16 files changed, 1482 insertions(+), 950 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/5c4d5c73/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index f86c91f..2907df9 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.5 + * Avoid index segment stitching in RAM which lead to OOM on big SSTable files (CASSANDRA-11383) * Fix clustering and row filters for LIKE queries on clustering columns (CASSANDRA-11397) Merged from 3.0: * Enable SO_REUSEADDR for JMX RMI server sockets (CASSANDRA-11093) http://git-wip-us.apache.org/repos/asf/cassandra/blob/5c4d5c73/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java b/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java new file mode 100644 index 000..4e93b2b --- /dev/null +++ b/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java @@ -0,0 +1,672 @@ +/* + * 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.index.sasi.disk; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.cassandra.io.util.DataOutputPlus; +import org.apache.cassandra.utils.AbstractIterator; +import org.apache.cassandra.utils.FBUtilities; +import org.apache.cassandra.utils.Pair; + +import com.carrotsearch.hppc.LongArrayList; +import com.carrotsearch.hppc.LongSet; +import com.carrotsearch.hppc.cursors.LongCursor; + +public abstract class AbstractTokenTreeBuilder implements TokenTreeBuilder +{ +protected int numBlocks; +protected Node root; +protected InteriorNode rightmostParent; +protected Leaf leftmostLeaf; +protected Leaf rightmostLeaf; +protected long tokenCount = 0; +protected long treeMinToken; +protected long treeMaxToken; + +public void add(TokenTreeBuilder other) +{ +add(other.iterator()); +} + +public TokenTreeBuilder finish() +{ +if (root == null) +constructTree(); + +return this; +} + +public long getTokenCount() +{ +return tokenCount; +} + +public int serializedSize() +{ +if (numBlocks == 1)
[1/2] cassandra git commit: Avoid index segment stitching in RAM which lead to OOM on big SSTable files
Repository: cassandra Updated Branches: refs/heads/cassandra-3.5 f6c5d7298 -> 5c4d5c731 http://git-wip-us.apache.org/repos/asf/cassandra/blob/5c4d5c73/test/unit/org/apache/cassandra/index/sasi/disk/PerSSTableIndexWriterTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/disk/PerSSTableIndexWriterTest.java b/test/unit/org/apache/cassandra/index/sasi/disk/PerSSTableIndexWriterTest.java index 4663692..39a0fbc 100644 --- a/test/unit/org/apache/cassandra/index/sasi/disk/PerSSTableIndexWriterTest.java +++ b/test/unit/org/apache/cassandra/index/sasi/disk/PerSSTableIndexWriterTest.java @@ -20,14 +20,18 @@ package org.apache.cassandra.index.sasi.disk; import java.io.File; import java.nio.ByteBuffer; import java.util.*; +import java.util.concurrent.Callable; +import java.util.concurrent.ThreadLocalRandom; import org.apache.cassandra.SchemaLoader; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; import org.apache.cassandra.db.Clustering; import org.apache.cassandra.db.ColumnFamilyStore; import org.apache.cassandra.db.DecoratedKey; import org.apache.cassandra.db.Keyspace; import org.apache.cassandra.db.compaction.OperationType; +import org.apache.cassandra.db.marshal.LongType; import org.apache.cassandra.db.rows.BTreeRow; import org.apache.cassandra.db.rows.BufferCell; import org.apache.cassandra.db.rows.Row; @@ -36,6 +40,7 @@ import org.apache.cassandra.index.sasi.utils.RangeIterator; import org.apache.cassandra.db.marshal.Int32Type; import org.apache.cassandra.db.marshal.UTF8Type; import org.apache.cassandra.exceptions.ConfigurationException; +import org.apache.cassandra.io.FSError; import org.apache.cassandra.io.sstable.Descriptor; import org.apache.cassandra.io.util.FileUtils; import org.apache.cassandra.schema.KeyspaceMetadata; @@ -158,4 +163,89 @@ public class PerSSTableIndexWriterTest extends SchemaLoader FileUtils.closeQuietly(index); } + +@Test +public void testSparse() throws Exception +{ +final String columnName = "timestamp"; + +ColumnFamilyStore cfs = Keyspace.open(KS_NAME).getColumnFamilyStore(CF_NAME); +ColumnDefinition column = cfs.metadata.getColumnDefinition(UTF8Type.instance.decompose(columnName)); + +SASIIndex sasi = (SASIIndex) cfs.indexManager.getIndexByName(columnName); + +File directory = cfs.getDirectories().getDirectoryForNewSSTables(); +Descriptor descriptor = Descriptor.fromFilename(cfs.getSSTablePath(directory)); +PerSSTableIndexWriter indexWriter = (PerSSTableIndexWriter) sasi.getFlushObserver(descriptor, OperationType.FLUSH); + +final long now = System.currentTimeMillis(); + +indexWriter.begin(); +indexWriter.indexes.put(column, indexWriter.newIndex(sasi.getIndex())); + +populateSegment(cfs.metadata, indexWriter.getIndex(column), new HashMap>() +{{ +put(now, new HashSet<>(Arrays.asList(0, 1))); +put(now + 1, new HashSet<>(Arrays.asList(2, 3))); +put(now + 2, new HashSet<>(Arrays.asList(4, 5, 6, 7, 8, 9))); +}}); + +Callable segmentBuilder = indexWriter.getIndex(column).scheduleSegmentFlush(false); + +Assert.assertNull(segmentBuilder.call()); + +PerSSTableIndexWriter.Index index = indexWriter.getIndex(column); +Random random = ThreadLocalRandom.current(); + +Set segments = new HashSet<>(); +// now let's test multiple correct segments with yield incorrect final segment +for (int i = 0; i < 3; i++) +{ +populateSegment(cfs.metadata, index, new HashMap>() +{{ +put(now, new HashSet<>(Arrays.asList(random.nextInt(), random.nextInt(), random.nextInt(; +put(now + 1, new HashSet<>(Arrays.asList(random.nextInt(), random.nextInt(), random.nextInt(; +put(now + 2, new HashSet<>(Arrays.asList(random.nextInt(), random.nextInt(), random.nextInt(; +}}); + +try +{ +// flush each of the new segments, they should all succeed +OnDiskIndex segment = index.scheduleSegmentFlush(false).call(); +index.segments.add(Futures.immediateFuture(segment)); +segments.add(segment.getIndexPath()); +} +catch (Exception | FSError e) +{ +e.printStackTrace(); +Assert.fail(); +} +} + +// make sure that all of the segments are present of the filesystem +for (String segment : segments) +Assert.assertTrue(new File(segment).exists()); + +indexWriter.complete(); + +// make sure that individual segments have been cleaned up +for (String segment : segments) +Assert.assertFalse(new File(segment).exis
[2/2] cassandra git commit: Avoid index segment stitching in RAM which lead to OOM on big SSTable files
Avoid index segment stitching in RAM which lead to OOM on big SSTable files patch by jrwest and xedin; reviewed by xedin for CASSANDRA-11383 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5c4d5c73 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5c4d5c73 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5c4d5c73 Branch: refs/heads/cassandra-3.5 Commit: 5c4d5c731f1299ba310c81603914a1a8956e644c Parents: f6c5d72 Author: Jordan West Authored: Mon Mar 21 12:00:31 2016 -0700 Committer: Pavel Yaskevich Committed: Sun Mar 27 15:21:16 2016 -0700 -- CHANGES.txt | 1 + .../sasi/disk/AbstractTokenTreeBuilder.java | 672 .../sasi/disk/DynamicTokenTreeBuilder.java | 189 + .../index/sasi/disk/OnDiskIndexBuilder.java | 52 +- .../index/sasi/disk/PerSSTableIndexWriter.java | 37 +- .../index/sasi/disk/StaticTokenTreeBuilder.java | 266 ++ .../apache/cassandra/index/sasi/disk/Token.java | 5 + .../cassandra/index/sasi/disk/TokenTree.java| 6 +- .../index/sasi/disk/TokenTreeBuilder.java | 805 +-- .../index/sasi/memory/KeyRangeIterator.java | 11 + .../cassandra/index/sasi/sa/SuffixSA.java | 7 +- .../index/sasi/utils/CombinedTerm.java | 46 +- .../index/sasi/disk/OnDiskIndexTest.java| 20 +- .../sasi/disk/PerSSTableIndexWriterTest.java| 90 +++ .../index/sasi/disk/TokenTreeTest.java | 217 +++-- .../index/sasi/utils/LongIterator.java | 8 + 16 files changed, 1482 insertions(+), 950 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/5c4d5c73/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index f86c91f..2907df9 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.5 + * Avoid index segment stitching in RAM which lead to OOM on big SSTable files (CASSANDRA-11383) * Fix clustering and row filters for LIKE queries on clustering columns (CASSANDRA-11397) Merged from 3.0: * Enable SO_REUSEADDR for JMX RMI server sockets (CASSANDRA-11093) http://git-wip-us.apache.org/repos/asf/cassandra/blob/5c4d5c73/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java b/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java new file mode 100644 index 000..4e93b2b --- /dev/null +++ b/src/java/org/apache/cassandra/index/sasi/disk/AbstractTokenTreeBuilder.java @@ -0,0 +1,672 @@ +/* + * 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.index.sasi.disk; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.cassandra.io.util.DataOutputPlus; +import org.apache.cassandra.utils.AbstractIterator; +import org.apache.cassandra.utils.FBUtilities; +import org.apache.cassandra.utils.Pair; + +import com.carrotsearch.hppc.LongArrayList; +import com.carrotsearch.hppc.LongSet; +import com.carrotsearch.hppc.cursors.LongCursor; + +public abstract class AbstractTokenTreeBuilder implements TokenTreeBuilder +{ +protected int numBlocks; +protected Node root; +protected InteriorNode rightmostParent; +protected Leaf leftmostLeaf; +protected Leaf rightmostLeaf; +protected long tokenCount = 0; +protected long treeMinToken; +protected long treeMaxToken; + +public void add(TokenTreeBuilder other) +{ +add(other.iterator()); +} + +public TokenTreeBuilder finish() +{ +if (root == null) +constructTree(); + +return this; +} + +public long getTokenCount() +{ +return tokenCount; +} + +public int serializedSize() +{ +
cassandra git commit: fix OnDiskIndexTest to properly treat empty ranges
Repository: cassandra Updated Branches: refs/heads/trunk 5edd148c2 -> 5a4ff9045 fix OnDiskIndexTest to properly treat empty ranges patch by xedin; reviewed by jkni for CASSANDRA-11205 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5a4ff904 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5a4ff904 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5a4ff904 Branch: refs/heads/trunk Commit: 5a4ff90456ae36fb1e289ae06cd5d8bec96ed233 Parents: 5edd148 Author: Pavel Yaskevich Authored: Mon Feb 22 16:43:14 2016 -0800 Committer: Pavel Yaskevich Committed: Mon Feb 22 23:31:02 2016 -0800 -- CHANGES.txt | 1 + .../org/apache/cassandra/index/sasi/disk/OnDiskIndexTest.java | 7 +++ 2 files changed, 8 insertions(+) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/5a4ff904/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 2c856ce..f66d959 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.4 + * fix OnDiskIndexTest to properly treat empty ranges (CASSANDRA-11205) * fix TrackerTest to handle new notifications (CASSANDRA-11178) * add SASI validation for partitioner and complex columns (CASSANDRA-11169) * Add caching of encrypted credentials in PasswordAuthenticator (CASSANDRA-7715) http://git-wip-us.apache.org/repos/asf/cassandra/blob/5a4ff904/test/unit/org/apache/cassandra/index/sasi/disk/OnDiskIndexTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/disk/OnDiskIndexTest.java b/test/unit/org/apache/cassandra/index/sasi/disk/OnDiskIndexTest.java index 5e6b8b0..6353155 100644 --- a/test/unit/org/apache/cassandra/index/sasi/disk/OnDiskIndexTest.java +++ b/test/unit/org/apache/cassandra/index/sasi/disk/OnDiskIndexTest.java @@ -697,6 +697,13 @@ public class OnDiskIndexTest { RangeIterator tokens = onDiskIndex.search(expressionFor(start, true, end, false)); +// no results should be produced only if range is empty +if (tokens == null) +{ +Assert.assertEquals(0, end - start); +return; +} + int keyCount = 0; Long lastToken = null; while (tokens.hasNext())
cassandra git commit: fix TrackerTest to handle new notifications
Repository: cassandra Updated Branches: refs/heads/trunk 27ac6a836 -> 29d556872 fix TrackerTest to handle new notifications patch by xedin; reviewed by yukim for CASSANDRA-11178 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/29d55687 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/29d55687 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/29d55687 Branch: refs/heads/trunk Commit: 29d5568724a5ba80642cb58ed829d5c961fff41d Parents: 27ac6a8 Author: Pavel Yaskevich Authored: Wed Feb 17 15:07:31 2016 -0800 Committer: Pavel Yaskevich Committed: Wed Feb 17 15:33:04 2016 -0800 -- CHANGES.txt| 1 + .../apache/cassandra/db/lifecycle/TrackerTest.java | 17 +++-- 2 files changed, 12 insertions(+), 6 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/29d55687/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index df97bbd..e6d4c42 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.4 + * fix TrackerTest to handle new notifications (CASSANDRA-11178) * add SASI validation for partitioner and complex columns (CASSANDRA-11169) * Add caching of encrypted credentials in PasswordAuthenticator (CASSANDRA-7715) * fix SASI memtable switching on flush (CASSANDRA-11159) http://git-wip-us.apache.org/repos/asf/cassandra/blob/29d55687/test/unit/org/apache/cassandra/db/lifecycle/TrackerTest.java -- diff --git a/test/unit/org/apache/cassandra/db/lifecycle/TrackerTest.java b/test/unit/org/apache/cassandra/db/lifecycle/TrackerTest.java index 4f49389..b3dc3d9 100644 --- a/test/unit/org/apache/cassandra/db/lifecycle/TrackerTest.java +++ b/test/unit/org/apache/cassandra/db/lifecycle/TrackerTest.java @@ -280,8 +280,9 @@ public class TrackerTest Assert.assertEquals(prev1, tracker.getMemtableFor(write1, ReplayPosition.NONE)); Assert.assertEquals(prev2, tracker.getMemtableFor(write2, ReplayPosition.NONE)); Assert.assertEquals(cur, tracker.getMemtableFor(writecur, ReplayPosition.NONE)); -Assert.assertEquals(1, listener.received.size()); +Assert.assertEquals(2, listener.received.size()); Assert.assertTrue(listener.received.get(0) instanceof MemtableRenewedNotification); +Assert.assertTrue(listener.received.get(1) instanceof MemtableSwitchedNotification); listener.received.clear(); tracker.markFlushing(prev2); @@ -299,8 +300,9 @@ public class TrackerTest SSTableReader reader = MockSchema.sstable(0, 10, false, cfs); tracker.replaceFlushed(prev2, singleton(reader)); Assert.assertEquals(1, tracker.getView().sstables.size()); -Assert.assertEquals(1, listener.received.size()); +Assert.assertEquals(2, listener.received.size()); Assert.assertEquals(singleton(reader), ((SSTableAddedNotification) listener.received.get(0)).added); +Assert.assertEquals(prev2, ((MemtableDiscardedNotification) listener.received.get(1)).memtable); listener.received.clear(); Assert.assertTrue(reader.isKeyCacheSetup()); Assert.assertEquals(10, cfs.metric.liveDiskSpaceUsed.getCount()); @@ -318,10 +320,13 @@ public class TrackerTest Assert.assertEquals(0, tracker.getView().sstables.size()); Assert.assertEquals(0, tracker.getView().flushingMemtables.size()); Assert.assertEquals(0, cfs.metric.liveDiskSpaceUsed.getCount()); -Assert.assertEquals(3, listener.received.size()); -Assert.assertEquals(singleton(reader), ((SSTableAddedNotification) listener.received.get(0)).added); -Assert.assertTrue(listener.received.get(1) instanceof SSTableDeletingNotification); -Assert.assertEquals(1, ((SSTableListChangedNotification) listener.received.get(2)).removed.size()); +System.out.println(listener.received); +Assert.assertEquals(5, listener.received.size()); +Assert.assertEquals(prev1, ((MemtableSwitchedNotification) listener.received.get(0)).memtable); +Assert.assertEquals(singleton(reader), ((SSTableAddedNotification) listener.received.get(1)).added); +Assert.assertEquals(prev1, ((MemtableDiscardedNotification) listener.received.get(2)).memtable); +Assert.assertTrue(listener.received.get(3) instanceof SSTableDeletingNotification); +Assert.assertEquals(1, ((SSTableListChangedNotification) listener.received.get(4)).removed.size()); DatabaseDescriptor.setIncrementalBackupsEnabled(backups); }
cassandra git commit: add SASI validation for partitioner and complex columns
Repository: cassandra Updated Branches: refs/heads/trunk 186777aac -> 27ac6a836 add SASI validation for partitioner and complex columns patch by xedin; reviewed by jasobrown for CASSANDRA-11169 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/27ac6a83 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/27ac6a83 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/27ac6a83 Branch: refs/heads/trunk Commit: 27ac6a836228d66c32ade3c7ba9da3483ff31f27 Parents: 186777a Author: Pavel Yaskevich Authored: Tue Feb 16 19:17:38 2016 -0800 Committer: Pavel Yaskevich Committed: Wed Feb 17 13:52:59 2016 -0800 -- CHANGES.txt | 1 + src/java/org/apache/cassandra/index/sasi/SASIIndex.java | 7 +++ 2 files changed, 8 insertions(+) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/27ac6a83/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index f3248df..df97bbd 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.4 + * add SASI validation for partitioner and complex columns (CASSANDRA-11169) * Add caching of encrypted credentials in PasswordAuthenticator (CASSANDRA-7715) * fix SASI memtable switching on flush (CASSANDRA-11159) * Remove duplicate offline compaction tracking (CASSANDRA-11148) http://git-wip-us.apache.org/repos/asf/cassandra/blob/27ac6a83/src/java/org/apache/cassandra/index/sasi/SASIIndex.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/SASIIndex.java b/src/java/org/apache/cassandra/index/sasi/SASIIndex.java index 90cc72e..0b9d900 100644 --- a/src/java/org/apache/cassandra/index/sasi/SASIIndex.java +++ b/src/java/org/apache/cassandra/index/sasi/SASIIndex.java @@ -35,6 +35,7 @@ import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.db.partitions.PartitionIterator; import org.apache.cassandra.db.partitions.PartitionUpdate; import org.apache.cassandra.db.rows.Row; +import org.apache.cassandra.dht.Murmur3Partitioner; import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.exceptions.InvalidRequestException; import org.apache.cassandra.index.Index; @@ -121,6 +122,9 @@ public class SASIIndex implements Index, INotificationConsumer public static Map validateOptions(Map options, CFMetaData cfm) { +if (!(cfm.partitioner instanceof Murmur3Partitioner)) +throw new ConfigurationException("SASI only supports Murmur3Partitioner."); + String targetColumn = options.get("target"); if (targetColumn == null) throw new ConfigurationException("unknown target column"); @@ -129,6 +133,9 @@ public class SASIIndex implements Index, INotificationConsumer if (target == null) throw new ConfigurationException("failed to retrieve target column for: " + targetColumn); +if (target.left.isComplex()) +throw new ConfigurationException("complex columns are not yet supported by SASI"); + IndexMode.validateAnalyzer(options); IndexMode mode = IndexMode.getMode(target.left, options);
cassandra git commit: fix SASI memtable switching of flush
Repository: cassandra Updated Branches: refs/heads/trunk f9a1a80af -> 48815d4a1 fix SASI memtable switching of flush patch by xedin; reviewed by beobal for CASSANDRA-11159 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/48815d4a Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/48815d4a Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/48815d4a Branch: refs/heads/trunk Commit: 48815d4a182915e852888cb35273b8e896cea440 Parents: f9a1a80 Author: Pavel Yaskevich Authored: Thu Feb 11 18:54:04 2016 -0800 Committer: Pavel Yaskevich Committed: Tue Feb 16 13:06:39 2016 -0800 -- CHANGES.txt | 1 + .../apache/cassandra/db/lifecycle/Tracker.java | 26 ++- .../apache/cassandra/index/sasi/SASIIndex.java | 8 ++ .../cassandra/index/sasi/conf/ColumnIndex.java | 40 +- .../cassandra/index/sasi/conf/view/View.java| 4 +- .../index/sasi/plan/QueryController.java| 30 +++- .../MemtableDiscardedNotification.java | 30 .../MemtableSwitchedNotification.java | 30 .../cassandra/index/sasi/SASIIndexTest.java | 77 9 files changed, 220 insertions(+), 26 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/48815d4a/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index c3bfdc3..f20e983 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.4 + * fix SASI memtable switching on flush (CASSANDRA-11159) * Remove duplicate offline compaction tracking (CASSANDRA-11148) * fix EQ semantics of analyzed SASI indexes (CASSANDRA-11130) * Support long name output for nodetool commands (CASSANDRA-7950) http://git-wip-us.apache.org/repos/asf/cassandra/blob/48815d4a/src/java/org/apache/cassandra/db/lifecycle/Tracker.java -- diff --git a/src/java/org/apache/cassandra/db/lifecycle/Tracker.java b/src/java/org/apache/cassandra/db/lifecycle/Tracker.java index 4c73472..dd07b19 100644 --- a/src/java/org/apache/cassandra/db/lifecycle/Tracker.java +++ b/src/java/org/apache/cassandra/db/lifecycle/Tracker.java @@ -318,6 +318,8 @@ public class Tracker Pair result = apply(View.switchMemtable(newMemtable)); if (truncating) notifyRenewed(newMemtable); +else +notifySwitched(result.left.getCurrentMemtable()); return result.left.getCurrentMemtable(); } @@ -349,6 +351,8 @@ public class Tracker // TODO: if we're invalidated, should we notifyadded AND removed, or just skip both? fail = notifyAdded(sstables, fail); +notifyDiscarded(memtable); + if (!isDummy() && !cfstore.isValid()) dropSSTables(); @@ -441,16 +445,30 @@ public class Tracker subscriber.handleNotification(notification, this); } -public void notifyRenewed(Memtable renewed) +public void notifyTruncated(long truncatedAt) { -INotification notification = new MemtableRenewedNotification(renewed); +INotification notification = new TruncationNotification(truncatedAt); for (INotificationConsumer subscriber : subscribers) subscriber.handleNotification(notification, this); } -public void notifyTruncated(long truncatedAt) +public void notifyRenewed(Memtable renewed) +{ +notify(new MemtableRenewedNotification(renewed)); +} + +public void notifySwitched(Memtable previous) +{ +notify(new MemtableSwitchedNotification(previous)); +} + +public void notifyDiscarded(Memtable discarded) +{ +notify(new MemtableDiscardedNotification(discarded)); +} + +private void notify(INotification notification) { -INotification notification = new TruncationNotification(truncatedAt); for (INotificationConsumer subscriber : subscribers) subscriber.handleNotification(notification, this); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/48815d4a/src/java/org/apache/cassandra/index/sasi/SASIIndex.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/SASIIndex.java b/src/java/org/apache/cassandra/index/sasi/SASIIndex.java index d480b82..90cc72e 100644 --- a/src/java/org/apache/cassandra/index/sasi/SASIIndex.java +++ b/src/java/org/apache/cassandra/index/sasi/SASIIndex.java @@ -311,6 +311,14 @@ public class SASIIndex implements Index, INotificationConsumer { index.switchMemtable(); } +else if (notification instanceof MemtableSwit
cassandra git commit: fix EQ semantics of analyzed SASI indexes
Repository: cassandra Updated Branches: refs/heads/trunk 6dc1004ce -> 479e8aff1 fix EQ semantics of analyzed SASI indexes patch by xedin; reviewed by beobal for CASSANDRA-11130 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/479e8aff Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/479e8aff Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/479e8aff Branch: refs/heads/trunk Commit: 479e8aff1346d41ebc05e1a113996a803228284d Parents: 6dc1004 Author: Pavel Yaskevich Authored: Sun Feb 7 17:15:21 2016 -0800 Committer: Pavel Yaskevich Committed: Thu Feb 11 11:24:40 2016 -0800 -- CHANGES.txt | 1 + src/java/org/apache/cassandra/cql3/Cql.g| 2 +- .../org/apache/cassandra/cql3/Operator.java | 9 + .../org/apache/cassandra/cql3/Relation.java | 4 +- .../apache/cassandra/db/filter/RowFilter.java | 1 + .../index/sasi/analyzer/AbstractAnalyzer.java | 8 + .../index/sasi/analyzer/StandardAnalyzer.java | 5 + .../cassandra/index/sasi/conf/ColumnIndex.java | 12 +- .../cassandra/index/sasi/conf/IndexMode.java| 2 +- .../index/sasi/disk/OnDiskIndexBuilder.java | 4 +- .../index/sasi/memory/TrieMemIndex.java | 2 + .../cassandra/index/sasi/plan/Expression.java | 7 +- .../cassandra/index/sasi/plan/Operation.java| 5 + .../cassandra/index/sasi/SASIIndexTest.java | 219 +-- .../index/sasi/plan/OperationTest.java | 6 +- 15 files changed, 263 insertions(+), 24 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/479e8aff/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index c09a453..28651e2 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.4 + * fix EQ semantics of analyzed SASI indexes (CASSANDRA-11130) * Support long name output for nodetool commands (CASSANDRA-7950) * Encrypted hints (CASSANDRA-11040) * SASI index options validation (CASSANDRA-11136) http://git-wip-us.apache.org/repos/asf/cassandra/blob/479e8aff/src/java/org/apache/cassandra/cql3/Cql.g -- diff --git a/src/java/org/apache/cassandra/cql3/Cql.g b/src/java/org/apache/cassandra/cql3/Cql.g index d560119..5cb479c 100644 --- a/src/java/org/apache/cassandra/cql3/Cql.g +++ b/src/java/org/apache/cassandra/cql3/Cql.g @@ -209,7 +209,7 @@ options { } else { -operator = Operator.EQ; +operator = Operator.LIKE_MATCHES; endIndex += 1; } http://git-wip-us.apache.org/repos/asf/cassandra/blob/479e8aff/src/java/org/apache/cassandra/cql3/Operator.java -- diff --git a/src/java/org/apache/cassandra/cql3/Operator.java b/src/java/org/apache/cassandra/cql3/Operator.java index d518961..accb786 100644 --- a/src/java/org/apache/cassandra/cql3/Operator.java +++ b/src/java/org/apache/cassandra/cql3/Operator.java @@ -126,6 +126,14 @@ public enum Operator { return "LIKE '%%'"; } +}, +LIKE_MATCHES(13) +{ +@Override +public String toString() +{ +return "LIKE ''"; +} }; /** @@ -222,6 +230,7 @@ public enum Operator return ByteBufferUtil.startsWith(leftOperand, rightOperand); case LIKE_SUFFIX: return ByteBufferUtil.endsWith(leftOperand, rightOperand); +case LIKE_MATCHES: case LIKE_CONTAINS: return ByteBufferUtil.contains(leftOperand, rightOperand); default: http://git-wip-us.apache.org/repos/asf/cassandra/blob/479e8aff/src/java/org/apache/cassandra/cql3/Relation.java -- diff --git a/src/java/org/apache/cassandra/cql3/Relation.java b/src/java/org/apache/cassandra/cql3/Relation.java index 81f46a6..616fd30 100644 --- a/src/java/org/apache/cassandra/cql3/Relation.java +++ b/src/java/org/apache/cassandra/cql3/Relation.java @@ -112,7 +112,8 @@ public abstract class Relation { { return relationType == Operator.LIKE_PREFIX || relationType == Operator.LIKE_SUFFIX -|| relationType == Operator.LIKE_CONTAINS; +|| relationType == Operator.LIKE_CONTAINS +|| relationType == Operator.LIKE_MATCHES; } /** @@ -153,6 +154,7 @@ public abstract class Relation { case LIKE_PREFIX: case LIKE_SUFFIX: case LIKE_CONTAINS: +case LIKE_MATCHES: return newLi
cassandra git commit: remove redundant SASI index existence check from validateOptions
Repository: cassandra Updated Branches: refs/heads/trunk f8e86eb34 -> 7709c2a7f remove redundant SASI index existence check from validateOptions patch by xedin; reviewed by beobal for CASSANDRA-11136 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7709c2a7 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7709c2a7 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7709c2a7 Branch: refs/heads/trunk Commit: 7709c2a7f5e88a6b93410bfa8f9673cd04416ed5 Parents: f8e86eb Author: Pavel Yaskevich Authored: Wed Feb 10 13:45:48 2016 -0800 Committer: Pavel Yaskevich Committed: Wed Feb 10 13:58:03 2016 -0800 -- .../org/apache/cassandra/index/sasi/SASIIndex.java | 8 .../org/apache/cassandra/index/sasi/SASIIndexTest.java | 13 - 2 files changed, 21 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/7709c2a7/src/java/org/apache/cassandra/index/sasi/SASIIndex.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/SASIIndex.java b/src/java/org/apache/cassandra/index/sasi/SASIIndex.java index b460910..d480b82 100644 --- a/src/java/org/apache/cassandra/index/sasi/SASIIndex.java +++ b/src/java/org/apache/cassandra/index/sasi/SASIIndex.java @@ -141,14 +141,6 @@ public class SASIIndex implements Index, INotificationConsumer throw new ConfigurationException("SPARSE mode doesn't support analyzers."); } -ColumnFamilyStore store = Schema.instance.getColumnFamilyStoreIncludingIndexes(Pair.create(cfm.ksName, cfm.cfName)); -if (store != null && store.indexManager.listIndexes() - .stream() - .filter((index) -> index.dependsOn(target.left) - && index.getClass().isAssignableFrom(SASIIndex.class)) - .findFirst().isPresent()) -throw new ConfigurationException("Index on '" + targetColumn + "' already exists, SASI doesn't support multiple indexes per column."); - return Collections.emptyMap(); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/7709c2a7/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java index bd3bb0c..2ae1e70 100644 --- a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java +++ b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java @@ -1744,19 +1744,6 @@ public class SASIIndexTest { Assert.assertTrue(e.getMessage().contains("doesn't support analyzers")); } - -try -{ -// new index for column which already has a SASI index -SASIIndex.validateOptions(new HashMap() - {{ put("target", "first_name"); put("mode", "PREFIX"); }}, - store.metadata); -Assert.fail(); -} -catch (ConfigurationException e) -{ -Assert.assertTrue(e.getMessage().contains("already exists")); -} } private static ColumnFamilyStore loadData(Map> data, boolean forceFlush)
cassandra git commit: SASI index options validation
Repository: cassandra Updated Branches: refs/heads/trunk b11fba750 -> f8e86eb34 SASI index options validation patch by xedin; reviewed by beobal for CASSANDRA-11136 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/f8e86eb3 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/f8e86eb3 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/f8e86eb3 Branch: refs/heads/trunk Commit: f8e86eb341aa5bb36e747ce4f31f56dcbaea7089 Parents: b11fba7 Author: Pavel Yaskevich Authored: Sun Feb 7 21:21:22 2016 -0800 Committer: Pavel Yaskevich Committed: Wed Feb 10 11:41:03 2016 -0800 -- CHANGES.txt | 1 + doc/SASI.md | 8 +- .../apache/cassandra/index/TargetParser.java| 90 .../index/internal/CassandraIndex.java | 62 +- .../apache/cassandra/index/sasi/SASIIndex.java | 45 -- .../cassandra/index/sasi/conf/ColumnIndex.java | 6 -- .../cassandra/index/sasi/conf/IndexMode.java| 65 -- .../cassandra/thrift/ThriftConversion.java | 5 +- .../index/internal/CustomCassandraIndex.java| 4 +- .../cassandra/index/sasi/SASIIndexTest.java | 71 +++ .../schema/LegacySchemaMigratorTest.java| 4 +- 11 files changed, 251 insertions(+), 110 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8e86eb3/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index e6067a6..04ce8d7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.4 + * SASI index options validation (CASSANDRA-11136) * Optimize disk seek using min/max column name meta data when the LIMIT clause is used (CASSANDRA-8180) * Add LIKE support to CQL3 (CASSANDRA-11067) http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8e86eb3/doc/SASI.md -- diff --git a/doc/SASI.md b/doc/SASI.md index 90fcf65..a4762c9 100644 --- a/doc/SASI.md +++ b/doc/SASI.md @@ -70,12 +70,12 @@ first being the default. The `last_name` index is created with the mode `CONTAINS` which matches terms on suffixes instead of prefix only. Examples of this are available below and more detail can be found in the section on -[OnDiskIndex](https://github.com/xedin/sasi#ondiskindexbuilder).The +[OnDiskIndex](#ondiskindexbuilder).The `created_at` column is created with its mode set to `SPARSE`, which is meant to improve performance of querying large, dense number ranges like timestamps for data inserted every millisecond. Details of the `SPARSE` implementation can also be found in the section on the -[OnDiskIndex](https://github.com/xedin/sasi#ondiskindexbuilder). The `age` +[OnDiskIndex](#ondiskindexbuilder). The `age` index is created with the default `PREFIX` mode and no case-sensitivity or text analysis options are specified since the field is numeric. @@ -186,7 +186,7 @@ pitfalls of such a query. With SASI, while the requirement to include performance pitfalls do not exist because filtering is not performed. Details on how SASI joins data from multiple predicates is available below in the -[Implementation Details](https://github.com/xedin/sasi#implementation-details) +[Implementation Details](#implementation-details) section. ``` @@ -507,7 +507,7 @@ converts from Cassandra's internal representation of `IndexExpression`s, which has also been modified to support encoding queries that contain ORs and groupings of expressions using parentheses (see the -[Cassandra Internal Changes](https://github.com/xedin/sasi#cassandra-internal-changes) +[Cassandra Internal Changes](#cassandra-internal-changes) section below for more details). This process produces a tree of [`Operation`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java)s, which in turn may contain [`Expression`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Expression.java)s, all of which provide an alternative, more efficient, representation of the query. http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8e86eb3/src/java/org/apache/cassandra/index/TargetParser.java -- diff --git a/src/java/org/apache/cassandra/index/TargetParser.java b/src/java/org/apache/cassandra/index/TargetParser.java new file mode 100644 index 000..849ad16 --- /dev/null +++ b/src/java/org/apache/cassandra/index/TargetParser.java @@ -0,0 +1,90 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed w
[2/2] cassandra git commit: add LIKE support to CQL3 patch by xedin; reviewed by beobal for CASSANDRA-11067
add LIKE support to CQL3 patch by xedin; reviewed by beobal for CASSANDRA-11067 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/39286654 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/39286654 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/39286654 Branch: refs/heads/trunk Commit: 392866546e6377aafd018c3fcb2e124674a318dc Parents: 64cfcf0 Author: Pavel Yaskevich Authored: Mon Jan 25 19:13:36 2016 -0800 Committer: Pavel Yaskevich Committed: Fri Feb 5 11:56:23 2016 -0800 -- CHANGES.txt | 1 + doc/SASI.md | 64 +-- src/java/org/apache/cassandra/cql3/Cql.g| 43 ++ .../cassandra/cql3/MultiColumnRelation.java | 6 + .../org/apache/cassandra/cql3/Operator.java | 31 ++ .../org/apache/cassandra/cql3/Relation.java | 15 + .../cassandra/cql3/SingleColumnRelation.java| 18 +- .../apache/cassandra/cql3/TokenRelation.java| 6 + .../cql3/restrictions/AbstractRestriction.java | 6 + .../ForwardingPrimaryKeyRestrictions.java | 6 + .../cql3/restrictions/Restriction.java | 1 + .../restrictions/SingleColumnRestriction.java | 78 .../restrictions/StatementRestrictions.java | 22 +- .../apache/cassandra/db/filter/RowFilter.java | 3 + .../apache/cassandra/index/sasi/SASIIndex.java | 21 +- .../cassandra/index/sasi/conf/ColumnIndex.java | 6 + .../cassandra/index/sasi/conf/IndexMode.java| 6 + .../index/sasi/conf/view/PrefixTermTree.java| 11 +- .../index/sasi/conf/view/RangeTermTree.java | 40 +- .../cassandra/index/sasi/conf/view/View.java| 34 +- .../cassandra/index/sasi/disk/OnDiskIndex.java | 16 + .../index/sasi/disk/OnDiskIndexBuilder.java | 17 +- .../index/sasi/memory/TrieMemIndex.java | 41 +- .../cassandra/index/sasi/plan/Expression.java | 65 ++- .../cassandra/index/sasi/plan/Operation.java| 32 +- .../apache/cassandra/utils/ByteBufferUtil.java | 32 ++ .../unit/org/apache/cassandra/SchemaLoader.java | 1 + .../cassandra/index/sasi/SASIIndexTest.java | 409 +++ .../index/sasi/disk/OnDiskIndexTest.java| 13 +- .../index/sasi/plan/OperationTest.java | 4 +- .../cassandra/utils/ByteBufferUtilTest.java | 53 +++ 31 files changed, 855 insertions(+), 246 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/39286654/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 3fcca42..e7cde67 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.4 + * Add LIKE support to CQL3 (CASSANDRA-11067) * Generic Java UDF types (CASSANDRA-10819) * cqlsh: Include sub-second precision in timestamps by default (CASSANDRA-10428) * Set javac encoding to utf-8 (CASSANDRA-11077) http://git-wip-us.apache.org/repos/asf/cassandra/blob/39286654/doc/SASI.md -- diff --git a/doc/SASI.md b/doc/SASI.md index 64573b8..90fcf65 100644 --- a/doc/SASI.md +++ b/doc/SASI.md @@ -124,18 +124,34 @@ cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi; Equality & Prefix Queries -SASI supports simple queries already supported by CQL, however, for -text fields like `first_name` equals queries perform prefix searches --- this is similar to `first_name LIKE 'M*'` in SQL (excluding case -sensitivity, which is dependent on the index configuration). The -semantics of CQL's `=` were modified instead of making further -modifications of the grammar with the introduction of a `LIKE` -operator. Ideally, CQL would be modified to include such an operator, -supporting both prefix and suffix searches. +SASI supports all queries already supported by CQL, including LIKE statement +for PREFIX, CONTAINS and SUFFIX searches. ``` cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi -... WHERE first_name = 'M'; +... WHERE first_name = 'Pavel'; + + first_name | last_name | age | height | created_at +-+---+-++--- + Pavel | Yaskevich | 27 |181 | 1442959315018 + +(1 rows) +``` + +``` +cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi + ... WHERE first_name = 'pavel'; + + first_name | last_name | age | height | created_at +-+---+-++--- + Pavel | Yaskevich | 27 |181 | 1442959315018 + +(1 rows) +``` + +``` +cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi +... WHERE first_name LIKE
[1/2] cassandra git commit: add LIKE support to CQL3 patch by xedin; reviewed by beobal for CASSANDRA-11067
Repository: cassandra Updated Branches: refs/heads/trunk 64cfcf055 -> 392866546 http://git-wip-us.apache.org/repos/asf/cassandra/blob/39286654/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java index cb5ec73..b32bfc5 100644 --- a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java +++ b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java @@ -45,6 +45,8 @@ import org.apache.cassandra.dht.IPartitioner; import org.apache.cassandra.dht.Murmur3Partitioner; import org.apache.cassandra.dht.Range; import org.apache.cassandra.exceptions.ConfigurationException; +import org.apache.cassandra.exceptions.InvalidRequestException; +import org.apache.cassandra.exceptions.SyntaxException; import org.apache.cassandra.index.sasi.conf.ColumnIndex; import org.apache.cassandra.index.sasi.disk.OnDiskIndexBuilder; import org.apache.cassandra.index.sasi.exceptions.TimeQuotaExceededException; @@ -76,7 +78,7 @@ public class SASIIndexTest private static final String KS_NAME = "sasi"; private static final String CF_NAME = "test_cf"; -private static final String CLUSTRING_CF_NAME = "clustering_test_cf"; +private static final String CLUSTERING_CF_NAME = "clustering_test_cf"; @BeforeClass public static void loadSchema() throws ConfigurationException @@ -86,7 +88,7 @@ public class SASIIndexTest MigrationManager.announceNewKeyspace(KeyspaceMetadata.create(KS_NAME, KeyspaceParams.simpleTransient(1), Tables.of(SchemaLoader.sasiCFMD(KS_NAME, CF_NAME), - SchemaLoader.clusteringSASICFMD(KS_NAME, CLUSTRING_CF_NAME; + SchemaLoader.clusteringSASICFMD(KS_NAME, CLUSTERING_CF_NAME; } @After @@ -120,18 +122,24 @@ public class SASIIndexTest Set rows; -rows = getIndexed(store, 10, buildExpression(firstName, Operator.EQ, UTF8Type.instance.decompose("a"))); +rows = getIndexed(store, 10, buildExpression(firstName, Operator.LIKE_CONTAINS, UTF8Type.instance.decompose("a"))); Assert.assertTrue(rows.toString(), Arrays.equals(new String[] { "key1", "key2", "key3", "key4" }, rows.toArray(new String[rows.size()]))); -rows = getIndexed(store, 10, buildExpression(firstName, Operator.EQ, UTF8Type.instance.decompose("av"))); +rows = getIndexed(store, 10, buildExpression(firstName, Operator.LIKE_CONTAINS, UTF8Type.instance.decompose("av"))); Assert.assertTrue(rows.toString(), Arrays.equals(new String[] { "key1", "key2", "key3" }, rows.toArray(new String[rows.size()]))); -rows = getIndexed(store, 10, buildExpression(firstName, Operator.EQ, UTF8Type.instance.decompose("as"))); +rows = getIndexed(store, 10, buildExpression(firstName, Operator.LIKE_CONTAINS, UTF8Type.instance.decompose("as"))); Assert.assertTrue(rows.toString(), Arrays.equals(new String[] { "key4" }, rows.toArray(new String[rows.size()]))); -rows = getIndexed(store, 10, buildExpression(firstName, Operator.EQ, UTF8Type.instance.decompose("aw"))); +rows = getIndexed(store, 10, buildExpression(firstName, Operator.LIKE_CONTAINS, UTF8Type.instance.decompose("aw"))); Assert.assertEquals(rows.toString(), 0, rows.size()); +rows = getIndexed(store, 10, buildExpression(firstName, Operator.LIKE_SUFFIX, UTF8Type.instance.decompose("avel"))); +Assert.assertTrue(rows.toString(), Arrays.equals(new String[] { "key1", "key2", "key3" }, rows.toArray(new String[rows.size()]))); + +rows = getIndexed(store, 10, buildExpression(firstName, Operator.LIKE_SUFFIX, UTF8Type.instance.decompose("n"))); +Assert.assertTrue(rows.toString(), Arrays.equals(new String[] { "key4" }, rows.toArray(new String[rows.size()]))); + rows = getIndexed(store, 10, buildExpression(age, Operator.EQ, Int32Type.instance.decompose(27))); Assert.assertTrue(rows.toString(), Arrays.equals(new String[]{"key3", "key4"}, rows.toArray(new String[rows.size()]))); @@ -188,51 +196,60 @@ public class SASIIndexTest Set rows; rows = getIndexed(store, 10, - buildExpression(firstName, Operator.EQ, UTF8Type.instance.decompose("a")), + buildExpression(firstName, Operator.LIKE_CONTAINS, UTF8Type.instance.decompose("a")), buildExpression(age, Operator.GT, Int32Type.instance.decompose(14))); Assert.assertTrue(rows.toString(), Arrays.equals(new String[] { "key2", "key3", "key4" }, rows.t
[04/14] cassandra git commit: Integrate SASI index into Cassandra
http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/test/resources/tokenization/apache_license_header.txt -- diff --git a/test/resources/tokenization/apache_license_header.txt b/test/resources/tokenization/apache_license_header.txt new file mode 100644 index 000..d973dce --- /dev/null +++ b/test/resources/tokenization/apache_license_header.txt @@ -0,0 +1,16 @@ +/* + * 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. + */ \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/test/resources/tokenization/ja_jp_1.txt -- diff --git a/test/resources/tokenization/ja_jp_1.txt b/test/resources/tokenization/ja_jp_1.txt new file mode 100644 index 000..1a0a198 --- /dev/null +++ b/test/resources/tokenization/ja_jp_1.txt @@ -0,0 +1 @@ +å¤åæ¬ã¯é¡åã®è¨ããã¦ããªããã®ãå¤ããè¨ããã¦ããå ´åã§ãã£ã¦ãå 容ã¯ãã¾ãã¾ã§ããããæºæ°ç©èªãã®å ´åã¯ååã®æ¨é¡ã¨ãã¦ãæºæ°ç©èªããªããããã«ç¸å½ããç©èªå ¨ä½ã®æ¨é¡ãè¨ããã¦ããå ´åããããããããã®å¸åãè¨ããã¦ãããã¨ãå°ãªããªããããããçµç·¯ãããç¾å¨ã«ããã¦ä¸è¬ã«ãæºæ°ç©èªãã¨å¼ã°ãã¦ãããã®ç©èªãæ¸ãããå½æã®é¡åãä½ã§ãã£ãã®ãã¯æããã§ã¯ãªããå¤ãæ代ã®åæ¬ã注éæ¸ãªã©ã®æç®ã«è¨ããã¦ããå称ã¯å¤§ãã以ä¸ã®ç³»çµ±ã«åãããã \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/test/resources/tokenization/ja_jp_2.txt -- diff --git a/test/resources/tokenization/ja_jp_2.txt b/test/resources/tokenization/ja_jp_2.txt new file mode 100644 index 000..278b4fd --- /dev/null +++ b/test/resources/tokenization/ja_jp_2.txt @@ -0,0 +1,2 @@ +ä¸é幸ä¸ç·¨ãå¸¸ç¨ æºæ°ç©èªè¦è¦§ãæ¦èµéæ¸é¢ã1997å¹´ï¼å¹³æ9å¹´ï¼ã ISBN 4-8386-0383-5 +ãã®ä»ã«CD-ROMåãããæ¬ææ¤ç´¢ã·ã¹ãã ã¨ãã¦æ¬¡ã®ãããªãã®ãããã \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/test/resources/tokenization/lorem_ipsum.txt -- diff --git a/test/resources/tokenization/lorem_ipsum.txt b/test/resources/tokenization/lorem_ipsum.txt new file mode 100644 index 000..14a4477 --- /dev/null +++ b/test/resources/tokenization/lorem_ipsum.txt @@ -0,0 +1 @@ +"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/test/resources/tokenization/ru_ru_1.txt -- diff --git a/test/resources/tokenization/ru_ru_1.txt b/test/resources/tokenization/ru_ru_1.txt new file mode 100644 index 000..c19a9be --- /dev/null +++ b/test/resources/tokenization/ru_ru_1.txt @@ -0,0 +1,19 @@ +ÐÑл ÑабÑлаз ÑÑÑикеÑнди виÑÑпÑÑаÑоÑебÑз Ñи, кÑм нобÑз дикÑÑÑÑ ÑнвидÑÐ½Ñ ÐµÐ´. ЮÑÑ Ð·Ð¾Ð»ÑÑ Ð¸Ð¹Ð¶ÐºÐ²ÑÑ Ñа, нÑк но ÑлиÑÑ Ð²Ð¾Ð»ÑпÑÑа пÑÑкÑпиÑÑÑ. Ð«Ñ Ð²ÐµÐºÐ¶ декам плÑÑаÑонÑм, Ñа жÑмо ÑÑдÑÐºÐ°Ð±ÐµÑ Ð»ÑебÑÑавиÑÑÑ ÐºÐ²Ñй, алÑбÑкиÑÑ Ð»ÑгÑÐ½Ð´Ð¾Ñ ÑÑ Ð¿ÑÑ. ÐÑж ед аÑÑÑм нÑмквÑам ÑебиквÑÑ, Ñи амÑÑ Ð´ÑбÑÑ Ð½ÑллÑам квÑо. ÐÑ Ð·Ð¾Ð»ÑÑ Ð¿Ð¾Ð½Ð´ÑÑÑм ÑлÑÑÑеÑÑнд Ñ Ð°Ð¶, вÑÑ ÑнвидÑÐ½Ñ Ð´ÑÑиниÑеонÑм Ñкз, конгÑÑ ÐºÑÑÑÑож квÑо аÑ. + +Ðд ÑиÑÑÑнÑ
[14/14] cassandra git commit: Integrate SASI index into Cassandra
Integrate SASI index into Cassandra patch by xedin; reviewed by beobal for CASSANDRA-10661 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/72790dc8 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/72790dc8 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/72790dc8 Branch: refs/heads/trunk Commit: 72790dc8e34826b39ac696b03025ae6b7b6beb2b Parents: 11c8ca6 Author: Pavel Yaskevich Authored: Wed Dec 2 19:23:54 2015 -0800 Committer: Pavel Yaskevich Committed: Sat Jan 23 19:35:29 2016 -0800 -- CHANGES.txt | 1 + build.xml |22 +- doc/SASI.md | 768 + lib/concurrent-trees-2.4.0.jar | Bin 0 -> 118696 bytes lib/hppc-0.5.4.jar | Bin 0 -> 1305173 bytes lib/jflex-1.6.0.jar | Bin 0 -> 1048690 bytes lib/licenses/concurrent-trees-2.4.0.txt | 201 + lib/licenses/hppc-0.5.4.txt | 202 + lib/licenses/jflex-1.6.0.txt| 201 + lib/licenses/primitive-1.0.txt | 201 + lib/licenses/snowball-stemmer-1.3.0.581.1.txt | 201 + lib/primitive-1.0.jar | Bin 0 -> 52589 bytes lib/snowball-stemmer-1.3.0.581.1.jar| Bin 0 -> 93019 bytes .../cassandra/config/DatabaseDescriptor.java| 7 +- .../org/apache/cassandra/db/ColumnIndex.java| 6 +- .../apache/cassandra/db/filter/RowFilter.java |15 +- .../cassandra/index/SecondaryIndexManager.java |11 + .../apache/cassandra/index/sasi/SASIIndex.java | 288 + .../cassandra/index/sasi/SASIIndexBuilder.java | 128 + .../cassandra/index/sasi/SSTableIndex.java | 187 + .../org/apache/cassandra/index/sasi/Term.java |65 + .../cassandra/index/sasi/TermIterator.java | 208 + .../index/sasi/analyzer/AbstractAnalyzer.java |51 + .../index/sasi/analyzer/NoOpAnalyzer.java |54 + .../sasi/analyzer/NonTokenizingAnalyzer.java| 126 + .../sasi/analyzer/NonTokenizingOptions.java | 147 + .../sasi/analyzer/SUPPLEMENTARY.jflex-macro | 143 + .../index/sasi/analyzer/StandardAnalyzer.java | 194 + .../sasi/analyzer/StandardTokenizerImpl.jflex | 220 + .../analyzer/StandardTokenizerInterface.java|65 + .../sasi/analyzer/StandardTokenizerOptions.java | 272 + .../analyzer/filter/BasicResultFilters.java |76 + .../analyzer/filter/FilterPipelineBuilder.java |51 + .../analyzer/filter/FilterPipelineExecutor.java |53 + .../analyzer/filter/FilterPipelineTask.java |52 + .../sasi/analyzer/filter/StemmerFactory.java| 101 + .../sasi/analyzer/filter/StemmingFilters.java |46 + .../sasi/analyzer/filter/StopWordFactory.java | 100 + .../sasi/analyzer/filter/StopWordFilters.java |42 + .../cassandra/index/sasi/conf/ColumnIndex.java | 193 + .../cassandra/index/sasi/conf/DataTracker.java | 162 + .../cassandra/index/sasi/conf/IndexMode.java| 169 + .../index/sasi/conf/view/PrefixTermTree.java| 194 + .../index/sasi/conf/view/RangeTermTree.java |77 + .../index/sasi/conf/view/TermTree.java |58 + .../cassandra/index/sasi/conf/view/View.java| 104 + .../cassandra/index/sasi/disk/Descriptor.java |51 + .../cassandra/index/sasi/disk/OnDiskBlock.java | 142 + .../cassandra/index/sasi/disk/OnDiskIndex.java | 773 ++ .../index/sasi/disk/OnDiskIndexBuilder.java | 627 + .../index/sasi/disk/PerSSTableIndexWriter.java | 361 + .../apache/cassandra/index/sasi/disk/Token.java |42 + .../cassandra/index/sasi/disk/TokenTree.java| 519 + .../index/sasi/disk/TokenTreeBuilder.java | 839 ++ .../exceptions/TimeQuotaExceededException.java |21 + .../index/sasi/memory/IndexMemtable.java|71 + .../index/sasi/memory/KeyRangeIterator.java | 118 + .../cassandra/index/sasi/memory/MemIndex.java |51 + .../index/sasi/memory/SkipListMemIndex.java |97 + .../index/sasi/memory/TrieMemIndex.java | 254 + .../cassandra/index/sasi/plan/Expression.java | 340 + .../cassandra/index/sasi/plan/Operation.java| 477 + .../index/sasi/plan/QueryController.java| 261 + .../cassandra/index/sasi/plan/QueryPlan.java| 170 + .../cassandra/index/sasi/sa/ByteTerm.java |51 + .../cassandra/index/sasi/sa/CharTerm.java |54 + .../cassandra/index/sasi/sa/IntegralSA.java |84 + .../org/apache/cassandra/index/sasi/sa/SA.java |58 + .../cassandra/index/sasi/sa/SuffixSA.java | 143 + .../apache/cassandra/index/sasi/sa/Term.java|58 + .../cassandra/index/sasi/sa/TermIterator.java |31 + .../index/sasi/utils/AbstractIterator.ja
[13/14] cassandra git commit: Integrate SASI index into Cassandra
http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/lib/licenses/jflex-1.6.0.txt -- diff --git a/lib/licenses/jflex-1.6.0.txt b/lib/licenses/jflex-1.6.0.txt new file mode 100644 index 000..50086f8 --- /dev/null +++ b/lib/licenses/jflex-1.6.0.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 +http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + insti
[05/14] cassandra git commit: Integrate SASI index into Cassandra
http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/test/resources/tokenization/adventures_of_huckleberry_finn_mark_twain.txt -- diff --git a/test/resources/tokenization/adventures_of_huckleberry_finn_mark_twain.txt b/test/resources/tokenization/adventures_of_huckleberry_finn_mark_twain.txt new file mode 100644 index 000..27cadc3 --- /dev/null +++ b/test/resources/tokenization/adventures_of_huckleberry_finn_mark_twain.txt @@ -0,0 +1,12361 @@ + + +The Project Gutenberg EBook of Adventures of Huckleberry Finn, Complete +by Mark Twain (Samuel Clemens) + +This eBook is for the use of anyone anywhere at no cost and with almost +no restrictions whatsoever. You may copy it, give it away or re-use +it under the terms of the Project Gutenberg License included with this +eBook or online at www.gutenberg.net + +Title: Adventures of Huckleberry Finn, Complete + +Author: Mark Twain (Samuel Clemens) + +Release Date: August 20, 2006 [EBook #76] + +Last Updated: October 20, 2012] + +Language: English + + +*** START OF THIS PROJECT GUTENBERG EBOOK HUCKLEBERRY FINN *** + +Produced by David Widger + + + + + +ADVENTURES + +OF + +HUCKLEBERRY FINN + +(Tom Sawyer's Comrade) + +By Mark Twain + +Complete + + + + +CONTENTS. + +CHAPTER I. Civilizing Huck.ÂMiss Watson.ÂTom Sawyer Waits. + +CHAPTER II. The Boys Escape Jim.ÂTorn Sawyer's Gang.ÂDeep-laid Plans. + +CHAPTER III. A Good Going-over.ÂGrace Triumphant.Â"One of Tom Sawyers's +Lies". + +CHAPTER IV. Huck and the Judge.ÂSuperstition. + +CHAPTER V. Huck's Father.ÂThe Fond Parent.ÂReform. + +CHAPTER VI. He Went for Judge Thatcher.ÂHuck Decided to Leave.ÂPolitical +Economy.ÂThrashing Around. + +CHAPTER VII. Laying for Him.ÂLocked in the Cabin.ÂSinking the +Body.ÂResting. + +CHAPTER VIII. Sleeping in the Woods.ÂRaising the Dead.ÂExploring the +Island.ÂFinding Jim.ÂJim's Escape.ÂSigns.ÂBalum. + +CHAPTER IX. The Cave.ÂThe Floating House. + +CHAPTER X. The Find.ÂOld Hank Bunker.ÂIn Disguise. + +CHAPTER XI. Huck and the Woman.ÂThe Search.ÂPrevarication.ÂGoing to +Goshen. + +CHAPTER XII. Slow Navigation.ÂBorrowing Things.ÂBoarding the Wreck.ÂThe +Plotters.ÂHunting for the Boat. + +CHAPTER XIII. Escaping from the Wreck.ÂThe Watchman.ÂSinking. + +CHAPTER XIV. A General Good Time.ÂThe Harem.ÂFrench. + +CHAPTER XV. Huck Loses the Raft.ÂIn the Fog.ÂHuck Finds the Raft.ÂTrash. + +CHAPTER XVI. Expectation.ÂA White Lie.ÂFloating Currency.ÂRunning by +Cairo.ÂSwimming Ashore. + +CHAPTER XVII. An Evening Call.ÂThe Farm in Arkansaw.ÂInterior +Decorations.ÂStephen Dowling Bots.ÂPoetical Effusions. + +CHAPTER XVIII. Col. Grangerford.ÂAristocracy.ÂFeuds.ÂThe +Testament.ÂRecovering the Raft.ÂThe WoodÂpile.ÂPork and Cabbage. + +CHAPTER XIX. Tying Up DayÂtimes.ÂAn Astronomical Theory.ÂRunning a +Temperance Revival.ÂThe Duke of Bridgewater.ÂThe Troubles of Royalty. + +CHAPTER XX. Huck Explains.ÂLaying Out a Campaign.ÂWorking the +CampÂmeeting.ÂA Pirate at the CampÂmeeting.ÂThe Duke as a Printer. + +CHAPTER XXI. Sword Exercise.ÂHamlet's Soliloquy.ÂThey Loafed Around +Town.ÂA Lazy Town.ÂOld Boggs.ÂDead. + +CHAPTER XXII. Sherburn.ÂAttending the Circus.ÂIntoxication in the +Ring.ÂThe Thrilling Tragedy. + +CHAPTER XXIII. Sold.ÂRoyal Comparisons.ÂJim Gets Home-sick. + +CHAPTER XXIV. Jim in Royal Robes.ÂThey Take a Passenger.ÂGetting +Information.ÂFamily Grief. + +CHAPTER XXV. Is It Them?ÂSinging the "Doxologer."ÂAwful SquareÂFuneral +Orgies.ÂA Bad Investment . + +CHAPTER XXVI. A Pious King.ÂThe King's Clergy.ÂShe Asked His +Pardon.ÂHiding in the Room.ÂHuck Takes the Money. + +CHAPTER XXVII. The Funeral.ÂSatisfying Curiosity.ÂSuspicious of +Huck,ÂQuick Sales and Small. + +CHAPTER XXVIII. The Trip to England.Â"The Brute!"ÂMary Jane Decides to +Leave.ÂHuck Parting with Mary Jane.ÂMumps.ÂThe Opposition Line. + +CHAPTER XXIX. Contested Relationship.ÂThe King Explains the Loss.ÂA +Question of Handwriting.ÂDigging up the Corpse.ÂHuck Escapes. + +CHAPTER XXX. The King Went for Him.ÂA Royal Row.ÂPowerful Mellow. + +CHAPTER XXXI. Ominous Plans.ÂNews from Jim.ÂOld Recollections.ÂA Sheep +Story.ÂValuable Information. + +CHAPTER XXXII. Still and SundayÂlike.ÂMistaken Identity.ÂUp a Stump.ÂIn +a Dilemma. + +CHAPTER XXXIII. A Nigger Stealer.ÂSouthern Hospitality.ÂA Pretty Long +Blessing.ÂTar and Feathers. + +CHAPTER XXXIV. The Hut by the Ash Hopper.ÂOutrageous.ÂClimbing the +Lightning Rod.ÂTroubled with Witches. + +CHAPTER XXXV. Escaping Properly.ÂDark Schemes.ÂDiscrimination in +Stealing.ÂA Deep Hole. + +CHAPTER XXXVI. The Lightning Rod.ÂHis Level Best.ÂA Bequest to +Posterity.ÂA High Figure. + +CHAPTER XXXVII. The Last Shirt.ÂMooning Around.ÂSailing Orders.ÂThe +Witch Pie. + +CHAPTER XXXVIII. The Coat of Arms.ÂA Skilled Superintendent.ÂUnpleasant +Glory.ÂA Tearful Subject. + +CHAPTER XXXIX. Rats.ÂLively BedÂfellows
[11/14] cassandra git commit: Integrate SASI index into Cassandra
http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/src/java/org/apache/cassandra/index/sasi/conf/view/PrefixTermTree.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/conf/view/PrefixTermTree.java b/src/java/org/apache/cassandra/index/sasi/conf/view/PrefixTermTree.java new file mode 100644 index 000..72b6daf --- /dev/null +++ b/src/java/org/apache/cassandra/index/sasi/conf/view/PrefixTermTree.java @@ -0,0 +1,194 @@ +/* + * 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.index.sasi.conf.view; + +import java.nio.ByteBuffer; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.apache.cassandra.index.sasi.SSTableIndex; +import org.apache.cassandra.index.sasi.disk.OnDiskIndexBuilder; +import org.apache.cassandra.index.sasi.plan.Expression; +import org.apache.cassandra.index.sasi.utils.trie.KeyAnalyzer; +import org.apache.cassandra.index.sasi.utils.trie.PatriciaTrie; +import org.apache.cassandra.index.sasi.utils.trie.Trie; +import org.apache.cassandra.db.marshal.AbstractType; +import org.apache.cassandra.utils.Interval; +import org.apache.cassandra.utils.IntervalTree; + +import com.google.common.collect.Sets; + +/** + * This class is an extension over RangeTermTree for string terms, + * it is required because interval tree can't handle matching if search is on the + * prefix of min/max of the range, so for ascii/utf8 fields we build an additional + * prefix trie (including both min/max terms of the index) and do union of the results + * of the prefix tree search and results from the interval tree lookup. + */ +public class PrefixTermTree extends RangeTermTree +{ +private final OnDiskIndexBuilder.Mode mode; +private final Trie> trie; + +public PrefixTermTree(ByteBuffer min, ByteBuffer max, + Trie> trie, + IntervalTree> ranges, + OnDiskIndexBuilder.Mode mode) +{ +super(min, max, ranges); + +this.mode = mode; +this.trie = trie; +} + +public Set search(Expression e) +{ +Map> indexes = (e == null || e.lower == null || mode == OnDiskIndexBuilder.Mode.CONTAINS) +? trie : trie.prefixMap(e.lower.value); + +Set view = new HashSet<>(indexes.size()); +indexes.values().forEach(view::addAll); + +return Sets.union(view, super.search(e)); +} + +public static class Builder extends RangeTermTree.Builder +{ +private final PatriciaTrie> trie; + +protected Builder(OnDiskIndexBuilder.Mode mode, final AbstractType comparator) +{ +super(mode, comparator); +trie = new PatriciaTrie<>(new ByteBufferKeyAnalyzer(comparator)); +} + +public void addIndex(SSTableIndex index) +{ +super.addIndex(index); +addTerm(index.minTerm(), index); +addTerm(index.maxTerm(), index); +} + +public TermTree build() +{ +return new PrefixTermTree(min, max, trie, IntervalTree.build(intervals), mode); +} + +private void addTerm(ByteBuffer term, SSTableIndex index) +{ +Set indexes = trie.get(term); +if (indexes == null) +trie.put(term, (indexes = new HashSet<>())); + +indexes.add(index); +} +} + +private static class ByteBufferKeyAnalyzer implements KeyAnalyzer +{ +private final AbstractType comparator; + +public ByteBufferKeyAnalyzer(AbstractType comparator) +{ +this.comparator = comparator; +} + +/** + * A bit mask where the first bit is 1 and the others are zero + */ +private static final int MSB = 1 << Byte.SIZE-1; + +public int compare(ByteBuffer a, ByteBuffer b) +{ +return comparator.compare(a, b); +} + +public int lengthInBits(ByteBuffer o) +{ +return o.remaining() * Byte.SIZE; +} + +public boolean isBitSet(ByteBuffer key, int bi
[08/14] cassandra git commit: Integrate SASI index into Cassandra
http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/src/java/org/apache/cassandra/index/sasi/utils/RangeIntersectionIterator.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/utils/RangeIntersectionIterator.java b/src/java/org/apache/cassandra/index/sasi/utils/RangeIntersectionIterator.java new file mode 100644 index 000..0d2214a --- /dev/null +++ b/src/java/org/apache/cassandra/index/sasi/utils/RangeIntersectionIterator.java @@ -0,0 +1,281 @@ +/* + * 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.index.sasi.utils; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.PriorityQueue; + +import com.google.common.collect.Iterators; +import org.apache.cassandra.io.util.FileUtils; + +import com.google.common.annotations.VisibleForTesting; + +public class RangeIntersectionIterator +{ +protected enum Strategy +{ +BOUNCE, LOOKUP, ADAPTIVE +} + +public static , D extends CombinedValue> Builder builder() +{ +return builder(Strategy.ADAPTIVE); +} + +@VisibleForTesting +protected static , D extends CombinedValue> Builder builder(Strategy strategy) +{ +return new Builder<>(strategy); +} + +public static class Builder, D extends CombinedValue> extends RangeIterator.Builder +{ +private final Strategy strategy; + +public Builder(Strategy strategy) +{ +super(IteratorType.INTERSECTION); +this.strategy = strategy; +} + +protected RangeIterator buildIterator() +{ +// if the range is disjoint we can simply return empty +// iterator of any type, because it's not going to produce any results. +if (statistics.isDisjoint()) +return new BounceIntersectionIterator<>(statistics, new PriorityQueue>(1)); + +switch (strategy) +{ +case LOOKUP: +return new LookupIntersectionIterator<>(statistics, ranges); + +case BOUNCE: +return new BounceIntersectionIterator<>(statistics, ranges); + +case ADAPTIVE: +return statistics.sizeRatio() <= 0.01d +? new LookupIntersectionIterator<>(statistics, ranges) +: new BounceIntersectionIterator<>(statistics, ranges); + +default: +throw new IllegalStateException("Unknown strategy: " + strategy); +} +} +} + +private static abstract class AbstractIntersectionIterator, D extends CombinedValue> extends RangeIterator +{ +protected final PriorityQueue> ranges; + +private AbstractIntersectionIterator(Builder.Statistics statistics, PriorityQueue> ranges) +{ +super(statistics); +this.ranges = ranges; +} + +public void close() throws IOException +{ +for (RangeIterator range : ranges) +FileUtils.closeQuietly(range); +} +} + +/** + * Iterator which performs intersection of multiple ranges by using bouncing (merge-join) technique to identify + * common elements in the given ranges. Aforementioned "bounce" works as follows: range queue is poll'ed for the + * range with the smallest current token (main loop), that token is used to {@link RangeIterator#skipTo(Comparable)} + * other ranges, if token produced by {@link RangeIterator#skipTo(Comparable)} is equal to current "candidate" token, + * both get merged together and the same operation is repeated for next range from the queue, if returned token + * is not equal than candidate, candidate's range gets put back into the queue and the main loop gets repeated until + * next intersection token is found or at least one iterator runs out of tokens. + * + * This technique is every efficient to jump over gaps in the ranges. + * + * @param The type used to sort ranges. + * @param The container type whi
[10/14] cassandra git commit: Integrate SASI index into Cassandra
http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java b/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java new file mode 100644 index 000..5d85d00 --- /dev/null +++ b/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java @@ -0,0 +1,519 @@ +/* + * 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.index.sasi.disk; + +import java.io.IOException; +import java.util.*; + +import org.apache.cassandra.db.DecoratedKey; +import org.apache.cassandra.index.sasi.utils.AbstractIterator; +import org.apache.cassandra.index.sasi.utils.CombinedValue; +import org.apache.cassandra.index.sasi.utils.MappedBuffer; +import org.apache.cassandra.index.sasi.utils.RangeIterator; +import org.apache.cassandra.utils.MergeIterator; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Function; +import com.google.common.collect.Iterators; +import org.apache.commons.lang3.builder.HashCodeBuilder; + +import static org.apache.cassandra.index.sasi.disk.TokenTreeBuilder.EntryType; + +// Note: all of the seek-able offsets contained in TokenTree should be sizeof(long) +// even if currently only lower int portion of them if used, because that makes +// it possible to switch to mmap implementation which supports long positions +// without any on-disk format changes and/or re-indexing if one day we'll have a need to. +public class TokenTree +{ +private static final int LONG_BYTES = Long.SIZE / 8; +private static final int SHORT_BYTES = Short.SIZE / 8; + +private final Descriptor descriptor; +private final MappedBuffer file; +private final long startPos; +private final long treeMinToken; +private final long treeMaxToken; +private final long tokenCount; + +@VisibleForTesting +protected TokenTree(MappedBuffer tokenTree) +{ +this(Descriptor.CURRENT, tokenTree); +} + +public TokenTree(Descriptor d, MappedBuffer tokenTree) +{ +descriptor = d; +file = tokenTree; +startPos = file.position(); + +file.position(startPos + TokenTreeBuilder.SHARED_HEADER_BYTES); + +if (!validateMagic()) +throw new IllegalArgumentException("invalid token tree"); + +tokenCount = file.getLong(); +treeMinToken = file.getLong(); +treeMaxToken = file.getLong(); +} + +public long getCount() +{ +return tokenCount; +} + +public RangeIterator iterator(Function keyFetcher) +{ +return new TokenTreeIterator(file.duplicate(), keyFetcher); +} + +public OnDiskToken get(final long searchToken, Function keyFetcher) +{ +seekToLeaf(searchToken, file); +long leafStart = file.position(); +short leafSize = file.getShort(leafStart + 1); // skip the info byte + +file.position(leafStart + TokenTreeBuilder.BLOCK_HEADER_BYTES); // skip to tokens +short tokenIndex = searchLeaf(searchToken, leafSize); + +file.position(leafStart + TokenTreeBuilder.BLOCK_HEADER_BYTES); + +OnDiskToken token = OnDiskToken.getTokenAt(file, tokenIndex, leafSize, keyFetcher); +return token.get().equals(searchToken) ? token : null; +} + +private boolean validateMagic() +{ +switch (descriptor.version.toString()) +{ +case Descriptor.VERSION_AA: +return true; +case Descriptor.VERSION_AB: +return TokenTreeBuilder.AB_MAGIC == file.getShort(); +default: +return false; +} +} + +// finds leaf that *could* contain token +private void seekToLeaf(long token, MappedBuffer file) +{ +// this loop always seeks forward except for the first iteration +// where it may seek back to the root +long blockStart = startPos; +while (true) +{ +file.position(blockStart); + +byte info = file.get(); +boolean isLeaf = (info & 1) == 1; + +
[01/14] cassandra git commit: Integrate SASI index into Cassandra
Repository: cassandra Updated Branches: refs/heads/trunk 11c8ca6b5 -> 72790dc8e http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/test/unit/org/apache/cassandra/index/sasi/plan/OperationTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/plan/OperationTest.java b/test/unit/org/apache/cassandra/index/sasi/plan/OperationTest.java new file mode 100644 index 000..92fbf69 --- /dev/null +++ b/test/unit/org/apache/cassandra/index/sasi/plan/OperationTest.java @@ -0,0 +1,645 @@ +/* + * 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.index.sasi.plan; + +import java.nio.ByteBuffer; +import java.util.*; +import java.util.concurrent.TimeUnit; + +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; +import org.apache.cassandra.SchemaLoader; +import org.apache.cassandra.config.CFMetaData; +import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.cql3.Operator; +import org.apache.cassandra.db.*; +import org.apache.cassandra.db.filter.RowFilter; +import org.apache.cassandra.db.marshal.DoubleType; +import org.apache.cassandra.db.rows.*; +import org.apache.cassandra.index.sasi.plan.Operation.OperationType; +import org.apache.cassandra.db.marshal.Int32Type; +import org.apache.cassandra.db.marshal.LongType; +import org.apache.cassandra.db.marshal.UTF8Type; +import org.apache.cassandra.exceptions.ConfigurationException; +import org.apache.cassandra.schema.KeyspaceMetadata; +import org.apache.cassandra.schema.KeyspaceParams; +import org.apache.cassandra.schema.Tables; +import org.apache.cassandra.service.MigrationManager; +import org.apache.cassandra.utils.FBUtilities; + +import org.junit.*; + +public class OperationTest extends SchemaLoader +{ +private static final String KS_NAME = "sasi"; +private static final String CF_NAME = "test_cf"; +private static final String CLUSTERING_CF_NAME = "clustering_test_cf"; + +private static ColumnFamilyStore BACKEND; +private static ColumnFamilyStore CLUSTERING_BACKEND; + +@BeforeClass +public static void loadSchema() throws ConfigurationException +{ +System.setProperty("cassandra.config", "cassandra-murmur.yaml"); +SchemaLoader.loadSchema(); +MigrationManager.announceNewKeyspace(KeyspaceMetadata.create(KS_NAME, + KeyspaceParams.simpleTransient(1), + Tables.of(SchemaLoader.sasiCFMD(KS_NAME, CF_NAME), + SchemaLoader.clusteringSASICFMD(KS_NAME, CLUSTERING_CF_NAME; + +BACKEND = Keyspace.open(KS_NAME).getColumnFamilyStore(CF_NAME); +CLUSTERING_BACKEND = Keyspace.open(KS_NAME).getColumnFamilyStore(CLUSTERING_CF_NAME); +} + +private QueryController controller; + +@Before +public void beforeTest() +{ +controller = new QueryController(BACKEND, + PartitionRangeReadCommand.allDataRead(BACKEND.metadata, FBUtilities.nowInSeconds()), + TimeUnit.SECONDS.toMillis(10)); +} + +@After +public void afterTest() +{ +controller.finish(); +} + +@Test +public void testAnalyze() throws Exception +{ +final ColumnDefinition firstName = getColumn(UTF8Type.instance.decompose("first_name")); +final ColumnDefinition age = getColumn(UTF8Type.instance.decompose("age")); +final ColumnDefinition comment = getColumn(UTF8Type.instance.decompose("comment")); + +// age != 5 AND age > 1 AND age != 6 AND age <= 10 +Map expressions = convert(Operation.analyzeGroup(controller, OperationType.AND, + Arrays.asList(new SimpleExpression(age, Operator.NEQ, Int32Type.instance.decompose(5)), + new SimpleE
[02/14] cassandra git commit: Integrate SASI index into Cassandra
http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/test/unit/org/apache/cassandra/index/sasi/analyzer/NonTokenizingAnalyzerTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/analyzer/NonTokenizingAnalyzerTest.java b/test/unit/org/apache/cassandra/index/sasi/analyzer/NonTokenizingAnalyzerTest.java new file mode 100644 index 000..ba67853 --- /dev/null +++ b/test/unit/org/apache/cassandra/index/sasi/analyzer/NonTokenizingAnalyzerTest.java @@ -0,0 +1,78 @@ +/* + * 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.index.sasi.analyzer; + +import java.nio.ByteBuffer; + +import org.apache.cassandra.db.marshal.Int32Type; +import org.apache.cassandra.db.marshal.UTF8Type; +import org.apache.cassandra.utils.ByteBufferUtil; + +import org.junit.Assert; +import org.junit.Test; + +/** + * Tests for the non-tokenizing analyzer + */ +public class NonTokenizingAnalyzerTest +{ +@Test +public void caseInsensitiveAnalizer() throws Exception +{ +NonTokenizingAnalyzer analyzer = new NonTokenizingAnalyzer(); +NonTokenizingOptions options = NonTokenizingOptions.getDefaultOptions(); +options.setCaseSensitive(false); +analyzer.init(options, UTF8Type.instance); + +String testString = "Nip it in the bud"; +ByteBuffer toAnalyze = ByteBuffer.wrap(testString.getBytes()); +analyzer.reset(toAnalyze); +ByteBuffer analyzed = null; +while (analyzer.hasNext()) +analyzed = analyzer.next(); + Assert.assertTrue(testString.toLowerCase().equals(ByteBufferUtil.string(analyzed))); +} + +@Test +public void caseSensitiveAnalizer() throws Exception +{ +NonTokenizingAnalyzer analyzer = new NonTokenizingAnalyzer(); +NonTokenizingOptions options = NonTokenizingOptions.getDefaultOptions(); +analyzer.init(options, UTF8Type.instance); + +String testString = "Nip it in the bud"; +ByteBuffer toAnalyze = ByteBuffer.wrap(testString.getBytes()); +analyzer.reset(toAnalyze); +ByteBuffer analyzed = null; +while (analyzer.hasNext()) +analyzed = analyzer.next(); + Assert.assertFalse(testString.toLowerCase().equals(ByteBufferUtil.string(analyzed))); +} + +@Test +public void ensureIncompatibleInputSkipped() throws Exception +{ +NonTokenizingAnalyzer analyzer = new NonTokenizingAnalyzer(); +NonTokenizingOptions options = NonTokenizingOptions.getDefaultOptions(); +analyzer.init(options, Int32Type.instance); + +ByteBuffer toAnalyze = ByteBufferUtil.bytes(1); +analyzer.reset(toAnalyze); +Assert.assertTrue(!analyzer.hasNext()); +} +} http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/test/unit/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzerTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzerTest.java b/test/unit/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzerTest.java new file mode 100644 index 000..e307512 --- /dev/null +++ b/test/unit/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzerTest.java @@ -0,0 +1,196 @@ +/* + * 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.index.sasi.analyzer; +
[09/14] cassandra git commit: Integrate SASI index into Cassandra
http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/src/java/org/apache/cassandra/index/sasi/plan/Operation.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/plan/Operation.java b/src/java/org/apache/cassandra/index/sasi/plan/Operation.java new file mode 100644 index 000..1857c56 --- /dev/null +++ b/src/java/org/apache/cassandra/index/sasi/plan/Operation.java @@ -0,0 +1,477 @@ +/* + * 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.index.sasi.plan; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.*; + +import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.config.ColumnDefinition.Kind; +import org.apache.cassandra.cql3.Operator; +import org.apache.cassandra.db.filter.RowFilter; +import org.apache.cassandra.db.rows.Row; +import org.apache.cassandra.db.rows.Unfiltered; +import org.apache.cassandra.index.sasi.conf.ColumnIndex; +import org.apache.cassandra.index.sasi.analyzer.AbstractAnalyzer; +import org.apache.cassandra.index.sasi.disk.Token; +import org.apache.cassandra.index.sasi.plan.Expression.Op; +import org.apache.cassandra.index.sasi.utils.RangeIntersectionIterator; +import org.apache.cassandra.index.sasi.utils.RangeIterator; +import org.apache.cassandra.index.sasi.utils.RangeUnionIterator; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.*; +import org.apache.cassandra.utils.FBUtilities; + +public class Operation extends RangeIterator +{ +public enum OperationType +{ +AND, OR; + +public boolean apply(boolean a, boolean b) +{ +switch (this) +{ +case OR: +return a | b; + +case AND: +return a & b; + +default: +throw new AssertionError(); +} +} +} + +private final QueryController controller; + +protected final OperationType op; +protected final ListMultimap expressions; +protected final RangeIterator range; + +protected Operation left, right; + +private Operation(OperationType operation, + QueryController controller, + ListMultimap expressions, + RangeIterator range, + Operation left, Operation right) +{ +super(range); + +this.op = operation; +this.controller = controller; +this.expressions = expressions; +this.range = range; + +this.left = left; +this.right = right; +} + +/** + * Recursive "satisfies" checks based on operation + * and data from the lower level members using depth-first search + * and bubbling the results back to the top level caller. + * + * Most of the work here is done by {@link #localSatisfiedBy(Unfiltered, boolean)} + * see it's comment for details, if there are no local expressions + * assigned to Operation it will call satisfiedBy(Row) on it's children. + * + * Query: first_name = X AND (last_name = Y OR address = XYZ AND street = IL AND city = C) OR (state = 'CA' AND country = 'US') + * Row: key1: (first_name: X, last_name: Z, address: XYZ, street: IL, city: C, state: NY, country:US) + * + * #1 OR + */\ + * #2 (first_name) AND AND (state, country) + * \ + * #3(last_name) OR + * \ + * #4 AND (address, street, city) + * + * + * Evaluation of the key1 is top-down depth-first search: + * + * --- going down --- + * Level #1 is evaluated, OR expression has to pull results from it's children which are at level #2 and OR them together, + * Level #2 AND (state, country) could be be evaluated right away, AND (first_name) refers to it's "right" child from level #3 + * Level #3 OR (last_name) requests results from level #4 + * Level #4 AND (address, street, city) does logical AND between it's 3 fields, r
[03/14] cassandra git commit: Integrate SASI index into Cassandra
http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java -- diff --git a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java new file mode 100644 index 000..cb5ec73 --- /dev/null +++ b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java @@ -0,0 +1,1852 @@ +/* + * 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.index.sasi; + +import java.nio.ByteBuffer; +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +import org.apache.cassandra.SchemaLoader; +import org.apache.cassandra.config.CFMetaData; +import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.config.DatabaseDescriptor; +import org.apache.cassandra.cql3.*; +import org.apache.cassandra.cql3.Term; +import org.apache.cassandra.cql3.statements.IndexTarget; +import org.apache.cassandra.cql3.statements.SelectStatement; +import org.apache.cassandra.db.*; +import org.apache.cassandra.db.filter.ColumnFilter; +import org.apache.cassandra.db.filter.DataLimits; +import org.apache.cassandra.db.filter.RowFilter; +import org.apache.cassandra.db.marshal.*; +import org.apache.cassandra.db.partitions.PartitionUpdate; +import org.apache.cassandra.db.partitions.UnfilteredPartitionIterator; +import org.apache.cassandra.db.rows.*; +import org.apache.cassandra.dht.IPartitioner; +import org.apache.cassandra.dht.Murmur3Partitioner; +import org.apache.cassandra.dht.Range; +import org.apache.cassandra.exceptions.ConfigurationException; +import org.apache.cassandra.index.sasi.conf.ColumnIndex; +import org.apache.cassandra.index.sasi.disk.OnDiskIndexBuilder; +import org.apache.cassandra.index.sasi.exceptions.TimeQuotaExceededException; +import org.apache.cassandra.index.sasi.plan.QueryPlan; +import org.apache.cassandra.schema.IndexMetadata; +import org.apache.cassandra.schema.KeyspaceMetadata; +import org.apache.cassandra.schema.KeyspaceParams; +import org.apache.cassandra.schema.Tables; +import org.apache.cassandra.serializers.MarshalException; +import org.apache.cassandra.serializers.TypeSerializer; +import org.apache.cassandra.service.MigrationManager; +import org.apache.cassandra.service.QueryState; +import org.apache.cassandra.thrift.CqlRow; +import org.apache.cassandra.transport.messages.ResultMessage; +import org.apache.cassandra.utils.ByteBufferUtil; +import org.apache.cassandra.utils.FBUtilities; +import org.apache.cassandra.utils.Pair; + +import com.google.common.collect.Lists; +import com.google.common.util.concurrent.Uninterruptibles; + +import junit.framework.Assert; + +import org.junit.*; + +public class SASIIndexTest +{ +private static final IPartitioner PARTITIONER = new Murmur3Partitioner(); + +private static final String KS_NAME = "sasi"; +private static final String CF_NAME = "test_cf"; +private static final String CLUSTRING_CF_NAME = "clustering_test_cf"; + +@BeforeClass +public static void loadSchema() throws ConfigurationException +{ +System.setProperty("cassandra.config", "cassandra-murmur.yaml"); +SchemaLoader.loadSchema(); +MigrationManager.announceNewKeyspace(KeyspaceMetadata.create(KS_NAME, + KeyspaceParams.simpleTransient(1), + Tables.of(SchemaLoader.sasiCFMD(KS_NAME, CF_NAME), + SchemaLoader.clusteringSASICFMD(KS_NAME, CLUSTRING_CF_NAME; +} + +@After +public void cleanUp() +{ + Keyspace.open(KS_NAME).getColumnFamilyStore(CF_NAME).truncateBlocking(); +} + +@Test +public void testSingleExpressionQueries() throws Exception +{ +testSingleExpressionQueries(false); +cleanupData(); +testSingleExpressionQueries(tr
[06/14] cassandra git commit: Integrate SASI index into Cassandra
http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/src/resources/org/apache/cassandra/index/sasi/analyzer/filter/fi_ST.txt -- diff --git a/src/resources/org/apache/cassandra/index/sasi/analyzer/filter/fi_ST.txt b/src/resources/org/apache/cassandra/index/sasi/analyzer/filter/fi_ST.txt new file mode 100644 index 000..3c8bfd5 --- /dev/null +++ b/src/resources/org/apache/cassandra/index/sasi/analyzer/filter/fi_ST.txt @@ -0,0 +1,748 @@ +# Stop Words List from http://members.unine.ch/jacques.savoy/clef/index.html +aiemmin +aika +aikaa +aikaan +aikaisemmin +aikaisin +aikajen +aikana +aikoina +aikoo +aikovat +aina +ainakaan +ainakin +ainoa +ainoat +aiomme +aion +aiotte +aist +aivan +ajan +�l� +alas +alemmas +�lk��n +alkuisin +alkuun +alla +alle +aloitamme +aloitan +aloitat +aloitatte +aloitattivat +aloitettava +aloitettevaksi +aloitettu +aloitimme +aloitin +aloitit +aloititte +aloittaa +aloittamatta +aloitti +aloittivat +alta +aluksi +alussa +alusta +annettavaksi +annetteva +annettu +antaa +antamatta +antoi +aoua +apu +asia +asiaa +asian +asiasta +asiat +asioiden +asioihin +asioita +asti +avuksi +avulla +avun +avutta +edell� +edelle +edelleen +edelt� +edemm�s +edes +edess� +edest� +ehk� +ei +eik� +eilen +eiv�t +eli +ellei +elleiv�t +ellemme +ellen +ellet +ellette +emme +en +en�� +enemm�n +eniten +ennen +ensi +ensimm�inen +ensimm�iseksi +ensimm�isen +ensimm�isen� +ensimm�iset +ensimm�isi� +ensimm�isiksi +ensimm�isin� +ensimm�ist� +ensin +entinen +entisen +entisi� +entist� +entisten +er��t +er�iden +er�s +eri +eritt�in +erityisesti +esi +esiin +esill� +esimerkiksi +et +eteen +etenkin +ett� +ette +ettei +halua +haluaa +haluamatta +haluamme +haluan +haluat +haluatte +haluavat +halunnut +halusi +halusimme +halusin +halusit +halusitte +halusivat +halutessa +haluton +h�n +h�neen +h�nell� +h�nelle +h�nelt� +h�nen +h�ness� +h�nest� +h�net +he +hei +heid�n +heihin +heille +heilt� +heiss� +heist� +heit� +helposti +heti +hetkell� +hieman +huolimatta +huomenna +hyv� +hyv�� +hyv�t +hyvi� +hyvien +hyviin +hyviksi +hyville +hyvilt� +hyvin +hyvin� +hyviss� +hyvist� +ihan +ilman +ilmeisesti +itse +itse��n +itsens� +ja +j�� +j�lkeen +j�lleen +jo +johon +joiden +joihin +joiksi +joilla +joille +joilta +joissa +joista +joita +joka +jokainen +jokin +joko +joku +jolla +jolle +jolloin +jolta +jompikumpi +jonka +jonkin +jonne +joo +jopa +jos +joskus +jossa +josta +jota +jotain +joten +jotenkin +jotenkuten +jotka +jotta +jouduimme +jouduin +jouduit +jouduitte +joudumme +joudun +joudutte +joukkoon +joukossa +joukosta +joutua +joutui +joutuivat +joutumaan +joutuu +joutuvat +juuri +kahdeksan +kahdeksannen +kahdella +kahdelle +kahdelta +kahden +kahdessa +kahdesta +kahta +kahteen +kai +kaiken +kaikille +kaikilta +kaikkea +kaikki +kaikkia +kaikkiaan +kaikkialla +kaikkialle +kaikkialta +kaikkien +kaikkin +kaksi +kannalta +kannattaa +kanssa +kanssaan +kanssamme +kanssani +kanssanne +kanssasi +kauan +kauemmas +kautta +kehen +keiden +keihin +keiksi +keill� +keille +keilt� +kein� +keiss� +keist� +keit� +keitt� +keitten +keneen +keneksi +kenell� +kenelle +kenelt� +kenen +kenen� +keness� +kenest� +kenet +kenett� +kenness�st� +kerran +kerta +kertaa +kesken +keskim��rin +ket� +ketk� +kiitos +kohti +koko +kokonaan +kolmas +kolme +kolmen +kolmesti +koska +koskaan +kovin +kuin +kuinka +kuitenkaan +kuitenkin +kuka +kukaan +kukin +kumpainen +kumpainenkaan +kumpi +kumpikaan +kumpikin +kun +kuten +kuuden +kuusi +kuutta +kyll� +kymmenen +kyse +l�hekk�in +l�hell� +l�helle +l�helt� +l�hemm�s +l�hes +l�hinn� +l�htien +l�pi +liian +liki +lis�� +lis�ksi +luo +mahdollisimman +mahdollista +me +meid�n +meill� +meille +melkein +melko +menee +meneet +menemme +menen +menet +menette +menev�t +meni +menimme +menin +menit +meniv�t +menness� +mennyt +menossa +mihin +mik� +mik��n +mik�li +mikin +miksi +milloin +min� +minne +minun +minut +miss� +mist� +mit� +mit��n +miten +moi +molemmat +mones +monesti +monet +moni +moniaalla +moniaalle +moniaalta +monta +muassa +muiden +muita +muka +mukaan +mukaansa +mukana +mutta +muu +muualla +muualle +muualta +muuanne +muulloin +muun +muut +muuta +muutama +muutaman +muuten +my�hemmin +my�s +my�sk��n +my�skin +my�t� +n�iden +n�in +n�iss� +n�iss�hin +n�iss�lle +n�iss�lt� +n�iss�st� +n�it� +n�m� +ne +nelj� +nelj�� +nelj�n +niiden +niin +niist� +niit� +noin +nopeammin +nopeasti +nopeiten +nro +nuo +nyt +ohi +oikein +ole +olemme +olen +olet +olette +oleva +olevan +olevat +oli +olimme +olin +olisi +olisimme +olisin +olisit +olisitte +olisivat +olit +olitte +olivat +olla +olleet +olli +ollut +oma +omaa +omaan +omaksi +omalle +omalta +oman +omassa +omat +o
[12/14] cassandra git commit: Integrate SASI index into Cassandra
http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/src/java/org/apache/cassandra/index/sasi/analyzer/NonTokenizingOptions.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/analyzer/NonTokenizingOptions.java b/src/java/org/apache/cassandra/index/sasi/analyzer/NonTokenizingOptions.java new file mode 100644 index 000..303087b --- /dev/null +++ b/src/java/org/apache/cassandra/index/sasi/analyzer/NonTokenizingOptions.java @@ -0,0 +1,147 @@ +/* + * 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.index.sasi.analyzer; + +import java.util.Map; + +public class NonTokenizingOptions +{ +public static final String NORMALIZE_LOWERCASE = "normalize_lowercase"; +public static final String NORMALIZE_UPPERCASE = "normalize_uppercase"; +public static final String CASE_SENSITIVE = "case_sensitive"; + +private boolean caseSensitive; +private boolean upperCaseOutput; +private boolean lowerCaseOutput; + +public boolean isCaseSensitive() +{ +return caseSensitive; +} + +public void setCaseSensitive(boolean caseSensitive) +{ +this.caseSensitive = caseSensitive; +} + +public boolean shouldUpperCaseOutput() +{ +return upperCaseOutput; +} + +public void setUpperCaseOutput(boolean upperCaseOutput) +{ +this.upperCaseOutput = upperCaseOutput; +} + +public boolean shouldLowerCaseOutput() +{ +return lowerCaseOutput; +} + +public void setLowerCaseOutput(boolean lowerCaseOutput) +{ +this.lowerCaseOutput = lowerCaseOutput; +} + +public static class OptionsBuilder +{ +private boolean caseSensitive = true; +private boolean upperCaseOutput = false; +private boolean lowerCaseOutput = false; + +public OptionsBuilder() +{ +} + +public OptionsBuilder caseSensitive(boolean caseSensitive) +{ +this.caseSensitive = caseSensitive; +return this; +} + +public OptionsBuilder upperCaseOutput(boolean upperCaseOutput) +{ +this.upperCaseOutput = upperCaseOutput; +return this; +} + +public OptionsBuilder lowerCaseOutput(boolean lowerCaseOutput) +{ +this.lowerCaseOutput = lowerCaseOutput; +return this; +} + +public NonTokenizingOptions build() +{ +if (lowerCaseOutput && upperCaseOutput) +throw new IllegalArgumentException("Options to normalize terms cannot be " + +"both uppercase and lowercase at the same time"); + +NonTokenizingOptions options = new NonTokenizingOptions(); +options.setCaseSensitive(caseSensitive); +options.setUpperCaseOutput(upperCaseOutput); +options.setLowerCaseOutput(lowerCaseOutput); +return options; +} +} + +public static NonTokenizingOptions buildFromMap(Map optionsMap) +{ +OptionsBuilder optionsBuilder = new OptionsBuilder(); + +if (optionsMap.containsKey(CASE_SENSITIVE) && (optionsMap.containsKey(NORMALIZE_LOWERCASE) +|| optionsMap.containsKey(NORMALIZE_UPPERCASE))) +throw new IllegalArgumentException("case_sensitive option cannot be specified together " + +"with either normalize_lowercase or normalize_uppercase"); + +for (Map.Entry entry : optionsMap.entrySet()) +{ +switch (entry.getKey()) +{ +case NORMALIZE_LOWERCASE: +{ +boolean bool = Boolean.parseBoolean(entry.getValue()); +optionsBuilder = optionsBuilder.lowerCaseOutput(bool); +break; +} +case NORMALIZE_UPPERCASE: +{ +boolean bool = Boolean.parseBoolean(entry.getValue()); +optionsBuilder = optionsBuilder.upperCaseOutput(bool); +break; +} +case CASE_SENSITIVE: +{ +
[07/14] cassandra git commit: Integrate SASI index into Cassandra
http://git-wip-us.apache.org/repos/asf/cassandra/blob/72790dc8/src/java/org/apache/cassandra/index/sasi/utils/trie/PatriciaTrie.java -- diff --git a/src/java/org/apache/cassandra/index/sasi/utils/trie/PatriciaTrie.java b/src/java/org/apache/cassandra/index/sasi/utils/trie/PatriciaTrie.java new file mode 100644 index 000..3c672ec --- /dev/null +++ b/src/java/org/apache/cassandra/index/sasi/utils/trie/PatriciaTrie.java @@ -0,0 +1,1261 @@ +/* + * Copyright 2005-2010 Roger Kapsi, Sam Berlin + * + * Licensed 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.index.sasi.utils.trie; + +import java.io.Serializable; +import java.util.*; + +/** + * This class is taken from https://github.com/rkapsi/patricia-trie (v0.6), and slightly modified + * to correspond to Cassandra code style, as the only Patricia Trie implementation, + * which supports pluggable key comparators (e.g. commons-collections PatriciaTrie (which is based + * on rkapsi/patricia-trie project) only supports String keys) + * but unfortunately is not deployed to the maven central as a downloadable artifact. + */ + +/** + * PATRICIA {@link Trie} + * + * Practical Algorithm to Retrieve Information Coded in Alphanumeric + * + * A PATRICIA {@link Trie} is a compressed {@link Trie}. Instead of storing + * all data at the edges of the {@link Trie} (and having empty internal nodes), + * PATRICIA stores data in every node. This allows for very efficient traversal, + * insert, delete, predecessor, successor, prefix, range, and {@link #select(Object)} + * operations. All operations are performed at worst in O(K) time, where K + * is the number of bits in the largest item in the tree. In practice, + * operations actually take O(A(K)) time, where A(K) is the average number of + * bits of all items in the tree. + * + * Most importantly, PATRICIA requires very few comparisons to keys while + * doing any operation. While performing a lookup, each comparison (at most + * K of them, described above) will perform a single bit comparison against + * the given key, instead of comparing the entire key to another key. + * + * The {@link Trie} can return operations in lexicographical order using the + * {@link #traverse(Cursor)}, 'prefix', 'submap', or 'iterator' methods. The + * {@link Trie} can also scan for items that are 'bitwise' (using an XOR + * metric) by the 'select' method. Bitwise closeness is determined by the + * {@link KeyAnalyzer} returning true or false for a bit being set or not in + * a given key. + * + * Any methods here that take an {@link Object} argument may throw a + * {@link ClassCastException} if the method is expecting an instance of K + * and it isn't K. + * + * @see http://en.wikipedia.org/wiki/Radix_tree";>Radix Tree + * @see http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Tree/PATRICIA";>PATRICIA + * @see http://www.imperialviolet.org/binary/critbit.pdf";>Crit-Bit Tree + * + * @author Roger Kapsi + * @author Sam Berlin + */ +public class PatriciaTrie extends AbstractPatriciaTrie implements Serializable +{ +private static final long serialVersionUID = -2246014692353432660L; + +public PatriciaTrie(KeyAnalyzer keyAnalyzer) +{ +super(keyAnalyzer); +} + +public PatriciaTrie(KeyAnalyzer keyAnalyzer, Map m) +{ +super(keyAnalyzer, m); +} + +@Override +public Comparator comparator() +{ +return keyAnalyzer; +} + +@Override +public SortedMap prefixMap(K prefix) +{ +return lengthInBits(prefix) == 0 ? this : new PrefixRangeMap(prefix); +} + +@Override +public K firstKey() +{ +return firstEntry().getKey(); +} + +@Override +public K lastKey() +{ +TrieEntry entry = lastEntry(); +return entry != null ? entry.getKey() : null; +} + +@Override +public SortedMap headMap(K toKey) +{ +return new RangeEntryMap(null, toKey); +} + +@Override +public SortedMap subMap(K fromKey, K toKey) +{ +return new RangeEntryMap(fromKey, toKey); +} + +@Override +public SortedMap tailMap(K fromKey) +{ +return new RangeEntryMap(fromKey, null); +} + +/** + * Returns an entry strictly higher than the given key, + * or null if no such entry exists. + */ +private
cassandra git commit: Add sstable flush observer
Repository: cassandra Updated Branches: refs/heads/trunk b636b0742 -> f81a91d3f Add sstable flush observer patch by Pavel Yaskevich; reviewed by Sam Tunnicliffe for CASSANDRA-10678 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/f81a91d3 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/f81a91d3 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/f81a91d3 Branch: refs/heads/trunk Commit: f81a91d3fe0d1cd93f093c74356a1d7d018ed22f Parents: b636b07 Author: Pavel Yaskevich Authored: Fri Nov 6 18:38:47 2015 -0800 Committer: Pavel Yaskevich Committed: Thu Nov 19 14:16:59 2015 -0800 -- CHANGES.txt | 2 +- .../apache/cassandra/db/ColumnFamilyStore.java | 2 +- .../org/apache/cassandra/db/ColumnIndex.java| 18 +- .../compaction/AbstractCompactionStrategy.java | 11 +- .../db/compaction/CompactionManager.java| 2 + .../compaction/CompactionStrategyManager.java | 13 +- .../cassandra/db/compaction/Upgrader.java | 1 + .../writers/DefaultCompactionWriter.java| 1 + .../writers/MajorLeveledCompactionWriter.java | 1 + .../writers/MaxSSTableSizeWriter.java | 1 + .../SplittingSizeTieredCompactionWriter.java| 1 + src/java/org/apache/cassandra/index/Index.java | 15 ++ .../io/sstable/AbstractSSTableSimpleWriter.java | 4 +- .../cassandra/io/sstable/SSTableTxnWriter.java | 11 +- .../io/sstable/SimpleSSTableMultiWriter.java| 4 +- .../io/sstable/format/SSTableFlushObserver.java | 55 + .../io/sstable/format/SSTableWriter.java| 83 +-- .../io/sstable/format/big/BigFormat.java| 9 +- .../io/sstable/format/big/BigTableWriter.java | 8 +- .../apache/cassandra/db/RowIndexEntryTest.java | 2 +- .../unit/org/apache/cassandra/db/ScrubTest.java | 2 +- .../db/lifecycle/RealTransactionsTest.java | 1 + .../io/sstable/SSTableRewriterTest.java | 2 +- .../format/SSTableFlushObserverTest.java| 217 +++ 24 files changed, 425 insertions(+), 41 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/f81a91d3/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index dd68a3c..d4efbcc 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.2 + * Add sstable flush observer (CASSANDRA-10678) * Improve NTS endpoints calculation (CASSANDRA-10200) * Improve performance of the folderSize function (CASSANDRA-10677) * Add support for type casting in selection clause (CASSANDRA-10310) @@ -6,7 +7,6 @@ * Abort in-progress queries that time out (CASSANDRA-7392) * Add transparent data encryption core classes (CASSANDRA-9945) - 3.1 Merged from 3.0: * Correctly preserve deletion info on updated rows when notifying indexers http://git-wip-us.apache.org/repos/asf/cassandra/blob/f81a91d3/src/java/org/apache/cassandra/db/ColumnFamilyStore.java -- diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java index 23cede4..08ce2dd 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java @@ -469,7 +469,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean public SSTableMultiWriter createSSTableMultiWriter(Descriptor descriptor, long keyCount, long repairedAt, MetadataCollector metadataCollector, SerializationHeader header, LifecycleTransaction txn) { -return getCompactionStrategyManager().createSSTableMultiWriter(descriptor, keyCount, repairedAt, metadataCollector, header, txn); +return getCompactionStrategyManager().createSSTableMultiWriter(descriptor, keyCount, repairedAt, metadataCollector, header, indexManager.listIndexes(), txn); } /** call when dropping or renaming a CF. Performs mbean housekeeping and invalidates CFS to other operations */ http://git-wip-us.apache.org/repos/asf/cassandra/blob/f81a91d3/src/java/org/apache/cassandra/db/ColumnIndex.java -- diff --git a/src/java/org/apache/cassandra/db/ColumnIndex.java b/src/java/org/apache/cassandra/db/ColumnIndex.java index ede3f79..749c155 100644 --- a/src/java/org/apache/cassandra/db/ColumnIndex.java +++ b/src/java/org/apache/cassandra/db/ColumnIndex.java @@ -25,6 +25,7 @@ import com.google.common.annotations.VisibleForTesting; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.db.rows.*; import org.apache.cassandra.io.sstable.IndexHelper; +import org.apache.cassandra.io.sstable.format.SSTableFlushObs
[1/3] git commit: Fix RowIndexEntry to report correct serializedSize patch by Pavel Yaskevich; reviewed by Aleksey Yeschenko for CASSANDRA-7948
Repository: cassandra Updated Branches: refs/heads/trunk a8285fea6 -> 065cd67ab Fix RowIndexEntry to report correct serializedSize patch by Pavel Yaskevich; reviewed by Aleksey Yeschenko for CASSANDRA-7948 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/85aa794e Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/85aa794e Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/85aa794e Branch: refs/heads/trunk Commit: 85aa794e1f7ff4323a6dde0b088e0cb9e1dd3f21 Parents: 05920cb Author: Pavel Yaskevich Authored: Tue Sep 16 16:33:44 2014 -0700 Committer: Pavel Yaskevich Committed: Wed Sep 17 22:19:21 2014 -0700 -- CHANGES.txt | 1 + .../org/apache/cassandra/db/RowIndexEntry.java | 14 - .../apache/cassandra/db/RowIndexEntryTest.java | 64 3 files changed, 78 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/85aa794e/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 3ee938a..58c6647 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -11,6 +11,7 @@ * Always send Paxos commit to all replicas (CASSANDRA-7479) * Make disruptor_thrift_server invocation pool configurable (CASSANDRA-7594) * Make repair no-op when RF=1 (CASSANDRA-7864) + * Fix RowIndexEntry to report correct serializedSize (CASSANDRA-7948) Merged from 1.2: * Don't index tombstones (CASSANDRA-7828) http://git-wip-us.apache.org/repos/asf/cassandra/blob/85aa794e/src/java/org/apache/cassandra/db/RowIndexEntry.java -- diff --git a/src/java/org/apache/cassandra/db/RowIndexEntry.java b/src/java/org/apache/cassandra/db/RowIndexEntry.java index cfc7cf1..cdafd5d 100644 --- a/src/java/org/apache/cassandra/db/RowIndexEntry.java +++ b/src/java/org/apache/cassandra/db/RowIndexEntry.java @@ -45,7 +45,19 @@ public class RowIndexEntry implements IMeasurableMemory public int serializedSize() { -return TypeSizes.NATIVE.sizeof(position) + promotedSize(); +int size = TypeSizes.NATIVE.sizeof(position) + TypeSizes.NATIVE.sizeof(promotedSize()); + +if (isIndexed()) +{ +List index = columnsIndex(); + +size += DeletionTime.serializer.serializedSize(deletionTime(), TypeSizes.NATIVE); +size += TypeSizes.NATIVE.sizeof(index.size()); +for (IndexHelper.IndexInfo info : index) +size += info.serializedSize(TypeSizes.NATIVE); +} + +return size; } protected int promotedSize() http://git-wip-us.apache.org/repos/asf/cassandra/blob/85aa794e/test/unit/org/apache/cassandra/db/RowIndexEntryTest.java -- diff --git a/test/unit/org/apache/cassandra/db/RowIndexEntryTest.java b/test/unit/org/apache/cassandra/db/RowIndexEntryTest.java new file mode 100644 index 000..9728f1f --- /dev/null +++ b/test/unit/org/apache/cassandra/db/RowIndexEntryTest.java @@ -0,0 +1,64 @@ +/* + * 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; + +import java.io.IOException; + +import junit.framework.Assert; +import org.apache.cassandra.SchemaLoader; +import org.apache.cassandra.config.DatabaseDescriptor; +import org.apache.cassandra.io.util.DataOutputBuffer; +import org.apache.cassandra.utils.ByteBufferUtil; +import org.apache.cassandra.utils.FBUtilities; +import org.junit.Test; + +public class RowIndexEntryTest extends SchemaLoader +{ +@Test +public void testSerializedSize() throws IOException +{ +final RowIndexEntry simple = new RowIndexEntry(123); + +DataOutputBuffer buffer = new DataOutputBuffer(); +RowIndexEntry.serializer.serialize(simple, buffer); + +Assert.assertEquals(buffer.size(), simple.serializedSize()); + +buffer = new DataOutputBuffer(); +ColumnFamily cf = ArrayBackedSor
[3/3] git commit: Merge branch 'cassandra-2.1' into trunk
Merge branch 'cassandra-2.1' into trunk Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/065cd67a Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/065cd67a Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/065cd67a Branch: refs/heads/trunk Commit: 065cd67ab2fcac348e1b1a48bc22aa3ae3a4adfa Parents: a8285fe 8026163 Author: Pavel Yaskevich Authored: Wed Sep 17 22:35:27 2014 -0700 Committer: Pavel Yaskevich Committed: Wed Sep 17 22:35:27 2014 -0700 -- CHANGES.txt | 1 + .../org/apache/cassandra/db/RowIndexEntry.java | 16 - .../apache/cassandra/db/RowIndexEntryTest.java | 69 3 files changed, 85 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/065cd67a/CHANGES.txt --
[2/2] git commit: Merge branch cassandra-2.0 into cassandra-2.1
Merge branch cassandra-2.0 into cassandra-2.1 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/8026163d Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/8026163d Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/8026163d Branch: refs/heads/cassandra-2.1 Commit: 8026163decf3af2a0984b387acc01cfdfe44c926 Parents: ad89d44 85aa794 Author: Pavel Yaskevich Authored: Wed Sep 17 22:34:19 2014 -0700 Committer: Pavel Yaskevich Committed: Wed Sep 17 22:34:19 2014 -0700 -- CHANGES.txt | 1 + .../org/apache/cassandra/db/RowIndexEntry.java | 16 - .../apache/cassandra/db/RowIndexEntryTest.java | 69 3 files changed, 85 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/8026163d/CHANGES.txt -- diff --cc CHANGES.txt index cc8c691,58c6647..47d5591 --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -1,96 -1,9 +1,97 @@@ -2.0.11: +2.1.1 + * Invalidate prepared statements when their keyspace or table is + dropped (CASSANDRA-7566) + * cassandra-stress: fix support for NetworkTopologyStrategy (CASSANDRA-7945) + * Fix saving caches when a table is dropped (CASSANDRA-7784) + * Add better error checking of new stress profile (CASSANDRA-7716) + * Use ThreadLocalRandom and remove FBUtilities.threadLocalRandom (CASSANDRA-7934) + * Prevent operator mistakes due to simultaneous bootstrap (CASSANDRA-7069) + * cassandra-stress supports whitelist mode for node config (CASSANDRA-7658) + * GCInspector more closely tracks GC; cassandra-stress and nodetool report it (CASSANDRA-7916) + * nodetool won't output bogus ownership info without a keyspace (CASSANDRA-7173) + * Add human readable option to nodetool commands (CASSANDRA-5433) + * Don't try to set repairedAt on old sstables (CASSANDRA-7913) + * Add metrics for tracking PreparedStatement use (CASSANDRA-7719) + * (cqlsh) tab-completion for triggers (CASSANDRA-7824) + * (cqlsh) Support for query paging (CASSANDRA-7514) + * (cqlsh) Show progress of COPY operations (CASSANDRA-7789) + * Add syntax to remove multiple elements from a map (CASSANDRA-6599) + * Support non-equals conditions in lightweight transactions (CASSANDRA-6839) + * Add IF [NOT] EXISTS to create/drop triggers (CASSANDRA-7606) + * (cqlsh) Display the current logged-in user (CASSANDRA-7785) + * (cqlsh) Don't ignore CTRL-C during COPY FROM execution (CASSANDRA-7815) + * (cqlsh) Order UDTs according to cross-type dependencies in DESCRIBE + output (CASSANDRA-7659) + * (cqlsh) Fix handling of CAS statement results (CASSANDRA-7671) + * (cqlsh) COPY TO/FROM improvements (CASSANDRA-7405) + * Support list index operations with conditions (CASSANDRA-7499) + * Add max live/tombstoned cells to nodetool cfstats output (CASSANDRA-7731) + * Validate IPv6 wildcard addresses properly (CASSANDRA-7680) + * (cqlsh) Error when tracing query (CASSANDRA-7613) + * Avoid IOOBE when building SyntaxError message snippet (CASSANDRA-7569) + * SSTableExport uses correct validator to create string representation of partition + keys (CASSANDRA-7498) + * Avoid NPEs when receiving type changes for an unknown keyspace (CASSANDRA-7689) + * Add support for custom 2i validation (CASSANDRA-7575) + * Pig support for hadoop CqlInputFormat (CASSANDRA-6454) + * Add listen_interface and rpc_interface options (CASSANDRA-7417) + * Improve schema merge performance (CASSANDRA-7444) + * Adjust MT depth based on # of partition validating (CASSANDRA-5263) + * Optimise NativeCell comparisons (CASSANDRA-6755) + * Configurable client timeout for cqlsh (CASSANDRA-7516) + * Include snippet of CQL query near syntax error in messages (CASSANDRA-7111) + * Make repair -pr work with -local (CASSANDRA-7450) +Merged from 2.0: ++ * Fix RowIndexEntry to report correct serializedSize (CASSANDRA-7948) * Make CQLSSTableWriter sync within partitions (CASSANDRA-7360) * Potentially use non-local replicas in CqlConfigHelper (CASSANDRA-7906) - * Explicitly disallowing mixing multi-column and single-column + * Explicitly disallow mixing multi-column and single-column relations on clustering columns (CASSANDRA-7711) * Better error message when condition is set on PK column (CASSANDRA-7804) + * Don't send schema change responses and events for no-op DDL + statements (CASSANDRA-7600) + * (Hadoop) fix cluster initialisation for a split fetching (CASSANDRA-7774) + * Throw InvalidRequestException when queries contain relations on entire + collection columns (CASSANDRA-7506) + * (cqlsh) enable CTRL-R history search with libedit (CASSANDRA-7577) + * (Hadoop) allow ACFRW to limit nodes to local DC (CASSANDRA-7252) + * (cqlsh) cqlsh shou
[2/3] git commit: Merge branch cassandra-2.0 into cassandra-2.1
Merge branch cassandra-2.0 into cassandra-2.1 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/8026163d Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/8026163d Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/8026163d Branch: refs/heads/trunk Commit: 8026163decf3af2a0984b387acc01cfdfe44c926 Parents: ad89d44 85aa794 Author: Pavel Yaskevich Authored: Wed Sep 17 22:34:19 2014 -0700 Committer: Pavel Yaskevich Committed: Wed Sep 17 22:34:19 2014 -0700 -- CHANGES.txt | 1 + .../org/apache/cassandra/db/RowIndexEntry.java | 16 - .../apache/cassandra/db/RowIndexEntryTest.java | 69 3 files changed, 85 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/8026163d/CHANGES.txt -- diff --cc CHANGES.txt index cc8c691,58c6647..47d5591 --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -1,96 -1,9 +1,97 @@@ -2.0.11: +2.1.1 + * Invalidate prepared statements when their keyspace or table is + dropped (CASSANDRA-7566) + * cassandra-stress: fix support for NetworkTopologyStrategy (CASSANDRA-7945) + * Fix saving caches when a table is dropped (CASSANDRA-7784) + * Add better error checking of new stress profile (CASSANDRA-7716) + * Use ThreadLocalRandom and remove FBUtilities.threadLocalRandom (CASSANDRA-7934) + * Prevent operator mistakes due to simultaneous bootstrap (CASSANDRA-7069) + * cassandra-stress supports whitelist mode for node config (CASSANDRA-7658) + * GCInspector more closely tracks GC; cassandra-stress and nodetool report it (CASSANDRA-7916) + * nodetool won't output bogus ownership info without a keyspace (CASSANDRA-7173) + * Add human readable option to nodetool commands (CASSANDRA-5433) + * Don't try to set repairedAt on old sstables (CASSANDRA-7913) + * Add metrics for tracking PreparedStatement use (CASSANDRA-7719) + * (cqlsh) tab-completion for triggers (CASSANDRA-7824) + * (cqlsh) Support for query paging (CASSANDRA-7514) + * (cqlsh) Show progress of COPY operations (CASSANDRA-7789) + * Add syntax to remove multiple elements from a map (CASSANDRA-6599) + * Support non-equals conditions in lightweight transactions (CASSANDRA-6839) + * Add IF [NOT] EXISTS to create/drop triggers (CASSANDRA-7606) + * (cqlsh) Display the current logged-in user (CASSANDRA-7785) + * (cqlsh) Don't ignore CTRL-C during COPY FROM execution (CASSANDRA-7815) + * (cqlsh) Order UDTs according to cross-type dependencies in DESCRIBE + output (CASSANDRA-7659) + * (cqlsh) Fix handling of CAS statement results (CASSANDRA-7671) + * (cqlsh) COPY TO/FROM improvements (CASSANDRA-7405) + * Support list index operations with conditions (CASSANDRA-7499) + * Add max live/tombstoned cells to nodetool cfstats output (CASSANDRA-7731) + * Validate IPv6 wildcard addresses properly (CASSANDRA-7680) + * (cqlsh) Error when tracing query (CASSANDRA-7613) + * Avoid IOOBE when building SyntaxError message snippet (CASSANDRA-7569) + * SSTableExport uses correct validator to create string representation of partition + keys (CASSANDRA-7498) + * Avoid NPEs when receiving type changes for an unknown keyspace (CASSANDRA-7689) + * Add support for custom 2i validation (CASSANDRA-7575) + * Pig support for hadoop CqlInputFormat (CASSANDRA-6454) + * Add listen_interface and rpc_interface options (CASSANDRA-7417) + * Improve schema merge performance (CASSANDRA-7444) + * Adjust MT depth based on # of partition validating (CASSANDRA-5263) + * Optimise NativeCell comparisons (CASSANDRA-6755) + * Configurable client timeout for cqlsh (CASSANDRA-7516) + * Include snippet of CQL query near syntax error in messages (CASSANDRA-7111) + * Make repair -pr work with -local (CASSANDRA-7450) +Merged from 2.0: ++ * Fix RowIndexEntry to report correct serializedSize (CASSANDRA-7948) * Make CQLSSTableWriter sync within partitions (CASSANDRA-7360) * Potentially use non-local replicas in CqlConfigHelper (CASSANDRA-7906) - * Explicitly disallowing mixing multi-column and single-column + * Explicitly disallow mixing multi-column and single-column relations on clustering columns (CASSANDRA-7711) * Better error message when condition is set on PK column (CASSANDRA-7804) + * Don't send schema change responses and events for no-op DDL + statements (CASSANDRA-7600) + * (Hadoop) fix cluster initialisation for a split fetching (CASSANDRA-7774) + * Throw InvalidRequestException when queries contain relations on entire + collection columns (CASSANDRA-7506) + * (cqlsh) enable CTRL-R history search with libedit (CASSANDRA-7577) + * (Hadoop) allow ACFRW to limit nodes to local DC (CASSANDRA-7252) + * (cqlsh) cqlsh should autom
[1/2] git commit: Fix RowIndexEntry to report correct serializedSize patch by Pavel Yaskevich; reviewed by Aleksey Yeschenko for CASSANDRA-7948
Repository: cassandra Updated Branches: refs/heads/cassandra-2.1 ad89d4437 -> 8026163de Fix RowIndexEntry to report correct serializedSize patch by Pavel Yaskevich; reviewed by Aleksey Yeschenko for CASSANDRA-7948 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/85aa794e Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/85aa794e Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/85aa794e Branch: refs/heads/cassandra-2.1 Commit: 85aa794e1f7ff4323a6dde0b088e0cb9e1dd3f21 Parents: 05920cb Author: Pavel Yaskevich Authored: Tue Sep 16 16:33:44 2014 -0700 Committer: Pavel Yaskevich Committed: Wed Sep 17 22:19:21 2014 -0700 -- CHANGES.txt | 1 + .../org/apache/cassandra/db/RowIndexEntry.java | 14 - .../apache/cassandra/db/RowIndexEntryTest.java | 64 3 files changed, 78 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/85aa794e/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 3ee938a..58c6647 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -11,6 +11,7 @@ * Always send Paxos commit to all replicas (CASSANDRA-7479) * Make disruptor_thrift_server invocation pool configurable (CASSANDRA-7594) * Make repair no-op when RF=1 (CASSANDRA-7864) + * Fix RowIndexEntry to report correct serializedSize (CASSANDRA-7948) Merged from 1.2: * Don't index tombstones (CASSANDRA-7828) http://git-wip-us.apache.org/repos/asf/cassandra/blob/85aa794e/src/java/org/apache/cassandra/db/RowIndexEntry.java -- diff --git a/src/java/org/apache/cassandra/db/RowIndexEntry.java b/src/java/org/apache/cassandra/db/RowIndexEntry.java index cfc7cf1..cdafd5d 100644 --- a/src/java/org/apache/cassandra/db/RowIndexEntry.java +++ b/src/java/org/apache/cassandra/db/RowIndexEntry.java @@ -45,7 +45,19 @@ public class RowIndexEntry implements IMeasurableMemory public int serializedSize() { -return TypeSizes.NATIVE.sizeof(position) + promotedSize(); +int size = TypeSizes.NATIVE.sizeof(position) + TypeSizes.NATIVE.sizeof(promotedSize()); + +if (isIndexed()) +{ +List index = columnsIndex(); + +size += DeletionTime.serializer.serializedSize(deletionTime(), TypeSizes.NATIVE); +size += TypeSizes.NATIVE.sizeof(index.size()); +for (IndexHelper.IndexInfo info : index) +size += info.serializedSize(TypeSizes.NATIVE); +} + +return size; } protected int promotedSize() http://git-wip-us.apache.org/repos/asf/cassandra/blob/85aa794e/test/unit/org/apache/cassandra/db/RowIndexEntryTest.java -- diff --git a/test/unit/org/apache/cassandra/db/RowIndexEntryTest.java b/test/unit/org/apache/cassandra/db/RowIndexEntryTest.java new file mode 100644 index 000..9728f1f --- /dev/null +++ b/test/unit/org/apache/cassandra/db/RowIndexEntryTest.java @@ -0,0 +1,64 @@ +/* + * 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; + +import java.io.IOException; + +import junit.framework.Assert; +import org.apache.cassandra.SchemaLoader; +import org.apache.cassandra.config.DatabaseDescriptor; +import org.apache.cassandra.io.util.DataOutputBuffer; +import org.apache.cassandra.utils.ByteBufferUtil; +import org.apache.cassandra.utils.FBUtilities; +import org.junit.Test; + +public class RowIndexEntryTest extends SchemaLoader +{ +@Test +public void testSerializedSize() throws IOException +{ +final RowIndexEntry simple = new RowIndexEntry(123); + +DataOutputBuffer buffer = new DataOutputBuffer(); +RowIndexEntry.serializer.serialize(simple, buffer); + +Assert.assertEquals(buffer.size(), simple.serializedSize()); + +buffer = new DataOutputBuffer(); +ColumnFamily cf
git commit: Fix RowIndexEntry to report correct serializedSize patch by Pavel Yaskevich; reviewed by Aleksey Yeschenko for CASSANDRA-7948
Repository: cassandra Updated Branches: refs/heads/cassandra-2.0 05920cb38 -> 85aa794e1 Fix RowIndexEntry to report correct serializedSize patch by Pavel Yaskevich; reviewed by Aleksey Yeschenko for CASSANDRA-7948 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/85aa794e Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/85aa794e Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/85aa794e Branch: refs/heads/cassandra-2.0 Commit: 85aa794e1f7ff4323a6dde0b088e0cb9e1dd3f21 Parents: 05920cb Author: Pavel Yaskevich Authored: Tue Sep 16 16:33:44 2014 -0700 Committer: Pavel Yaskevich Committed: Wed Sep 17 22:19:21 2014 -0700 -- CHANGES.txt | 1 + .../org/apache/cassandra/db/RowIndexEntry.java | 14 - .../apache/cassandra/db/RowIndexEntryTest.java | 64 3 files changed, 78 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/85aa794e/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 3ee938a..58c6647 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -11,6 +11,7 @@ * Always send Paxos commit to all replicas (CASSANDRA-7479) * Make disruptor_thrift_server invocation pool configurable (CASSANDRA-7594) * Make repair no-op when RF=1 (CASSANDRA-7864) + * Fix RowIndexEntry to report correct serializedSize (CASSANDRA-7948) Merged from 1.2: * Don't index tombstones (CASSANDRA-7828) http://git-wip-us.apache.org/repos/asf/cassandra/blob/85aa794e/src/java/org/apache/cassandra/db/RowIndexEntry.java -- diff --git a/src/java/org/apache/cassandra/db/RowIndexEntry.java b/src/java/org/apache/cassandra/db/RowIndexEntry.java index cfc7cf1..cdafd5d 100644 --- a/src/java/org/apache/cassandra/db/RowIndexEntry.java +++ b/src/java/org/apache/cassandra/db/RowIndexEntry.java @@ -45,7 +45,19 @@ public class RowIndexEntry implements IMeasurableMemory public int serializedSize() { -return TypeSizes.NATIVE.sizeof(position) + promotedSize(); +int size = TypeSizes.NATIVE.sizeof(position) + TypeSizes.NATIVE.sizeof(promotedSize()); + +if (isIndexed()) +{ +List index = columnsIndex(); + +size += DeletionTime.serializer.serializedSize(deletionTime(), TypeSizes.NATIVE); +size += TypeSizes.NATIVE.sizeof(index.size()); +for (IndexHelper.IndexInfo info : index) +size += info.serializedSize(TypeSizes.NATIVE); +} + +return size; } protected int promotedSize() http://git-wip-us.apache.org/repos/asf/cassandra/blob/85aa794e/test/unit/org/apache/cassandra/db/RowIndexEntryTest.java -- diff --git a/test/unit/org/apache/cassandra/db/RowIndexEntryTest.java b/test/unit/org/apache/cassandra/db/RowIndexEntryTest.java new file mode 100644 index 000..9728f1f --- /dev/null +++ b/test/unit/org/apache/cassandra/db/RowIndexEntryTest.java @@ -0,0 +1,64 @@ +/* + * 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; + +import java.io.IOException; + +import junit.framework.Assert; +import org.apache.cassandra.SchemaLoader; +import org.apache.cassandra.config.DatabaseDescriptor; +import org.apache.cassandra.io.util.DataOutputBuffer; +import org.apache.cassandra.utils.ByteBufferUtil; +import org.apache.cassandra.utils.FBUtilities; +import org.junit.Test; + +public class RowIndexEntryTest extends SchemaLoader +{ +@Test +public void testSerializedSize() throws IOException +{ +final RowIndexEntry simple = new RowIndexEntry(123); + +DataOutputBuffer buffer = new DataOutputBuffer(); +RowIndexEntry.serializer.serialize(simple, buffer); + +Assert.assertEquals(buffer.size(), simple.serializedSize()); + +buffer = new DataOutputBuffer(); +ColumnFamily cf
git commit: bump thrift-server version to 0.3.7 to properly shutdown invocation pool shutdown patch by Pavel Yaskevich; tested by Philip Thompson for CASSANDRA-7594
Repository: cassandra Updated Branches: refs/heads/cassandra-2.0 46ef9628f -> e6f307f4e bump thrift-server version to 0.3.7 to properly shutdown invocation pool shutdown patch by Pavel Yaskevich; tested by Philip Thompson for CASSANDRA-7594 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/e6f307f4 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/e6f307f4 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/e6f307f4 Branch: refs/heads/cassandra-2.0 Commit: e6f307f4e5be4bf2cd18e153d28e2310e5f8d3da Parents: 46ef962 Author: Pavel Yaskevich Authored: Fri Sep 5 14:23:24 2014 -0700 Committer: Pavel Yaskevich Committed: Fri Sep 5 14:23:24 2014 -0700 -- build.xml | 4 ++-- lib/thrift-server-0.3.6.jar | Bin 39588 -> 0 bytes lib/thrift-server-0.3.7.jar | Bin 0 -> 39988 bytes 3 files changed, 2 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/e6f307f4/build.xml -- diff --git a/build.xml b/build.xml index f456fa8..829c873 100644 --- a/build.xml +++ b/build.xml @@ -361,7 +361,7 @@ - + @@ -467,7 +467,7 @@ - + http://git-wip-us.apache.org/repos/asf/cassandra/blob/e6f307f4/lib/thrift-server-0.3.6.jar -- diff --git a/lib/thrift-server-0.3.6.jar b/lib/thrift-server-0.3.6.jar deleted file mode 100644 index c974f75..000 Binary files a/lib/thrift-server-0.3.6.jar and /dev/null differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/e6f307f4/lib/thrift-server-0.3.7.jar -- diff --git a/lib/thrift-server-0.3.7.jar b/lib/thrift-server-0.3.7.jar new file mode 100644 index 000..1231618 Binary files /dev/null and b/lib/thrift-server-0.3.7.jar differ
git commit: Make disruptor_thrift_server invocation pool configurable patch by Pavel Yaskevich; reviewed by Jason Brown for CASSANDRA-7594
Repository: cassandra Updated Branches: refs/heads/cassandra-2.0 968ffd8dd -> b22089d7c Make disruptor_thrift_server invocation pool configurable patch by Pavel Yaskevich; reviewed by Jason Brown for CASSANDRA-7594 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b22089d7 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b22089d7 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b22089d7 Branch: refs/heads/cassandra-2.0 Commit: b22089d7c8f723defec10359e026c767cae57224 Parents: 968ffd8 Author: Pavel Yaskevich Authored: Tue Sep 2 15:44:48 2014 -0700 Committer: Pavel Yaskevich Committed: Tue Sep 2 16:14:27 2014 -0700 -- CHANGES.txt| 1 + build.xml | 4 ++-- lib/thrift-server-0.3.6.jar| Bin 0 -> 39588 bytes lib/thrift-server-internal-only-0.3.3.jar | Bin 39191 -> 0 bytes .../cassandra/thrift/THsHaDisruptorServer.java | 13 + 5 files changed, 16 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/b22089d7/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 6d77f3c..4954b7f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -5,6 +5,7 @@ * Always reject inequality on the partition key without token() (CASSANDRA-7722) * Always send Paxos commit to all replicas (CASSANDRA-7479) + * Make disruptor_thrift_server invocation pool configurable (CASSANDRA-7594) 2.0.10 http://git-wip-us.apache.org/repos/asf/cassandra/blob/b22089d7/build.xml -- diff --git a/build.xml b/build.xml index dd59bd2..f456fa8 100644 --- a/build.xml +++ b/build.xml @@ -361,7 +361,7 @@ - + @@ -467,7 +467,7 @@ - + http://git-wip-us.apache.org/repos/asf/cassandra/blob/b22089d7/lib/thrift-server-0.3.6.jar -- diff --git a/lib/thrift-server-0.3.6.jar b/lib/thrift-server-0.3.6.jar new file mode 100644 index 000..c974f75 Binary files /dev/null and b/lib/thrift-server-0.3.6.jar differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/b22089d7/lib/thrift-server-internal-only-0.3.3.jar -- diff --git a/lib/thrift-server-internal-only-0.3.3.jar b/lib/thrift-server-internal-only-0.3.3.jar deleted file mode 100644 index 6a1fbae..000 Binary files a/lib/thrift-server-internal-only-0.3.3.jar and /dev/null differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/b22089d7/src/java/org/apache/cassandra/thrift/THsHaDisruptorServer.java -- diff --git a/src/java/org/apache/cassandra/thrift/THsHaDisruptorServer.java b/src/java/org/apache/cassandra/thrift/THsHaDisruptorServer.java index e3b89d2..dd501ec 100644 --- a/src/java/org/apache/cassandra/thrift/THsHaDisruptorServer.java +++ b/src/java/org/apache/cassandra/thrift/THsHaDisruptorServer.java @@ -19,9 +19,14 @@ package org.apache.cassandra.thrift; import java.net.InetSocketAddress; +import java.util.concurrent.SynchronousQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import com.thinkaurelius.thrift.Message; import com.thinkaurelius.thrift.TDisruptorServer; +import org.apache.cassandra.concurrent.JMXEnabledThreadPoolExecutor; +import org.apache.cassandra.concurrent.NamedThreadFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -78,6 +83,13 @@ public class THsHaDisruptorServer extends TDisruptorServer throw new RuntimeException(String.format("Unable to create thrift socket to %s:%s", addr.getAddress(), addr.getPort()), e); } +ThreadPoolExecutor invoker = new JMXEnabledThreadPoolExecutor(DatabaseDescriptor.getRpcMinThreads(), + DatabaseDescriptor.getRpcMaxThreads(), + 60L, + TimeUnit.SECONDS, + new SynchronousQueue(), + new NamedThreadFactory("RPC-Thread"), "RPC-THREAD-POOL"); + com.thinkaurelius.thrift.util.TBinaryProtocol.Factory protocolFactory = new com.thinkaurelius.thrift.util.TBinaryProtocol
[3/4] git commit: fix problem with localCopy methods after CASSANDRA-6689
fix problem with localCopy methods after CASSANDRA-6689 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/3bb87d16 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/3bb87d16 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/3bb87d16 Branch: refs/heads/trunk Commit: 3bb87d1699584e4ffe412479ae898e52c67654a6 Parents: 1a3b5db Author: Pavel Yaskevich Authored: Tue Mar 25 14:44:41 2014 -0700 Committer: Pavel Yaskevich Committed: Tue Mar 25 14:45:03 2014 -0700 -- src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java | 2 +- src/java/org/apache/cassandra/db/CollationController.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/3bb87d16/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java -- diff --git a/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java b/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java index 34bc388..4a83901 100644 --- a/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java +++ b/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java @@ -94,7 +94,7 @@ public class ArrayBackedSortedColumns extends ColumnFamily final Cell[] cells = new Cell[value.getColumnCount()]; int i = 0; for (Cell cell : value) -cells[i++] = cell.localCopy(cfs, HeapAllocator.instance); +cells[i++] = cell.localCopy(HeapAllocator.instance); ColumnFamily r = new ArrayBackedSortedColumns(cfs.metadata, value.isInsertReversed(), cells, i, i); r.delete(value); return r; http://git-wip-us.apache.org/repos/asf/cassandra/blob/3bb87d16/src/java/org/apache/cassandra/db/CollationController.java -- diff --git a/src/java/org/apache/cassandra/db/CollationController.java b/src/java/org/apache/cassandra/db/CollationController.java index e839ac1..151a7c5 100644 --- a/src/java/org/apache/cassandra/db/CollationController.java +++ b/src/java/org/apache/cassandra/db/CollationController.java @@ -86,7 +86,7 @@ public class CollationController { OnDiskAtom atom = iter.next(); if (copyOnHeap) -atom = ((Cell) atom).localCopy(cfs, HeapAllocator.instance); +atom = ((Cell) atom).localCopy(HeapAllocator.instance); container.addAtom(atom); } } @@ -205,7 +205,7 @@ public class CollationController ColumnFamily newCf = cf.cloneMeShallow(ArrayBackedSortedColumns.factory, false); for (Cell cell : cf) { -newCf.addColumn(cell.localCopy(cfs, HeapAllocator.instance)); + newCf.addColumn(cell.localCopy(HeapAllocator.instance)); } cf = newCf; iter = filter.getColumnFamilyIterator(cf);
[4/4] git commit: Merge branch 'cassandra-2.1' into trunk
Merge branch 'cassandra-2.1' into trunk Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/f31f6895 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/f31f6895 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/f31f6895 Branch: refs/heads/trunk Commit: f31f68957211793f8f29334a577b1f8288e1c830 Parents: a562394 3bb87d1 Author: Pavel Yaskevich Authored: Tue Mar 25 14:45:28 2014 -0700 Committer: Pavel Yaskevich Committed: Tue Mar 25 14:45:28 2014 -0700 -- CHANGES.txt | 1 + conf/cassandra.yaml | 6 + .../org/apache/cassandra/config/Config.java | 13 +- .../cassandra/config/DatabaseDescriptor.java| 68 -- .../apache/cassandra/cql3/ColumnCondition.java | 1 - .../cassandra/db/ArrayBackedSortedColumns.java | 34 ++- .../cassandra/db/CollationController.java | 46 +++- .../apache/cassandra/db/ColumnFamilyStore.java | 87 +-- .../cassandra/db/ColumnFamilyStoreMBean.java| 2 +- src/java/org/apache/cassandra/db/Memtable.java | 72 +++--- .../apache/cassandra/db/RowIteratorFactory.java | 10 +- .../db/commitlog/CommitLogSegment.java | 3 +- .../db/composites/BoundedComposite.java | 2 +- .../cassandra/db/composites/Composite.java | 2 +- .../cassandra/db/composites/Composites.java | 2 +- .../db/composites/CompoundComposite.java| 2 +- .../db/composites/CompoundSparseCellName.java | 2 +- .../composites/CompoundSparseCellNameType.java | 2 +- .../db/composites/SimpleComposite.java | 2 +- .../db/composites/SimpleSparseCellName.java | 2 +- .../SimpleSparseInternedCellName.java | 2 +- .../apache/cassandra/db/filter/ColumnSlice.java | 2 +- .../apache/cassandra/db/filter/QueryFilter.java | 31 ++- .../AbstractSimplePerColumnSecondaryIndex.java | 21 +- .../cassandra/db/index/SecondaryIndex.java | 23 +- .../db/index/composites/CompositesIndex.java| 18 +- .../db/index/composites/CompositesSearcher.java | 37 ++- .../cassandra/db/index/keys/KeysSearcher.java | 18 +- .../cassandra/io/sstable/SSTableWriter.java | 10 + .../org/apache/cassandra/io/util/FileUtils.java | 51 ++-- .../cassandra/metrics/ColumnFamilyMetrics.java | 33 ++- .../apache/cassandra/utils/ByteBufferUtil.java | 2 +- .../utils/memory/AbstractAllocator.java | 23 +- .../utils/memory/ContextAllocator.java | 20 +- .../apache/cassandra/utils/memory/HeapPool.java | 38 ++- .../utils/memory/HeapPoolAllocator.java | 47 .../utils/memory/HeapSlabAllocator.java | 204 .../cassandra/utils/memory/HeapSlabPool.java| 34 --- .../org/apache/cassandra/utils/memory/Pool.java | 232 +++ .../cassandra/utils/memory/PoolAllocator.java | 223 +++--- .../utils/memory/PoolCleanerThread.java | 4 +- .../cassandra/utils/memory/SlabAllocator.java | 223 ++ .../apache/cassandra/utils/memory/SlabPool.java | 41 test/conf/cassandra.yaml| 1 + .../cassandra/db/CollationControllerTest.java | 13 +- .../apache/cassandra/db/RangeTombstoneTest.java | 32 ++- .../db/SecondaryIndexCellSizeTest.java | 13 +- .../db/context/CounterContextTest.java | 25 +- .../db/index/PerRowSecondaryIndexTest.java | 14 +- 49 files changed, 1047 insertions(+), 747 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/f31f6895/CHANGES.txt -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/f31f6895/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/f31f6895/test/unit/org/apache/cassandra/db/RangeTombstoneTest.java -- diff --cc test/unit/org/apache/cassandra/db/RangeTombstoneTest.java index d8d3b60,e9fc746..21fd590 --- a/test/unit/org/apache/cassandra/db/RangeTombstoneTest.java +++ b/test/unit/org/apache/cassandra/db/RangeTombstoneTest.java @@@ -42,13 -51,13 +51,14 @@@ import org.apache.cassandra.db.marshal. import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.io.sstable.SSTableReader; import org.apache.cassandra.utils.ByteBufferUtil; + import org.apache.cassandra.utils.concurrent.OpOrder; + import org.apache.cassandra.utils.memory.PoolAllocator; + import static org.apache.cassandra.Util.dk; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; - import st
[1/4] Add multiple memory allocation options for memtables patch by benedict and xedin; reviewed by marcuse and xedin for CASSANDRA-6689
Repository: cassandra Updated Branches: refs/heads/trunk a562394ce -> f31f68957 http://git-wip-us.apache.org/repos/asf/cassandra/blob/1a3b5dbc/src/java/org/apache/cassandra/utils/memory/HeapSlabAllocator.java -- diff --git a/src/java/org/apache/cassandra/utils/memory/HeapSlabAllocator.java b/src/java/org/apache/cassandra/utils/memory/HeapSlabAllocator.java deleted file mode 100644 index 4396caf..000 --- a/src/java/org/apache/cassandra/utils/memory/HeapSlabAllocator.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * 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.utils.memory; - -import java.nio.ByteBuffer; -import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.concurrent.atomic.AtomicReference; - -import org.apache.cassandra.utils.ByteBufferUtil; -import org.apache.cassandra.utils.concurrent.OpOrder; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * The SlabAllocator is a bump-the-pointer allocator that allocates - * large (2MB by default) regions and then doles them out to threads that request - * slices into the array. - * - * The purpose of this class is to combat heap fragmentation in long lived - * objects: by ensuring that all allocations with similar lifetimes - * only to large regions of contiguous memory, we ensure that large blocks - * get freed up at the same time. - * - * Otherwise, variable length byte arrays allocated end up - * interleaved throughout the heap, and the old generation gets progressively - * more fragmented until a stop-the-world compacting collection occurs. - */ -public class HeapSlabAllocator extends PoolAllocator -{ -private static final Logger logger = LoggerFactory.getLogger(HeapSlabAllocator.class); - -private final static int REGION_SIZE = 1024 * 1024; -private final static int MAX_CLONED_SIZE = 128 * 1024; // bigger than this don't go in the region - -// globally stash any Regions we allocate but are beaten to using, and use these up before allocating any more -private static final ConcurrentLinkedQueue RACE_ALLOCATED = new ConcurrentLinkedQueue<>(); - -private final AtomicReference currentRegion = new AtomicReference(); -private final AtomicInteger regionCount = new AtomicInteger(0); -private AtomicLong unslabbed = new AtomicLong(0); - -HeapSlabAllocator(Pool pool) -{ -super(pool); -} - -public ByteBuffer allocate(int size) -{ -return allocate(size, null); -} - -public ByteBuffer allocate(int size, OpOrder.Group opGroup) -{ -assert size >= 0; -if (size == 0) -return ByteBufferUtil.EMPTY_BYTE_BUFFER; - -markAllocated(size, opGroup); -// satisfy large allocations directly from JVM since they don't cause fragmentation -// as badly, and fill up our regions quickly -if (size > MAX_CLONED_SIZE) -{ -unslabbed.addAndGet(size); -return ByteBuffer.allocate(size); -} - -while (true) -{ -Region region = getRegion(); - -// Try to allocate from this region -ByteBuffer cloned = region.allocate(size); -if (cloned != null) -return cloned; - -// not enough space! -currentRegion.compareAndSet(region, null); -} -} - -public void free(ByteBuffer name) -{ -// have to assume we cannot free the memory here, and just reclaim it all when we flush -} - -/** - * Get the current region, or, if there is no current region, allocate a new one - */ -private Region getRegion() -{ -while (true) -{ -// Try to get the region -Region region = currentRegion.get(); -if (region != null) -return region; - -// No current region, so we want to allocate one. We race -// against other allocators to CAS in a Region, and if we fail we stash the region for re-use -region = RACE_ALLOCATED.
git commit: fix problem with localCopy methods after CASSANDRA-6689
Repository: cassandra Updated Branches: refs/heads/cassandra-2.1 1a3b5dbcb -> 3bb87d169 fix problem with localCopy methods after CASSANDRA-6689 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/3bb87d16 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/3bb87d16 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/3bb87d16 Branch: refs/heads/cassandra-2.1 Commit: 3bb87d1699584e4ffe412479ae898e52c67654a6 Parents: 1a3b5db Author: Pavel Yaskevich Authored: Tue Mar 25 14:44:41 2014 -0700 Committer: Pavel Yaskevich Committed: Tue Mar 25 14:45:03 2014 -0700 -- src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java | 2 +- src/java/org/apache/cassandra/db/CollationController.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/3bb87d16/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java -- diff --git a/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java b/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java index 34bc388..4a83901 100644 --- a/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java +++ b/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java @@ -94,7 +94,7 @@ public class ArrayBackedSortedColumns extends ColumnFamily final Cell[] cells = new Cell[value.getColumnCount()]; int i = 0; for (Cell cell : value) -cells[i++] = cell.localCopy(cfs, HeapAllocator.instance); +cells[i++] = cell.localCopy(HeapAllocator.instance); ColumnFamily r = new ArrayBackedSortedColumns(cfs.metadata, value.isInsertReversed(), cells, i, i); r.delete(value); return r; http://git-wip-us.apache.org/repos/asf/cassandra/blob/3bb87d16/src/java/org/apache/cassandra/db/CollationController.java -- diff --git a/src/java/org/apache/cassandra/db/CollationController.java b/src/java/org/apache/cassandra/db/CollationController.java index e839ac1..151a7c5 100644 --- a/src/java/org/apache/cassandra/db/CollationController.java +++ b/src/java/org/apache/cassandra/db/CollationController.java @@ -86,7 +86,7 @@ public class CollationController { OnDiskAtom atom = iter.next(); if (copyOnHeap) -atom = ((Cell) atom).localCopy(cfs, HeapAllocator.instance); +atom = ((Cell) atom).localCopy(HeapAllocator.instance); container.addAtom(atom); } } @@ -205,7 +205,7 @@ public class CollationController ColumnFamily newCf = cf.cloneMeShallow(ArrayBackedSortedColumns.factory, false); for (Cell cell : cf) { -newCf.addColumn(cell.localCopy(cfs, HeapAllocator.instance)); + newCf.addColumn(cell.localCopy(HeapAllocator.instance)); } cf = newCf; iter = filter.getColumnFamilyIterator(cf);
[1/2] Add multiple memory allocation options for memtables patch by benedict and xedin; reviewed by marcuse and xedin for CASSANDRA-6689
Repository: cassandra Updated Branches: refs/heads/cassandra-2.1 48847b5c0 -> 1a3b5dbcb http://git-wip-us.apache.org/repos/asf/cassandra/blob/1a3b5dbc/src/java/org/apache/cassandra/utils/memory/HeapSlabAllocator.java -- diff --git a/src/java/org/apache/cassandra/utils/memory/HeapSlabAllocator.java b/src/java/org/apache/cassandra/utils/memory/HeapSlabAllocator.java deleted file mode 100644 index 4396caf..000 --- a/src/java/org/apache/cassandra/utils/memory/HeapSlabAllocator.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * 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.utils.memory; - -import java.nio.ByteBuffer; -import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.concurrent.atomic.AtomicReference; - -import org.apache.cassandra.utils.ByteBufferUtil; -import org.apache.cassandra.utils.concurrent.OpOrder; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * The SlabAllocator is a bump-the-pointer allocator that allocates - * large (2MB by default) regions and then doles them out to threads that request - * slices into the array. - * - * The purpose of this class is to combat heap fragmentation in long lived - * objects: by ensuring that all allocations with similar lifetimes - * only to large regions of contiguous memory, we ensure that large blocks - * get freed up at the same time. - * - * Otherwise, variable length byte arrays allocated end up - * interleaved throughout the heap, and the old generation gets progressively - * more fragmented until a stop-the-world compacting collection occurs. - */ -public class HeapSlabAllocator extends PoolAllocator -{ -private static final Logger logger = LoggerFactory.getLogger(HeapSlabAllocator.class); - -private final static int REGION_SIZE = 1024 * 1024; -private final static int MAX_CLONED_SIZE = 128 * 1024; // bigger than this don't go in the region - -// globally stash any Regions we allocate but are beaten to using, and use these up before allocating any more -private static final ConcurrentLinkedQueue RACE_ALLOCATED = new ConcurrentLinkedQueue<>(); - -private final AtomicReference currentRegion = new AtomicReference(); -private final AtomicInteger regionCount = new AtomicInteger(0); -private AtomicLong unslabbed = new AtomicLong(0); - -HeapSlabAllocator(Pool pool) -{ -super(pool); -} - -public ByteBuffer allocate(int size) -{ -return allocate(size, null); -} - -public ByteBuffer allocate(int size, OpOrder.Group opGroup) -{ -assert size >= 0; -if (size == 0) -return ByteBufferUtil.EMPTY_BYTE_BUFFER; - -markAllocated(size, opGroup); -// satisfy large allocations directly from JVM since they don't cause fragmentation -// as badly, and fill up our regions quickly -if (size > MAX_CLONED_SIZE) -{ -unslabbed.addAndGet(size); -return ByteBuffer.allocate(size); -} - -while (true) -{ -Region region = getRegion(); - -// Try to allocate from this region -ByteBuffer cloned = region.allocate(size); -if (cloned != null) -return cloned; - -// not enough space! -currentRegion.compareAndSet(region, null); -} -} - -public void free(ByteBuffer name) -{ -// have to assume we cannot free the memory here, and just reclaim it all when we flush -} - -/** - * Get the current region, or, if there is no current region, allocate a new one - */ -private Region getRegion() -{ -while (true) -{ -// Try to get the region -Region region = currentRegion.get(); -if (region != null) -return region; - -// No current region, so we want to allocate one. We race -// against other allocators to CAS in a Region, and if we fail we stash the region for re-use -region = RACE_AL
[3/3] git commit: Merge branch 'cassandra-2.1' into trunk
Merge branch 'cassandra-2.1' into trunk Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7aaa390b Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7aaa390b Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7aaa390b Branch: refs/heads/trunk Commit: 7aaa390b943e20258237639729630c02eab0e38e Parents: e964c02 89338a1 Author: Pavel Yaskevich Authored: Thu Mar 13 18:04:24 2014 -0700 Committer: Pavel Yaskevich Committed: Thu Mar 13 18:04:24 2014 -0700 -- CHANGES.txt | 2 ++ .../org/apache/cassandra/stress/Operation.java | 24 +++- .../cassandra/stress/settings/SettingsLog.java | 9 +++- .../stress/util/SmartThriftClient.java | 12 -- 4 files changed, 33 insertions(+), 14 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/7aaa390b/CHANGES.txt -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/7aaa390b/tools/stress/src/org/apache/cassandra/stress/Operation.java --
[2/3] git commit: Add logging levels (minimal, normal or verbose) to stress tool patch by Benedict Elliott Smith; reviewed by Pavel Yaskevich for CASSANDRA-6849
Add logging levels (minimal, normal or verbose) to stress tool patch by Benedict Elliott Smith; reviewed by Pavel Yaskevich for CASSANDRA-6849 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/89338a16 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/89338a16 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/89338a16 Branch: refs/heads/trunk Commit: 89338a160b2d912edba92a607f5e51b5e4c69d6a Parents: df43d4e Author: Pavel Yaskevich Authored: Thu Mar 13 17:58:52 2014 -0700 Committer: Pavel Yaskevich Committed: Thu Mar 13 18:01:29 2014 -0700 -- CHANGES.txt | 1 + .../org/apache/cassandra/stress/Operation.java | 24 +++- .../cassandra/stress/settings/SettingsLog.java | 9 +++- 3 files changed, 27 insertions(+), 7 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/89338a16/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 05f1048..3fdf179 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -18,6 +18,7 @@ * Fix stress to do proper counter reads (CASSANDRA-6835) * Fix help message for stress counter_write (CASSANDRA-6824) * Fix stress smart Thrift client to pick servers correctly (CASSANDRA-6848) + * Add logging levels (minimal, normal or verbose) to stress tool (CASSANDRA-6849) Merged from 2.0: * Fix leaking validator FH in StreamWriter (CASSANDRA-6832) * fix nodetool getsstables for blob PK (CASSANDRA-6803) http://git-wip-us.apache.org/repos/asf/cassandra/blob/89338a16/tools/stress/src/org/apache/cassandra/stress/Operation.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/Operation.java b/tools/stress/src/org/apache/cassandra/stress/Operation.java index 33cca17..87afb3d 100644 --- a/tools/stress/src/org/apache/cassandra/stress/Operation.java +++ b/tools/stress/src/org/apache/cassandra/stress/Operation.java @@ -29,10 +29,7 @@ import java.util.concurrent.ThreadLocalRandom; import org.apache.cassandra.stress.generatedata.Distribution; import org.apache.cassandra.stress.generatedata.KeyGen; import org.apache.cassandra.stress.generatedata.RowGen; -import org.apache.cassandra.stress.settings.Command; -import org.apache.cassandra.stress.settings.CqlVersion; -import org.apache.cassandra.stress.settings.SettingsCommandMixed; -import org.apache.cassandra.stress.settings.StressSettings; +import org.apache.cassandra.stress.settings.*; import org.apache.cassandra.stress.util.JavaDriverClient; import org.apache.cassandra.stress.util.ThriftClient; import org.apache.cassandra.stress.util.Timer; @@ -252,7 +249,22 @@ public abstract class Operation } catch (Exception e) { -System.err.println(e); +switch (state.settings.log.level) +{ +case MINIMAL: +break; + +case NORMAL: +System.err.println(e); +break; + +case VERBOSE: +e.printStackTrace(System.err); +break; + +default: +throw new AssertionError(); +} exceptionMessage = getExceptionMessage(e); } } @@ -284,7 +296,7 @@ public abstract class Operation { if (!state.settings.command.ignoreErrors) throw new IOException(message); -else +else if (state.settings.log.level.compareTo(SettingsLog.Level.MINIMAL) > 0) System.err.println(message); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/89338a16/tools/stress/src/org/apache/cassandra/stress/settings/SettingsLog.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsLog.java b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsLog.java index a19e5dc..5657fb2 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsLog.java +++ b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsLog.java @@ -31,10 +31,15 @@ import java.util.Map; public class SettingsLog implements Serializable { +public static enum Level +{ +MINIMAL, NORMAL, VERBOSE +} public final boolean noSummary; public final File file; public final int intervalMillis; +public final Level level; public SettingsLog(Options options) { @@ -54,6 +59,7 @@ public class SettingsLog implements Serializable intervalMillis = 1000 * Integer.parseInt(interval); if
[1/3] git commit: Fix stress smart Thrift client to pick servers correctly patch by Benedict Elliott Smith; reviewed by Pavel Yaskevich for CASSANDRA-6848
Repository: cassandra Updated Branches: refs/heads/trunk e964c0278 -> 7aaa390b9 Fix stress smart Thrift client to pick servers correctly patch by Benedict Elliott Smith; reviewed by Pavel Yaskevich for CASSANDRA-6848 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/df43d4e7 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/df43d4e7 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/df43d4e7 Branch: refs/heads/trunk Commit: df43d4e73d28bb2ad9c7377bdc2ab02cbcd80248 Parents: d227aa0 Author: Pavel Yaskevich Authored: Thu Mar 13 17:51:57 2014 -0700 Committer: Pavel Yaskevich Committed: Thu Mar 13 17:52:24 2014 -0700 -- CHANGES.txt | 1 + .../apache/cassandra/stress/util/SmartThriftClient.java | 12 +--- 2 files changed, 6 insertions(+), 7 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/df43d4e7/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 4d9bc07..05f1048 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -17,6 +17,7 @@ * Change caching option syntax (CASSANDRA-6745) * Fix stress to do proper counter reads (CASSANDRA-6835) * Fix help message for stress counter_write (CASSANDRA-6824) + * Fix stress smart Thrift client to pick servers correctly (CASSANDRA-6848) Merged from 2.0: * Fix leaking validator FH in StreamWriter (CASSANDRA-6832) * fix nodetool getsstables for blob PK (CASSANDRA-6803) http://git-wip-us.apache.org/repos/asf/cassandra/blob/df43d4e7/tools/stress/src/org/apache/cassandra/stress/util/SmartThriftClient.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/util/SmartThriftClient.java b/tools/stress/src/org/apache/cassandra/stress/util/SmartThriftClient.java index 48d8b64..2782a05 100644 --- a/tools/stress/src/org/apache/cassandra/stress/util/SmartThriftClient.java +++ b/tools/stress/src/org/apache/cassandra/stress/util/SmartThriftClient.java @@ -29,6 +29,7 @@ import java.util.concurrent.atomic.AtomicInteger; import com.datastax.driver.core.Host; import com.datastax.driver.core.Metadata; +import com.google.common.collect.Iterators; import org.apache.cassandra.stress.settings.StressSettings; import org.apache.cassandra.thrift.*; import org.apache.cassandra.utils.ByteBufferUtil; @@ -108,13 +109,10 @@ public class SmartThriftClient implements ThriftClient private Client get(ByteBuffer pk) { Set hosts = metadata.getReplicas(metadata.quote(keyspace), pk); -int count = roundrobin.incrementAndGet() % hosts.size(); -if (count < 0) -count = -count; -Iterator iter = hosts.iterator(); -while (count > 0 && iter.hasNext()) -iter.next(); -Host host = iter.next(); +int pos = roundrobin.incrementAndGet() % hosts.size(); +if (pos < 0) +pos = -pos; +Host host = Iterators.get(hosts.iterator(), pos); ConcurrentLinkedQueue q = cache.get(host); if (q == null) {
git commit: Add logging levels (minimal, normal or verbose) to stress tool patch by Benedict Elliott Smith; reviewed by Pavel Yaskevich for CASSANDRA-6849
Repository: cassandra Updated Branches: refs/heads/cassandra-2.1 df43d4e73 -> 89338a160 Add logging levels (minimal, normal or verbose) to stress tool patch by Benedict Elliott Smith; reviewed by Pavel Yaskevich for CASSANDRA-6849 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/89338a16 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/89338a16 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/89338a16 Branch: refs/heads/cassandra-2.1 Commit: 89338a160b2d912edba92a607f5e51b5e4c69d6a Parents: df43d4e Author: Pavel Yaskevich Authored: Thu Mar 13 17:58:52 2014 -0700 Committer: Pavel Yaskevich Committed: Thu Mar 13 18:01:29 2014 -0700 -- CHANGES.txt | 1 + .../org/apache/cassandra/stress/Operation.java | 24 +++- .../cassandra/stress/settings/SettingsLog.java | 9 +++- 3 files changed, 27 insertions(+), 7 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/89338a16/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 05f1048..3fdf179 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -18,6 +18,7 @@ * Fix stress to do proper counter reads (CASSANDRA-6835) * Fix help message for stress counter_write (CASSANDRA-6824) * Fix stress smart Thrift client to pick servers correctly (CASSANDRA-6848) + * Add logging levels (minimal, normal or verbose) to stress tool (CASSANDRA-6849) Merged from 2.0: * Fix leaking validator FH in StreamWriter (CASSANDRA-6832) * fix nodetool getsstables for blob PK (CASSANDRA-6803) http://git-wip-us.apache.org/repos/asf/cassandra/blob/89338a16/tools/stress/src/org/apache/cassandra/stress/Operation.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/Operation.java b/tools/stress/src/org/apache/cassandra/stress/Operation.java index 33cca17..87afb3d 100644 --- a/tools/stress/src/org/apache/cassandra/stress/Operation.java +++ b/tools/stress/src/org/apache/cassandra/stress/Operation.java @@ -29,10 +29,7 @@ import java.util.concurrent.ThreadLocalRandom; import org.apache.cassandra.stress.generatedata.Distribution; import org.apache.cassandra.stress.generatedata.KeyGen; import org.apache.cassandra.stress.generatedata.RowGen; -import org.apache.cassandra.stress.settings.Command; -import org.apache.cassandra.stress.settings.CqlVersion; -import org.apache.cassandra.stress.settings.SettingsCommandMixed; -import org.apache.cassandra.stress.settings.StressSettings; +import org.apache.cassandra.stress.settings.*; import org.apache.cassandra.stress.util.JavaDriverClient; import org.apache.cassandra.stress.util.ThriftClient; import org.apache.cassandra.stress.util.Timer; @@ -252,7 +249,22 @@ public abstract class Operation } catch (Exception e) { -System.err.println(e); +switch (state.settings.log.level) +{ +case MINIMAL: +break; + +case NORMAL: +System.err.println(e); +break; + +case VERBOSE: +e.printStackTrace(System.err); +break; + +default: +throw new AssertionError(); +} exceptionMessage = getExceptionMessage(e); } } @@ -284,7 +296,7 @@ public abstract class Operation { if (!state.settings.command.ignoreErrors) throw new IOException(message); -else +else if (state.settings.log.level.compareTo(SettingsLog.Level.MINIMAL) > 0) System.err.println(message); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/89338a16/tools/stress/src/org/apache/cassandra/stress/settings/SettingsLog.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsLog.java b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsLog.java index a19e5dc..5657fb2 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsLog.java +++ b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsLog.java @@ -31,10 +31,15 @@ import java.util.Map; public class SettingsLog implements Serializable { +public static enum Level +{ +MINIMAL, NORMAL, VERBOSE +} public final boolean noSummary; public final File file; public final int intervalMillis; +public final Level level; public SettingsLog(Options options) { @@ -54,6 +59,7 @@ public class SettingsLog i
git commit: Fix stress smart Thrift client to pick servers correctly patch by Benedict Elliott Smith; reviewed by Pavel Yaskevich for CASSANDRA-6848
Repository: cassandra Updated Branches: refs/heads/cassandra-2.1 d227aa0ec -> df43d4e73 Fix stress smart Thrift client to pick servers correctly patch by Benedict Elliott Smith; reviewed by Pavel Yaskevich for CASSANDRA-6848 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/df43d4e7 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/df43d4e7 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/df43d4e7 Branch: refs/heads/cassandra-2.1 Commit: df43d4e73d28bb2ad9c7377bdc2ab02cbcd80248 Parents: d227aa0 Author: Pavel Yaskevich Authored: Thu Mar 13 17:51:57 2014 -0700 Committer: Pavel Yaskevich Committed: Thu Mar 13 17:52:24 2014 -0700 -- CHANGES.txt | 1 + .../apache/cassandra/stress/util/SmartThriftClient.java | 12 +--- 2 files changed, 6 insertions(+), 7 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/df43d4e7/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 4d9bc07..05f1048 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -17,6 +17,7 @@ * Change caching option syntax (CASSANDRA-6745) * Fix stress to do proper counter reads (CASSANDRA-6835) * Fix help message for stress counter_write (CASSANDRA-6824) + * Fix stress smart Thrift client to pick servers correctly (CASSANDRA-6848) Merged from 2.0: * Fix leaking validator FH in StreamWriter (CASSANDRA-6832) * fix nodetool getsstables for blob PK (CASSANDRA-6803) http://git-wip-us.apache.org/repos/asf/cassandra/blob/df43d4e7/tools/stress/src/org/apache/cassandra/stress/util/SmartThriftClient.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/util/SmartThriftClient.java b/tools/stress/src/org/apache/cassandra/stress/util/SmartThriftClient.java index 48d8b64..2782a05 100644 --- a/tools/stress/src/org/apache/cassandra/stress/util/SmartThriftClient.java +++ b/tools/stress/src/org/apache/cassandra/stress/util/SmartThriftClient.java @@ -29,6 +29,7 @@ import java.util.concurrent.atomic.AtomicInteger; import com.datastax.driver.core.Host; import com.datastax.driver.core.Metadata; +import com.google.common.collect.Iterators; import org.apache.cassandra.stress.settings.StressSettings; import org.apache.cassandra.thrift.*; import org.apache.cassandra.utils.ByteBufferUtil; @@ -108,13 +109,10 @@ public class SmartThriftClient implements ThriftClient private Client get(ByteBuffer pk) { Set hosts = metadata.getReplicas(metadata.quote(keyspace), pk); -int count = roundrobin.incrementAndGet() % hosts.size(); -if (count < 0) -count = -count; -Iterator iter = hosts.iterator(); -while (count > 0 && iter.hasNext()) -iter.next(); -Host host = iter.next(); +int pos = roundrobin.incrementAndGet() % hosts.size(); +if (pos < 0) +pos = -pos; +Host host = Iterators.get(hosts.iterator(), pos); ConcurrentLinkedQueue q = cache.get(host); if (q == null) {
[2/2] git commit: Merge branch 'cassandra-2.1' into trunk
Merge branch 'cassandra-2.1' into trunk Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/46ed72d7 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/46ed72d7 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/46ed72d7 Branch: refs/heads/trunk Commit: 46ed72d731906e11db785213c57399bbabd34482 Parents: 17af71e 92381fd Author: Pavel Yaskevich Authored: Thu Mar 13 14:57:11 2014 -0700 Committer: Pavel Yaskevich Committed: Thu Mar 13 14:57:11 2014 -0700 -- CHANGES.txt | 1 + .../apache/cassandra/stress/StressAction.java | 10 +++--- .../cassandra/stress/settings/Command.java | 32 .../stress/settings/SettingsCommand.java| 8 +++-- .../cassandra/stress/settings/SettingsKey.java | 2 +- .../cassandra/stress/settings/SettingsMisc.java | 5 +-- .../cassandra/stress/settings/SettingsRate.java | 2 +- .../stress/settings/StressSettings.java | 2 +- 8 files changed, 38 insertions(+), 24 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/46ed72d7/CHANGES.txt --
[1/2] git commit: Fix help message for stress counter_write patch by Benedict Elliott Smith; reviewed by Pavel Yaskevich for CASSANDRA-6824
Repository: cassandra Updated Branches: refs/heads/trunk 17af71ee3 -> 46ed72d73 Fix help message for stress counter_write patch by Benedict Elliott Smith; reviewed by Pavel Yaskevich for CASSANDRA-6824 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/92381fd2 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/92381fd2 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/92381fd2 Branch: refs/heads/trunk Commit: 92381fd26970f53a3f45454a036db20592a72f34 Parents: f49df8c Author: Pavel Yaskevich Authored: Thu Mar 13 14:53:01 2014 -0700 Committer: Pavel Yaskevich Committed: Thu Mar 13 14:56:52 2014 -0700 -- CHANGES.txt | 1 + .../apache/cassandra/stress/StressAction.java | 10 +++--- .../cassandra/stress/settings/Command.java | 32 .../stress/settings/SettingsCommand.java| 8 +++-- .../cassandra/stress/settings/SettingsKey.java | 2 +- .../cassandra/stress/settings/SettingsMisc.java | 5 +-- .../cassandra/stress/settings/SettingsRate.java | 2 +- .../stress/settings/StressSettings.java | 2 +- 8 files changed, 38 insertions(+), 24 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/92381fd2/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 6a44d80..4d9bc07 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -16,6 +16,7 @@ * Fix potentially repairing with wrong nodes (CASSANDRA-6808) * Change caching option syntax (CASSANDRA-6745) * Fix stress to do proper counter reads (CASSANDRA-6835) + * Fix help message for stress counter_write (CASSANDRA-6824) Merged from 2.0: * Fix leaking validator FH in StreamWriter (CASSANDRA-6832) * fix nodetool getsstables for blob PK (CASSANDRA-6803) http://git-wip-us.apache.org/repos/asf/cassandra/blob/92381fd2/tools/stress/src/org/apache/cassandra/stress/StressAction.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/StressAction.java b/tools/stress/src/org/apache/cassandra/stress/StressAction.java index e7cdd0b..07ba1d8 100644 --- a/tools/stress/src/org/apache/cassandra/stress/StressAction.java +++ b/tools/stress/src/org/apache/cassandra/stress/StressAction.java @@ -464,7 +464,7 @@ public class StressAction implements Runnable } -case COUNTERREAD: +case COUNTER_READ: switch(state.settings.mode.style) { case THRIFT: @@ -488,7 +488,7 @@ public class StressAction implements Runnable throw new UnsupportedOperationException(); } -case COUNTERWRITE: +case COUNTER_WRITE: switch(state.settings.mode.style) { case THRIFT: @@ -500,7 +500,7 @@ public class StressAction implements Runnable throw new UnsupportedOperationException(); } -case RANGESLICE: +case RANGE_SLICE: switch(state.settings.mode.style) { case THRIFT: @@ -512,7 +512,7 @@ public class StressAction implements Runnable throw new UnsupportedOperationException(); } -case IRANGESLICE: +case INDEXED_RANGE_SLICE: switch(state.settings.mode.style) { case THRIFT: @@ -524,7 +524,7 @@ public class StressAction implements Runnable throw new UnsupportedOperationException(); } -case READMULTI: +case READ_MULTI: switch(state.settings.mode.style) { case THRIFT: http://git-wip-us.apache.org/repos/asf/cassandra/blob/92381fd2/tools/stress/src/org/apache/cassandra/stress/settings/Command.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/Command.java b/tools/stress/src/org/apache/cassandra/stress/settings/Command.java index d0350ad..ac10014 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/Command.java +++ b/tools/stress/src/org/apache/cassandra/stress/settings/Command.java @@ -21,8 +21,9 @@ package org.apache.cassandra.stress.settings; */ -import java.util.HashMap; -import java.util.Map; +import java.util.*; + +import com.google.common.collect.ImmutableList; public enum Command { @@ -40,25 +41,25 @@ public enum Command "Interleaving of any basic commands, with configurable ratio and distribution - the cluster must first be popu
git commit: Fix help message for stress counter_write patch by Benedict Elliott Smith; reviewed by Pavel Yaskevich for CASSANDRA-6824
Repository: cassandra Updated Branches: refs/heads/cassandra-2.1 f49df8c9b -> 92381fd26 Fix help message for stress counter_write patch by Benedict Elliott Smith; reviewed by Pavel Yaskevich for CASSANDRA-6824 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/92381fd2 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/92381fd2 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/92381fd2 Branch: refs/heads/cassandra-2.1 Commit: 92381fd26970f53a3f45454a036db20592a72f34 Parents: f49df8c Author: Pavel Yaskevich Authored: Thu Mar 13 14:53:01 2014 -0700 Committer: Pavel Yaskevich Committed: Thu Mar 13 14:56:52 2014 -0700 -- CHANGES.txt | 1 + .../apache/cassandra/stress/StressAction.java | 10 +++--- .../cassandra/stress/settings/Command.java | 32 .../stress/settings/SettingsCommand.java| 8 +++-- .../cassandra/stress/settings/SettingsKey.java | 2 +- .../cassandra/stress/settings/SettingsMisc.java | 5 +-- .../cassandra/stress/settings/SettingsRate.java | 2 +- .../stress/settings/StressSettings.java | 2 +- 8 files changed, 38 insertions(+), 24 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/92381fd2/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 6a44d80..4d9bc07 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -16,6 +16,7 @@ * Fix potentially repairing with wrong nodes (CASSANDRA-6808) * Change caching option syntax (CASSANDRA-6745) * Fix stress to do proper counter reads (CASSANDRA-6835) + * Fix help message for stress counter_write (CASSANDRA-6824) Merged from 2.0: * Fix leaking validator FH in StreamWriter (CASSANDRA-6832) * fix nodetool getsstables for blob PK (CASSANDRA-6803) http://git-wip-us.apache.org/repos/asf/cassandra/blob/92381fd2/tools/stress/src/org/apache/cassandra/stress/StressAction.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/StressAction.java b/tools/stress/src/org/apache/cassandra/stress/StressAction.java index e7cdd0b..07ba1d8 100644 --- a/tools/stress/src/org/apache/cassandra/stress/StressAction.java +++ b/tools/stress/src/org/apache/cassandra/stress/StressAction.java @@ -464,7 +464,7 @@ public class StressAction implements Runnable } -case COUNTERREAD: +case COUNTER_READ: switch(state.settings.mode.style) { case THRIFT: @@ -488,7 +488,7 @@ public class StressAction implements Runnable throw new UnsupportedOperationException(); } -case COUNTERWRITE: +case COUNTER_WRITE: switch(state.settings.mode.style) { case THRIFT: @@ -500,7 +500,7 @@ public class StressAction implements Runnable throw new UnsupportedOperationException(); } -case RANGESLICE: +case RANGE_SLICE: switch(state.settings.mode.style) { case THRIFT: @@ -512,7 +512,7 @@ public class StressAction implements Runnable throw new UnsupportedOperationException(); } -case IRANGESLICE: +case INDEXED_RANGE_SLICE: switch(state.settings.mode.style) { case THRIFT: @@ -524,7 +524,7 @@ public class StressAction implements Runnable throw new UnsupportedOperationException(); } -case READMULTI: +case READ_MULTI: switch(state.settings.mode.style) { case THRIFT: http://git-wip-us.apache.org/repos/asf/cassandra/blob/92381fd2/tools/stress/src/org/apache/cassandra/stress/settings/Command.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/Command.java b/tools/stress/src/org/apache/cassandra/stress/settings/Command.java index d0350ad..ac10014 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/Command.java +++ b/tools/stress/src/org/apache/cassandra/stress/settings/Command.java @@ -21,8 +21,9 @@ package org.apache.cassandra.stress.settings; */ -import java.util.HashMap; -import java.util.Map; +import java.util.*; + +import com.google.common.collect.ImmutableList; public enum Command { @@ -40,25 +41,25 @@ public enum Command "Interleaving of any basic commands, with configurable ratio and distribution - the cluster mu
[14/15] git commit: merge from 2.0
merge from 2.0 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/4c22b165 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/4c22b165 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/4c22b165 Branch: refs/heads/trunk Commit: 4c22b165cb5ba89f0454f563eeb76e4de2b01367 Parents: a2ceb22 da2d971 Author: Jonathan Ellis Authored: Thu Mar 13 13:14:15 2014 -0500 Committer: Jonathan Ellis Committed: Thu Mar 13 13:14:15 2014 -0500 -- CHANGES.txt | 1 + src/java/org/apache/cassandra/streaming/StreamWriter.java | 8 2 files changed, 5 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/4c22b165/CHANGES.txt -- diff --cc CHANGES.txt index eb82a1c,e208e21..6a44d80 --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -1,23 -1,5 +1,24 @@@ -2.0.7 +2.1.0-beta2 + * Apply DONTNEED fadvise to commitlog segments (CASSANDRA-6759) + * Switch CRC component to Adler and include it for compressed sstables + (CASSANDRA-4165) + * Allow cassandra-stress to set compaction strategy options (CASSANDRA-6451) + * Add broadcast_rpc_address option to cassandra.yaml (CASSANDRA-5899) + * Auto reload GossipingPropertyFileSnitch config (CASSANDRA-5897) + * Fix overflow of memtable_total_space_in_mb (CASSANDRA-6573) + * Fix ABTC NPE and apply update function correctly (CASSANDRA-6692) + * Allow nodetool to use a file or prompt for password (CASSANDRA-6660) + * Fix AIOOBE when concurrently accessing ABSC (CASSANDRA-6742) + * Fix assertion error in ALTER TYPE RENAME (CASSANDRA-6705) + * Scrub should not always clear out repaired status (CASSANDRA-5351) + * Improve handling of range tombstone for wide partitions (CASSANDRA-6446) + * Fix ClassCastException for compact table with composites (CASSANDRA-6738) + * Fix potentially repairing with wrong nodes (CASSANDRA-6808) + * Change caching option syntax (CASSANDRA-6745) + * Fix stress to do proper counter reads (CASSANDRA-6835) +Merged from 2.0: + * Fix leaking validator FH in StreamWriter (CASSANDRA-6832) + * fix nodetool getsstables for blob PK (CASSANDRA-6803) * Fix saving triggers to schema (CASSANDRA-6789) * Fix trigger mutations when base mutation list is immutable (CASSANDRA-6790) * Fix accounting in FileCacheService to allow re-using RAR (CASSANDRA-6838) http://git-wip-us.apache.org/repos/asf/cassandra/blob/4c22b165/src/java/org/apache/cassandra/streaming/StreamWriter.java --
[11/15] git commit: Merge remote-tracking branch 'origin/cassandra-2.1' into cassandra-2.1
Merge remote-tracking branch 'origin/cassandra-2.1' into cassandra-2.1 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c3429658 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c3429658 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c3429658 Branch: refs/heads/trunk Commit: c342965810302bf13ed4bbb2f2301c6358dfb4a4 Parents: 105dcdb fab5509 Author: Jonathan Ellis Authored: Thu Mar 13 13:06:28 2014 -0500 Committer: Jonathan Ellis Committed: Thu Mar 13 13:06:28 2014 -0500 -- pylib/cqlshlib/cql3handling.py | 6 -- 1 file changed, 4 insertions(+), 2 deletions(-) --
[10/15] git commit: merge from 2.0
merge from 2.0 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/105dcdbf Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/105dcdbf Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/105dcdbf Branch: refs/heads/trunk Commit: 105dcdbf320a068de9b28c4c182fd37bd1292906 Parents: e344314 a3b3149 Author: Jonathan Ellis Authored: Thu Mar 13 13:06:07 2014 -0500 Committer: Jonathan Ellis Committed: Thu Mar 13 13:06:07 2014 -0500 -- CHANGES.txt | 8 src/java/org/apache/cassandra/db/ColumnFamilyStore.java | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/105dcdbf/CHANGES.txt -- diff --cc CHANGES.txt index 27cb235,2413b51..eb82a1c --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -1,22 -1,16 +1,30 @@@ -2.0.7 +2.1.0-beta2 + * Apply DONTNEED fadvise to commitlog segments (CASSANDRA-6759) + * Switch CRC component to Adler and include it for compressed sstables + (CASSANDRA-4165) + * Allow cassandra-stress to set compaction strategy options (CASSANDRA-6451) + * Add broadcast_rpc_address option to cassandra.yaml (CASSANDRA-5899) + * Auto reload GossipingPropertyFileSnitch config (CASSANDRA-5897) + * Fix overflow of memtable_total_space_in_mb (CASSANDRA-6573) + * Fix ABTC NPE and apply update function correctly (CASSANDRA-6692) + * Allow nodetool to use a file or prompt for password (CASSANDRA-6660) + * Fix AIOOBE when concurrently accessing ABSC (CASSANDRA-6742) + * Fix assertion error in ALTER TYPE RENAME (CASSANDRA-6705) + * Scrub should not always clear out repaired status (CASSANDRA-5351) + * Improve handling of range tombstone for wide partitions (CASSANDRA-6446) + * Fix ClassCastException for compact table with composites (CASSANDRA-6738) + * Fix potentially repairing with wrong nodes (CASSANDRA-6808) + * Change caching option syntax (CASSANDRA-6745) + * Fix stress to do proper counter reads (CASSANDRA-6835) +Merged from 2.0: ++ * fix nodetool getsstables for blob PK (CASSANDRA-6803) + * Fix saving triggers to schema (CASSANDRA-6789) + * Fix trigger mutations when base mutation list is immutable (CASSANDRA-6790) + * Fix accounting in FileCacheService to allow re-using RAR (CASSANDRA-6838) + * Fix static counter columns (CASSANDRA-6827) + * Restore expiring->deleted (cell) compaction optimization (CASSANDRA-6844) + * Fix CompactionManager.needsCleanup (CASSANDRA-6845) + * Correctly compare BooleanType values other than 0 and 1 (CASSANDRA-6779) -Merged from 1.2: - * fix nodetool getsstables for blob PK (CASSANDRA-6803) - - -2.0.6 * Avoid race-prone second "scrub" of system keyspace (CASSANDRA-6797) * Pool CqlRecordWriter clients by inetaddress rather than Range (CASSANDRA-6665) http://git-wip-us.apache.org/repos/asf/cassandra/blob/105dcdbf/src/java/org/apache/cassandra/db/ColumnFamilyStore.java --
[06/15] git commit: Merge branch 'cassandra-2.0' into cassandra-2.1
Merge branch 'cassandra-2.0' into cassandra-2.1 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/e3443145 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/e3443145 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/e3443145 Branch: refs/heads/trunk Commit: e3443145c7126a1933d24246efa7ff17accd542e Parents: 8a52f5a 92b6d7a Author: Jonathan Ellis Authored: Thu Mar 13 12:01:13 2014 -0500 Committer: Jonathan Ellis Committed: Thu Mar 13 12:01:13 2014 -0500 -- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/e3443145/CHANGES.txt --
[05/15] git commit: Merge branch 'cassandra-1.2' into cassandra-2.0
Merge branch 'cassandra-1.2' into cassandra-2.0 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/92b6d7a3 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/92b6d7a3 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/92b6d7a3 Branch: refs/heads/trunk Commit: 92b6d7a3900dbaf97a8ae7283aecd23aa1f2a25e Parents: faffbf2 5030d42 Author: Jonathan Ellis Authored: Thu Mar 13 12:00:56 2014 -0500 Committer: Jonathan Ellis Committed: Thu Mar 13 12:00:56 2014 -0500 -- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/92b6d7a3/CHANGES.txt --
[12/15] git commit: Python-driver without a hard dependency on `scales`
Python-driver without a hard dependency on `scales` Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/a2ceb22c Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a2ceb22c Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a2ceb22c Branch: refs/heads/trunk Commit: a2ceb22c59e9c2d1bb3717b2703a7cf181997d3d Parents: c342965 Author: Mikhail Stepura Authored: Thu Mar 13 11:06:23 2014 -0700 Committer: Mikhail Stepura Committed: Thu Mar 13 11:07:09 2014 -0700 -- ...assandra-driver-internal-only-1.0.2.post.zip | Bin 95836 -> 95846 bytes 1 file changed, 0 insertions(+), 0 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2ceb22c/lib/cassandra-driver-internal-only-1.0.2.post.zip -- diff --git a/lib/cassandra-driver-internal-only-1.0.2.post.zip b/lib/cassandra-driver-internal-only-1.0.2.post.zip index 9f6af56..7ccd5f7 100644 Binary files a/lib/cassandra-driver-internal-only-1.0.2.post.zip and b/lib/cassandra-driver-internal-only-1.0.2.post.zip differ
[01/15] Fix stress to do proper counter reads Patch by Benedict Elliott Smith; reviewed by Pavel Yaskevich for CASSANDRA-6835
Repository: cassandra Updated Branches: refs/heads/trunk c0aa7467e -> 67feb71ee http://git-wip-us.apache.org/repos/asf/cassandra/blob/3e2c6105/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandMulti.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandMulti.java b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandMulti.java deleted file mode 100644 index 79937b6..000 --- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandMulti.java +++ /dev/null @@ -1,90 +0,0 @@ -package org.apache.cassandra.stress.settings; -/* - * - * 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. - * - */ - - -import java.util.ArrayList; -import java.util.List; - -// Settings common to commands that operate over multiple keys at once -public class SettingsCommandMulti extends SettingsCommand -{ - -public final int keysAtOnce; - -public SettingsCommandMulti(Command type, Options options) -{ -super(type, options.parent); -this.keysAtOnce = Integer.parseInt(options.maxKeys.value()); -} - -// Option Declarations - -static final class Options extends GroupedOptions -{ -final GroupedOptions parent; -Options(GroupedOptions parent) -{ -this.parent = parent; -} -final OptionSimple maxKeys = new OptionSimple("at-once=", "[0-9]+", "1000", "Number of keys per operation", false); - -@Override -public List options() -{ -final List options = new ArrayList<>(); -options.add(maxKeys); -options.addAll(parent.options()); -return options; -} -} - -// CLI Utility Methods - -public static SettingsCommand build(Command type, String[] params) -{ -GroupedOptions options = GroupedOptions.select(params, new Options(new Uncertainty()), new Options(new Count())); -if (options == null) -{ -printHelp(type); -System.out.println("Invalid " + type + " options provided, see output for valid options"); -System.exit(1); -} -return new SettingsCommandMulti(type, (Options) options); -} - -public static void printHelp(Command type) -{ -GroupedOptions.printOptions(System.out, type.toString().toLowerCase(), new Options(new Uncertainty()), new Options(new Count())); -} - -public static Runnable helpPrinter(final Command type) -{ -return new Runnable() -{ -@Override -public void run() -{ -printHelp(type); -} -}; -} -} http://git-wip-us.apache.org/repos/asf/cassandra/blob/3e2c6105/tools/stress/src/org/apache/cassandra/stress/settings/SettingsKey.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsKey.java b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsKey.java index c742274..9818d363 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsKey.java +++ b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsKey.java @@ -63,7 +63,7 @@ public class SettingsKey implements Serializable public DistributionOptions(String defaultLimit) { -dist = new OptionDistribution("dist=", "GAUSSIAN(1.." + defaultLimit + ")"); +dist = new OptionDistribution("dist=", "GAUSSIAN(1.." + defaultLimit + ")", "Keys are selected from this distribution"); } @Override http://git-wip-us.apache.org/repos/asf/cassandra/blob/3e2c6105/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMisc.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMisc.java b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMisc.java index dfb29c5..e47f85f 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMisc.java +++ b/tools/stress/src/org/apache/cassandra/stress/set
[07/15] git commit: Minor tweaks for 'caching' option
Minor tweaks for 'caching' option Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/fab55098 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/fab55098 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/fab55098 Branch: refs/heads/trunk Commit: fab5509898152072ba1f6ecb3d208e2bbe234495 Parents: e344314 Author: Mikhail Stepura Authored: Wed Mar 12 19:56:28 2014 -0700 Committer: Mikhail Stepura Committed: Thu Mar 13 10:06:56 2014 -0700 -- pylib/cqlshlib/cql3handling.py | 6 -- 1 file changed, 4 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/fab55098/pylib/cqlshlib/cql3handling.py -- diff --git a/pylib/cqlshlib/cql3handling.py b/pylib/cqlshlib/cql3handling.py index ae03cde..8e9f987 100644 --- a/pylib/cqlshlib/cql3handling.py +++ b/pylib/cqlshlib/cql3handling.py @@ -419,6 +419,8 @@ def cf_prop_val_completer(ctxt, cass): return ["{'sstable_compression': '"] if this_opt == 'compaction': return ["{'class': '"] +if this_opt == 'caching': +return ["{'keys': '"] if any(this_opt == opt[0] for opt in CqlRuleSet.obsolete_cf_options): return ["''"] if this_opt in ('read_repair_chance', 'bloom_filter_fp_chance', @@ -472,9 +474,9 @@ def cf_prop_val_mapval_completer(ctxt, cass): return [Hint('')] elif opt == 'caching': if key == 'rows_per_partition': -return [Hint('ALL'), Hint('NONE'), Hint('#rows_per_partition')] +return ["'ALL'", "'NONE'", Hint('#rows_per_partition')] elif key == 'keys': -return [Hint('ALL'), Hint('NONE')] +return ["'ALL'", "'NONE'"] return () def cf_prop_val_mapender_completer(ctxt, cass):
[15/15] git commit: Merge branch cassandra-2.1 into trunk
Merge branch cassandra-2.1 into trunk Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/67feb71e Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/67feb71e Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/67feb71e Branch: refs/heads/trunk Commit: 67feb71eef95abc738048e7fecedff41355977ac Parents: c0aa746 4c22b16 Author: Pavel Yaskevich Authored: Thu Mar 13 14:21:49 2014 -0700 Committer: Pavel Yaskevich Committed: Thu Mar 13 14:21:49 2014 -0700 -- CHANGES.txt | 11 ++ ...assandra-driver-internal-only-1.0.2.post.zip | Bin 95836 -> 95846 bytes pylib/cqlshlib/cql3handling.py | 6 +- .../apache/cassandra/db/ColumnFamilyStore.java | 2 +- .../db/composites/AbstractComposite.java| 5 +- .../db/marshal/AbstractCompositeType.java | 63 +++ .../cassandra/db/marshal/CollectionType.java| 6 - .../cassandra/db/marshal/CompositeType.java | 12 +- .../db/marshal/DynamicCompositeType.java| 14 +-- .../serializers/CollectionSerializer.java | 6 - .../cassandra/serializers/ListSerializer.java | 9 +- .../cassandra/serializers/MapSerializer.java| 17 +-- .../cassandra/serializers/SetSerializer.java| 9 +- .../cassandra/streaming/StreamWriter.java | 8 +- .../apache/cassandra/utils/ByteBufferUtil.java | 37 +++ .../org/apache/cassandra/utils/FBUtilities.java | 2 +- .../org/apache/cassandra/stress/Operation.java | 109 +-- .../apache/cassandra/stress/StressAction.java | 4 +- .../cassandra/stress/generatedata/RowGen.java | 1 + .../generatedata/RowGenDistributedSize.java | 7 ++ .../stress/operations/CqlCounterAdder.java | 21 ++-- .../stress/operations/CqlCounterGetter.java | 13 ++- .../operations/CqlIndexedRangeSlicer.java | 18 +-- .../stress/operations/CqlInserter.java | 10 +- .../stress/operations/CqlOperation.java | 68 .../stress/operations/CqlRangeSlicer.java | 8 +- .../cassandra/stress/operations/CqlReader.java | 12 +- .../stress/operations/ThriftCounterAdder.java | 12 +- .../stress/operations/ThriftCounterGetter.java | 15 +-- .../operations/ThriftIndexedRangeSlicer.java| 5 +- .../stress/operations/ThriftInserter.java | 6 +- .../stress/operations/ThriftMultiGetter.java| 3 +- .../stress/operations/ThriftRangeSlicer.java| 3 +- .../stress/operations/ThriftReader.java | 16 +-- .../cassandra/stress/settings/Command.java | 72 +++- .../cassandra/stress/settings/Option.java | 1 + .../stress/settings/OptionDataGen.java | 5 + .../stress/settings/OptionDistribution.java | 13 ++- .../cassandra/stress/settings/OptionMulti.java | 39 ++- .../stress/settings/OptionReplication.java | 2 +- .../cassandra/stress/settings/OptionSimple.java | 2 +- .../stress/settings/SettingsColumn.java | 29 +++-- .../stress/settings/SettingsCommand.java| 30 ++--- .../stress/settings/SettingsCommandMixed.java | 46 .../stress/settings/SettingsCommandMulti.java | 90 --- .../cassandra/stress/settings/SettingsKey.java | 2 +- .../cassandra/stress/settings/SettingsMisc.java | 4 +- .../cassandra/stress/settings/SettingsMode.java | 31 +- .../stress/settings/SettingsSchema.java | 7 +- .../stress/settings/SettingsTransport.java | 2 +- .../stress/settings/StressSettings.java | 30 +++-- .../cassandra/stress/util/JavaDriverClient.java | 4 +- 52 files changed, 506 insertions(+), 441 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/67feb71e/CHANGES.txt -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/67feb71e/tools/stress/src/org/apache/cassandra/stress/Operation.java -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/67feb71e/tools/stress/src/org/apache/cassandra/stress/operations/CqlCounterAdder.java -- diff --cc tools/stress/src/org/apache/cassandra/stress/operations/CqlCounterAdder.java index 910b6ed,9a8c37d..4e333a4 --- a/tools/stress/src/org/apache/cassandra/stress/operations/CqlCounterAdder.java +++ b/tools/stress/src/org/apache/cassandra/stress/operations/CqlCounterAdder.java @@@ -22,9 -22,12 +22,9 @@@ package org.apache.cassandra.stress.ope import java.nio.ByteBuffer; - import java.util.Collections; + import java.util.ArrayList; -import java.util.Collections; import java.util.List; -import org.apache.cassandra.utils.ByteBufferUtil; - p
[13/15] git commit: Fix leaking validator FH in StreamWriter patch by Joshua McKenzie; reviewed by jbellis for CASSANDRA-6832
Fix leaking validator FH in StreamWriter patch by Joshua McKenzie; reviewed by jbellis for CASSANDRA-6832 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/da2d9714 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/da2d9714 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/da2d9714 Branch: refs/heads/trunk Commit: da2d97142b9c76e5fb81df5f94c3d52ef46bf244 Parents: a3b3149 Author: Jonathan Ellis Authored: Thu Mar 13 13:13:48 2014 -0500 Committer: Jonathan Ellis Committed: Thu Mar 13 13:13:48 2014 -0500 -- CHANGES.txt | 1 + src/java/org/apache/cassandra/streaming/StreamWriter.java | 8 2 files changed, 5 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/da2d9714/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index 2413b51..e208e21 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.0.7 + * Fix leaking validator FH in StreamWriter (CASSANDRA-6832) * Fix saving triggers to schema (CASSANDRA-6789) * Fix trigger mutations when base mutation list is immutable (CASSANDRA-6790) * Fix accounting in FileCacheService to allow re-using RAR (CASSANDRA-6838) http://git-wip-us.apache.org/repos/asf/cassandra/blob/da2d9714/src/java/org/apache/cassandra/streaming/StreamWriter.java -- diff --git a/src/java/org/apache/cassandra/streaming/StreamWriter.java b/src/java/org/apache/cassandra/streaming/StreamWriter.java index 04301ba..dbc7390 100644 --- a/src/java/org/apache/cassandra/streaming/StreamWriter.java +++ b/src/java/org/apache/cassandra/streaming/StreamWriter.java @@ -71,10 +71,9 @@ public class StreamWriter { long totalSize = totalSize(); RandomAccessReader file = sstable.openDataReader(); -ChecksumValidator validator = null; -if (new File(sstable.descriptor.filenameFor(Component.CRC)).exists()) -validator = DataIntegrityMetadata.checksumValidator(sstable.descriptor); - +ChecksumValidator validator = new File(sstable.descriptor.filenameFor(Component.CRC)).exists() +? DataIntegrityMetadata.checksumValidator(sstable.descriptor) +: null; transferBuffer = validator == null ? new byte[DEFAULT_CHUNK_SIZE] : new byte[validator.chunkSize]; // setting up data compression stream @@ -114,6 +113,7 @@ public class StreamWriter { // no matter what happens close file FileUtils.closeQuietly(file); +FileUtils.closeQuietly(validator); } // release reference only when completed successfully
[08/15] git commit: fix nodetool getsstables for blob PK patch by Nate McCall; reviewed by jbellis for CASSANDRA-6803
fix nodetool getsstables for blob PK patch by Nate McCall; reviewed by jbellis for CASSANDRA-6803 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/52cf09db Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/52cf09db Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/52cf09db Branch: refs/heads/trunk Commit: 52cf09dbace356bafb846cb9f1fc9df71344f61f Parents: 5030d42 Author: Jonathan Ellis Authored: Thu Mar 13 13:04:14 2014 -0500 Committer: Jonathan Ellis Committed: Thu Mar 13 13:04:14 2014 -0500 -- CHANGES.txt | 2 ++ src/java/org/apache/cassandra/db/ColumnFamilyStore.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/52cf09db/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index a68e8ac..325c623 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 1.2.16 + * fix nodetool getsstables for blob PK (CASSANDRA-6803) * Add CMSClassUnloadingEnabled JVM option (CASSANDRA-6541) * Catch memtable flush exceptions during shutdown (CASSANDRA-6735) * Don't attempt cross-dc forwarding in mixed-version cluster with 1.1 @@ -21,6 +22,7 @@ * Fix bootstrapping when there is no schema (CASSANDRA-6685) * Fix truncating compression metadata (CASSANDRA-6791) + 1.2.15 * Move handling of migration event source to solve bootstrap race (CASSANDRA-6648) * Make sure compaction throughput value doesn't overflow with int math (CASSANDRA-6647) http://git-wip-us.apache.org/repos/asf/cassandra/blob/52cf09db/src/java/org/apache/cassandra/db/ColumnFamilyStore.java -- diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java index 3841397..9e6987d 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java @@ -1370,7 +1370,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean public List getSSTablesForKey(String key) { -DecoratedKey dk = new DecoratedKey(partitioner.getToken(ByteBuffer.wrap(key.getBytes())), ByteBuffer.wrap(key.getBytes())); +DecoratedKey dk = partitioner.decorateKey(metadata.getKeyValidator().fromString(key)); ViewFragment view = markReferenced(dk); try {
[09/15] git commit: merge from 1.2
merge from 1.2 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/a3b31490 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a3b31490 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a3b31490 Branch: refs/heads/trunk Commit: a3b314908b5b7b666e7ce782ef4a1a91615847f1 Parents: 92b6d7a 52cf09d Author: Jonathan Ellis Authored: Thu Mar 13 13:05:11 2014 -0500 Committer: Jonathan Ellis Committed: Thu Mar 13 13:05:11 2014 -0500 -- CHANGES.txt | 3 +++ src/java/org/apache/cassandra/db/ColumnFamilyStore.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/a3b31490/CHANGES.txt -- diff --cc CHANGES.txt index ce01e5c,325c623..2413b51 --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -1,54 -1,9 +1,57 @@@ -1.2.16 +2.0.7 + * Fix saving triggers to schema (CASSANDRA-6789) + * Fix trigger mutations when base mutation list is immutable (CASSANDRA-6790) + * Fix accounting in FileCacheService to allow re-using RAR (CASSANDRA-6838) + * Fix static counter columns (CASSANDRA-6827) + * Restore expiring->deleted (cell) compaction optimization (CASSANDRA-6844) + * Fix CompactionManager.needsCleanup (CASSANDRA-6845) + * Correctly compare BooleanType values other than 0 and 1 (CASSANDRA-6779) ++Merged from 1.2: + * fix nodetool getsstables for blob PK (CASSANDRA-6803) ++ + +2.0.6 + * Avoid race-prone second "scrub" of system keyspace (CASSANDRA-6797) + * Pool CqlRecordWriter clients by inetaddress rather than Range + (CASSANDRA-6665) + * Fix compaction_history timestamps (CASSANDRA-6784) + * Compare scores of full replica ordering in DES (CASSANDRA-6883) + * fix CME in SessionInfo updateProgress affecting netstats (CASSANDRA-6577) + * Allow repairing between specific replicas (CASSANDRA-6440) + * Allow per-dc enabling of hints (CASSANDRA-6157) + * Add compatibility for Hadoop 0.2.x (CASSANDRA-5201) + * Fix EstimatedHistogram races (CASSANDRA-6682) + * Failure detector correctly converts initial value to nanos (CASSANDRA-6658) + * Add nodetool taketoken to relocate vnodes (CASSANDRA-4445) + * Fix upgradesstables NPE for non-CF-based indexes (CASSANDRA-6645) + * Improve nodetool cfhistograms formatting (CASSANDRA-6360) + * Expose bulk loading progress over JMX (CASSANDRA-4757) + * Correctly handle null with IF conditions and TTL (CASSANDRA-6623) + * Account for range/row tombstones in tombstone drop + time histogram (CASSANDRA-6522) + * Stop CommitLogSegment.close() from calling sync() (CASSANDRA-6652) + * Make commitlog failure handling configurable (CASSANDRA-6364) + * Avoid overlaps in LCS (CASSANDRA-6688) + * Improve support for paginating over composites (CASSANDRA-4851) + * Fix count(*) queries in a mixed cluster (CASSANDRA-6707) + * Improve repair tasks(snapshot, differencing) concurrency (CASSANDRA-6566) + * Fix replaying pre-2.0 commit logs (CASSANDRA-6714) + * Add static columns to CQL3 (CASSANDRA-6561) + * Optimize single partition batch statements (CASSANDRA-6737) + * Disallow post-query re-ordering when paging (CASSANDRA-6722) + * Fix potential paging bug with deleted columns (CASSANDRA-6748) + * Fix NPE on BulkLoader caused by losing StreamEvent (CASSANDRA-6636) + * Fix truncating compression metadata (CASSANDRA-6791) + * Fix UPDATE updating PRIMARY KEY columns implicitly (CASSANDRA-6782) + * Fix IllegalArgumentException when updating from 1.2 with SuperColumns + (CASSANDRA-6733) + * FBUtilities.singleton() should use the CF comparator (CASSANDRA-6778) + * Fix CQLSStableWriter.addRow(Map) (CASSANDRA-6526) + * Fix HSHA server introducing corrupt data (CASSANDRA-6285) + * Fix CAS conditions for COMPACT STORAGE tables (CASSANDRA-6813) +Merged from 1.2: * Add CMSClassUnloadingEnabled JVM option (CASSANDRA-6541) * Catch memtable flush exceptions during shutdown (CASSANDRA-6735) - * Don't attempt cross-dc forwarding in mixed-version cluster with 1.1 - (CASSANDRA-6732) * Fix broken streams when replacing with same IP (CASSANDRA-6622) * Fix upgradesstables NPE for non-CF-based indexes (CASSANDRA-6645) * Fix partition and range deletes not triggering flush (CASSANDRA-6655) http://git-wip-us.apache.org/repos/asf/cassandra/blob/a3b31490/src/java/org/apache/cassandra/db/ColumnFamilyStore.java --
[03/15] git commit: Move ByteBuffer functions to ByteBufferUtil and avoid duplication
Move ByteBuffer functions to ByteBufferUtil and avoid duplication Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/8a52f5af Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/8a52f5af Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/8a52f5af Branch: refs/heads/trunk Commit: 8a52f5af4f97a9a3062fca2db914ad2fe7e93162 Parents: 3e2c610 Author: Sylvain Lebresne Authored: Thu Mar 13 09:11:44 2014 +0100 Committer: Sylvain Lebresne Committed: Thu Mar 13 09:12:13 2014 +0100 -- .../db/composites/AbstractComposite.java| 5 +- .../db/marshal/AbstractCompositeType.java | 63 .../cassandra/db/marshal/CollectionType.java| 6 -- .../cassandra/db/marshal/CompositeType.java | 12 ++-- .../db/marshal/DynamicCompositeType.java| 14 ++--- .../serializers/CollectionSerializer.java | 6 -- .../cassandra/serializers/ListSerializer.java | 9 ++- .../cassandra/serializers/MapSerializer.java| 17 ++ .../cassandra/serializers/SetSerializer.java| 9 ++- .../apache/cassandra/utils/ByteBufferUtil.java | 37 10 files changed, 80 insertions(+), 98 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/8a52f5af/src/java/org/apache/cassandra/db/composites/AbstractComposite.java -- diff --git a/src/java/org/apache/cassandra/db/composites/AbstractComposite.java b/src/java/org/apache/cassandra/db/composites/AbstractComposite.java index fbff930..9741767 100644 --- a/src/java/org/apache/cassandra/db/composites/AbstractComposite.java +++ b/src/java/org/apache/cassandra/db/composites/AbstractComposite.java @@ -22,6 +22,7 @@ import java.nio.ByteBuffer; import org.apache.cassandra.db.filter.ColumnSlice; import org.apache.cassandra.db.marshal.AbstractCompositeType; import org.apache.cassandra.db.marshal.CompositeType; +import org.apache.cassandra.utils.ByteBufferUtil; public abstract class AbstractComposite implements Composite { @@ -75,12 +76,12 @@ public abstract class AbstractComposite implements Composite // See org.apache.cassandra.db.marshal.CompositeType for details. ByteBuffer result = ByteBuffer.allocate(dataSize() + 3 * size() + (isStatic() ? 2 : 0)); if (isStatic()) -AbstractCompositeType.putShortLength(result, CompositeType.STATIC_MARKER); +ByteBufferUtil.writeShortLength(result, CompositeType.STATIC_MARKER); for (int i = 0; i < size(); i++) { ByteBuffer bb = get(i); -AbstractCompositeType.putShortLength(result, bb.remaining()); +ByteBufferUtil.writeShortLength(result, bb.remaining()); result.put(bb.duplicate()); result.put((byte)0); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8a52f5af/src/java/org/apache/cassandra/db/marshal/AbstractCompositeType.java -- diff --git a/src/java/org/apache/cassandra/db/marshal/AbstractCompositeType.java b/src/java/org/apache/cassandra/db/marshal/AbstractCompositeType.java index 236abc7..8f3aec4 100644 --- a/src/java/org/apache/cassandra/db/marshal/AbstractCompositeType.java +++ b/src/java/org/apache/cassandra/db/marshal/AbstractCompositeType.java @@ -17,15 +17,16 @@ */ package org.apache.cassandra.db.marshal; -import org.apache.cassandra.serializers.TypeSerializer; -import org.apache.cassandra.serializers.BytesSerializer; -import org.apache.cassandra.serializers.MarshalException; - import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.apache.cassandra.serializers.TypeSerializer; +import org.apache.cassandra.serializers.BytesSerializer; +import org.apache.cassandra.serializers.MarshalException; +import org.apache.cassandra.utils.ByteBufferUtil; + /** * A class avoiding class duplication between CompositeType and * DynamicCompositeType. @@ -34,44 +35,6 @@ import java.util.List; */ public abstract class AbstractCompositeType extends AbstractType { - -// changes bb position -public static int getShortLength(ByteBuffer bb) -{ -int length = (bb.get() & 0xFF) << 8; -return length | (bb.get() & 0xFF); -} - -// Doesn't change bb position -protected static int getShortLength(ByteBuffer bb, int position) -{ -int length = (bb.get(position) & 0xFF) << 8; -return length | (bb.get(position + 1) & 0xFF); -} - -// changes bb position -public static void putShortLength(ByteBuffer bb, int length) -{ -bb.put((byte) ((length >> 8) & 0xFF)); -bb.put((byte) (length & 0xFF)); -} - -// changes bb position -
[04/15] git commit: add #2635 to CHANGES
add #2635 to CHANGES Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5030d421 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5030d421 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5030d421 Branch: refs/heads/trunk Commit: 5030d4215d9d8c380bf48c25fddee7c863599382 Parents: 91d220b Author: Jonathan Ellis Authored: Thu Mar 13 12:00:47 2014 -0500 Committer: Jonathan Ellis Committed: Thu Mar 13 12:00:47 2014 -0500 -- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/5030d421/CHANGES.txt -- diff --git a/CHANGES.txt b/CHANGES.txt index b3c0a35..a68e8ac 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -889,6 +889,7 @@ Merged from 1.0: 1.1.1 + * add populate_io_cache_on_flush option (CASSANDRA-2635) * allow larger cache capacities than 2GB (CASSANDRA-4150) * add getsstables command to nodetool (CASSANDRA-4199) * apply parent CF compaction settings to secondary index CFs (CASSANDRA-4280)
[1/2] Fix stress to do proper counter reads Patch by Benedict Elliott Smith; reviewed by Pavel Yaskevich for CASSANDRA-6835
Repository: cassandra Updated Branches: refs/heads/cassandra-2.1 948964b52 -> 3e2c61057 http://git-wip-us.apache.org/repos/asf/cassandra/blob/3e2c6105/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandMulti.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandMulti.java b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandMulti.java deleted file mode 100644 index 79937b6..000 --- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandMulti.java +++ /dev/null @@ -1,90 +0,0 @@ -package org.apache.cassandra.stress.settings; -/* - * - * 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. - * - */ - - -import java.util.ArrayList; -import java.util.List; - -// Settings common to commands that operate over multiple keys at once -public class SettingsCommandMulti extends SettingsCommand -{ - -public final int keysAtOnce; - -public SettingsCommandMulti(Command type, Options options) -{ -super(type, options.parent); -this.keysAtOnce = Integer.parseInt(options.maxKeys.value()); -} - -// Option Declarations - -static final class Options extends GroupedOptions -{ -final GroupedOptions parent; -Options(GroupedOptions parent) -{ -this.parent = parent; -} -final OptionSimple maxKeys = new OptionSimple("at-once=", "[0-9]+", "1000", "Number of keys per operation", false); - -@Override -public List options() -{ -final List options = new ArrayList<>(); -options.add(maxKeys); -options.addAll(parent.options()); -return options; -} -} - -// CLI Utility Methods - -public static SettingsCommand build(Command type, String[] params) -{ -GroupedOptions options = GroupedOptions.select(params, new Options(new Uncertainty()), new Options(new Count())); -if (options == null) -{ -printHelp(type); -System.out.println("Invalid " + type + " options provided, see output for valid options"); -System.exit(1); -} -return new SettingsCommandMulti(type, (Options) options); -} - -public static void printHelp(Command type) -{ -GroupedOptions.printOptions(System.out, type.toString().toLowerCase(), new Options(new Uncertainty()), new Options(new Count())); -} - -public static Runnable helpPrinter(final Command type) -{ -return new Runnable() -{ -@Override -public void run() -{ -printHelp(type); -} -}; -} -} http://git-wip-us.apache.org/repos/asf/cassandra/blob/3e2c6105/tools/stress/src/org/apache/cassandra/stress/settings/SettingsKey.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsKey.java b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsKey.java index c742274..9818d363 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsKey.java +++ b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsKey.java @@ -63,7 +63,7 @@ public class SettingsKey implements Serializable public DistributionOptions(String defaultLimit) { -dist = new OptionDistribution("dist=", "GAUSSIAN(1.." + defaultLimit + ")"); +dist = new OptionDistribution("dist=", "GAUSSIAN(1.." + defaultLimit + ")", "Keys are selected from this distribution"); } @Override http://git-wip-us.apache.org/repos/asf/cassandra/blob/3e2c6105/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMisc.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMisc.java b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMisc.java index dfb29c5..e47f85f 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMisc.java +++ b/tools/stress/src/org/apache/cassandra/st
[3/3] git commit: Merge fix to CASSANDRA-6691 to enable value verification in tools/stress
Merge fix to CASSANDRA-6691 to enable value verification in tools/stress Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/de01d07a Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/de01d07a Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/de01d07a Branch: refs/heads/trunk Commit: de01d07a0ca9339d2c57173132e52dc7a147c0c8 Parents: 21de332 c869087 Author: Pavel Yaskevich Authored: Thu Feb 13 11:11:00 2014 -0800 Committer: Pavel Yaskevich Committed: Thu Feb 13 11:11:00 2014 -0800 -- .../cassandra/stress/generatedata/RowGenDistributedSize.java | 6 +- .../org/apache/cassandra/stress/operations/CqlOperation.java | 6 +- 2 files changed, 10 insertions(+), 2 deletions(-) --
[1/3] git commit: iss-6691
Updated Branches: refs/heads/trunk 21de3328a -> de01d07a0 iss-6691 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/84f2b890 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/84f2b890 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/84f2b890 Branch: refs/heads/trunk Commit: 84f2b8908e9cdc418a03322db41c9db1ac4f6d6f Parents: 67101c2 Author: belliottsmith Authored: Wed Feb 12 11:36:35 2014 + Committer: belliottsmith Committed: Wed Feb 12 11:36:35 2014 + -- .../org/apache/cassandra/stress/Operation.java | 74 +--- .../apache/cassandra/stress/StressAction.java | 7 +- .../cassandra/stress/generatedata/DataGen.java | 6 +- .../stress/generatedata/DataGenBytesRandom.java | 2 +- .../stress/generatedata/DataGenHex.java | 2 +- .../generatedata/DataGenStringDictionary.java | 6 +- .../generatedata/DataGenStringRepeats.java | 16 +-- .../cassandra/stress/generatedata/KeyGen.java | 2 +- .../cassandra/stress/generatedata/RowGen.java | 4 +- .../operations/CqlIndexedRangeSlicer.java | 2 +- .../stress/operations/CqlInserter.java | 2 +- .../stress/operations/CqlOperation.java | 112 +++ .../cassandra/stress/operations/CqlReader.java | 8 +- .../stress/operations/ThriftCounterAdder.java | 2 +- .../operations/ThriftIndexedRangeSlicer.java| 2 +- .../stress/operations/ThriftInserter.java | 6 +- .../stress/operations/ThriftReader.java | 30 - 17 files changed, 239 insertions(+), 44 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/84f2b890/tools/stress/src/org/apache/cassandra/stress/Operation.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/Operation.java b/tools/stress/src/org/apache/cassandra/stress/Operation.java index fa7a453..4519b19 100644 --- a/tools/stress/src/org/apache/cassandra/stress/Operation.java +++ b/tools/stress/src/org/apache/cassandra/stress/Operation.java @@ -21,10 +21,25 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.util.Arrays; import java.util.Collections; +import java.util.EnumMap; import java.util.List; import org.apache.cassandra.stress.generatedata.KeyGen; import org.apache.cassandra.stress.generatedata.RowGen; +import org.apache.cassandra.stress.operations.CqlCounterAdder; +import org.apache.cassandra.stress.operations.CqlCounterGetter; +import org.apache.cassandra.stress.operations.CqlIndexedRangeSlicer; +import org.apache.cassandra.stress.operations.CqlInserter; +import org.apache.cassandra.stress.operations.CqlMultiGetter; +import org.apache.cassandra.stress.operations.CqlRangeSlicer; +import org.apache.cassandra.stress.operations.CqlReader; +import org.apache.cassandra.stress.operations.ThriftCounterAdder; +import org.apache.cassandra.stress.operations.ThriftCounterGetter; +import org.apache.cassandra.stress.operations.ThriftIndexedRangeSlicer; +import org.apache.cassandra.stress.operations.ThriftInserter; +import org.apache.cassandra.stress.operations.ThriftMultiGetter; +import org.apache.cassandra.stress.operations.ThriftRangeSlicer; +import org.apache.cassandra.stress.operations.ThriftReader; import org.apache.cassandra.stress.settings.Command; import org.apache.cassandra.stress.settings.CqlVersion; import org.apache.cassandra.stress.settings.SettingsCommandMixed; @@ -66,7 +81,8 @@ public abstract class Operation public final RowGen rowGen; public final List columnParents; public final StressMetrics metrics; -public final SettingsCommandMixed.CommandSelector readWriteSelector; +public final SettingsCommandMixed.CommandSelector commandSelector; +private final EnumMap substates; private Object cqlCache; public State(Command type, StressSettings settings, StressMetrics metrics) @@ -74,9 +90,15 @@ public abstract class Operation this.type = type; this.timer = metrics.getTiming().newTimer(); if (type == Command.MIXED) -readWriteSelector = ((SettingsCommandMixed) settings.command).selector(); +{ +commandSelector = ((SettingsCommandMixed) settings.command).selector(); +substates = new EnumMap<>(Command.class); +} else -readWriteSelector = null; +{ +commandSelector = null; +substates = null; +} this.settings = settings; this.keyGen = settings.keys.newKeyGen(); this.rowGen = settings.columns.newRowGen(); @@ -91,6 +113,20 @@ public abstract class Operation column
[2/3] git commit: fix isDeterministic + CqlReader
fix isDeterministic + CqlReader Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c8690872 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c8690872 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c8690872 Branch: refs/heads/trunk Commit: c8690872674cc18de35efeca7ac6da280c6647f0 Parents: 84f2b89 79c6ecc Author: belliottsmith Authored: Thu Feb 13 16:39:16 2014 + Committer: belliottsmith Committed: Thu Feb 13 16:39:16 2014 + -- CHANGES.txt | 9 +- .../db/AbstractThreadUnsafeSortedColumns.java | 70 .../cassandra/db/ArrayBackedSortedColumns.java | 50 - .../org/apache/cassandra/db/ColumnFamily.java | 8 -- .../org/apache/cassandra/db/EmptyColumns.java | 112 --- src/java/org/apache/cassandra/db/Mutation.java | 2 +- .../org/apache/cassandra/db/SystemKeyspace.java | 2 +- .../db/columniterator/IndexedSliceReader.java | 2 +- .../db/columniterator/SimpleSliceReader.java| 2 +- .../db/compaction/LazilyCompactedRow.java | 2 +- .../db/compaction/LeveledManifest.java | 23 +--- .../apache/cassandra/db/filter/ColumnSlice.java | 49 .../db/index/composites/CompositesSearcher.java | 2 +- .../io/sstable/SSTableIdentityIterator.java | 2 +- .../cassandra/service/CassandraDaemon.java | 7 +- .../cassandra/service/MigrationManager.java | 18 ++- .../apache/cassandra/service/ReadCallback.java | 4 +- .../apache/cassandra/service/StorageProxy.java | 4 +- .../cassandra/service/StorageService.java | 1 - .../cassandra/service/pager/QueryPagers.java| 2 +- .../apache/cassandra/service/paxos/Commit.java | 4 +- .../cassandra/db/RangeTombstoneListTest.java| 6 - test/unit/org/apache/cassandra/db/RowTest.java | 2 +- .../locator/OldNetworkTopologyStrategyTest.java | 12 +- ...2.0.0-rc2-SNAPSHOT-jar-with-dependencies.jar | Bin 5869229 -> 0 bytes ...cassandra-driver-core-2.0.0-rc2-SNAPSHOT.jar | Bin 490145 -> 0 bytes ...cassandra-driver-core-2.0.0-rc3-SNAPSHOT.jar | Bin 0 -> 515357 bytes .../apache/cassandra/stress/StressAction.java | 6 +- .../generatedata/DataGenStringDictionary.java | 6 +- .../generatedata/DataGenStringRepeats.java | 2 +- .../generatedata/RowGenDistributedSize.java | 6 +- .../stress/operations/CqlOperation.java | 29 ++--- .../cassandra/stress/settings/SettingsKey.java | 7 +- .../cassandra/stress/util/JavaDriverClient.java | 9 +- 34 files changed, 122 insertions(+), 338 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/c8690872/tools/stress/src/org/apache/cassandra/stress/generatedata/RowGenDistributedSize.java -- diff --cc tools/stress/src/org/apache/cassandra/stress/generatedata/RowGenDistributedSize.java index b68ab3c,b68ab3c..6749eae --- a/tools/stress/src/org/apache/cassandra/stress/generatedata/RowGenDistributedSize.java +++ b/tools/stress/src/org/apache/cassandra/stress/generatedata/RowGenDistributedSize.java @@@ -21,6 -21,6 +21,8 @@@ public class RowGenDistributedSize exte final ByteBuffer[] ret; final int[] sizes; ++final boolean isDeterministic; ++ public RowGenDistributedSize(DataGen dataGenerator, Distribution countDistribution, Distribution sizeDistribution) { super(dataGenerator); @@@ -28,6 -28,6 +30,8 @@@ this.sizeDistribution = sizeDistribution; ret = new ByteBuffer[(int) countDistribution.maxValue()]; sizes = new int[ret.length]; ++this.isDeterministic = dataGen.isDeterministic() && countDistribution.maxValue() == countDistribution.minValue() ++&& sizeDistribution.minValue() == sizeDistribution.maxValue(); } ByteBuffer getBuffer(int size) @@@ -78,7 -78,7 +82,7 @@@ @Override public boolean isDeterministic() { --return false; ++return isDeterministic; } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/c8690872/tools/stress/src/org/apache/cassandra/stress/operations/CqlOperation.java -- diff --cc tools/stress/src/org/apache/cassandra/stress/operations/CqlOperation.java index bd2f131,78dd461..b17f520 --- a/tools/stress/src/org/apache/cassandra/stress/operations/CqlOperation.java +++ b/tools/stress/src/org/apache/cassandra/stress/operations/CqlOperation.java @@@ -192,8 -192,8 +192,12 @@@ public abstract class CqlOperation e if (result.length != expect.size()) return false; for (int i = 0 ; i < result.length ; i++) --if (!expect.get(i).equals(Arrays.asLi
git commit: Improvements and fixes to cassandra/stress Patch by Benedict; reviewed by Pavel Yaskevich for CASSANDRA-6691
Updated Branches: refs/heads/trunk f66b9eb27 -> 10b617364 Improvements and fixes to cassandra/stress Patch by Benedict; reviewed by Pavel Yaskevich for CASSANDRA-6691 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/10b61736 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/10b61736 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/10b61736 Branch: refs/heads/trunk Commit: 10b617364e9f639358f82c70056e31533a1ec11c Parents: f66b9eb Author: belliottsmith Authored: Wed Feb 12 11:36:35 2014 + Committer: Pavel Yaskevich Committed: Wed Feb 12 17:25:07 2014 -0800 -- .../org/apache/cassandra/stress/Operation.java | 74 ++--- .../apache/cassandra/stress/StressAction.java | 13 ++- .../cassandra/stress/generatedata/DataGen.java | 6 +- .../stress/generatedata/DataGenBytesRandom.java | 2 +- .../stress/generatedata/DataGenHex.java | 2 +- .../generatedata/DataGenStringDictionary.java | 6 +- .../generatedata/DataGenStringRepeats.java | 16 +-- .../cassandra/stress/generatedata/KeyGen.java | 2 +- .../cassandra/stress/generatedata/RowGen.java | 4 +- .../operations/CqlIndexedRangeSlicer.java | 2 +- .../stress/operations/CqlInserter.java | 2 +- .../stress/operations/CqlOperation.java | 111 +++ .../cassandra/stress/operations/CqlReader.java | 8 +- .../stress/operations/ThriftCounterAdder.java | 2 +- .../operations/ThriftIndexedRangeSlicer.java| 2 +- .../stress/operations/ThriftInserter.java | 6 +- .../stress/operations/ThriftReader.java | 30 - .../cassandra/stress/settings/SettingsKey.java | 7 +- 18 files changed, 244 insertions(+), 51 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/10b61736/tools/stress/src/org/apache/cassandra/stress/Operation.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/Operation.java b/tools/stress/src/org/apache/cassandra/stress/Operation.java index fa7a453..4519b19 100644 --- a/tools/stress/src/org/apache/cassandra/stress/Operation.java +++ b/tools/stress/src/org/apache/cassandra/stress/Operation.java @@ -21,10 +21,25 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.util.Arrays; import java.util.Collections; +import java.util.EnumMap; import java.util.List; import org.apache.cassandra.stress.generatedata.KeyGen; import org.apache.cassandra.stress.generatedata.RowGen; +import org.apache.cassandra.stress.operations.CqlCounterAdder; +import org.apache.cassandra.stress.operations.CqlCounterGetter; +import org.apache.cassandra.stress.operations.CqlIndexedRangeSlicer; +import org.apache.cassandra.stress.operations.CqlInserter; +import org.apache.cassandra.stress.operations.CqlMultiGetter; +import org.apache.cassandra.stress.operations.CqlRangeSlicer; +import org.apache.cassandra.stress.operations.CqlReader; +import org.apache.cassandra.stress.operations.ThriftCounterAdder; +import org.apache.cassandra.stress.operations.ThriftCounterGetter; +import org.apache.cassandra.stress.operations.ThriftIndexedRangeSlicer; +import org.apache.cassandra.stress.operations.ThriftInserter; +import org.apache.cassandra.stress.operations.ThriftMultiGetter; +import org.apache.cassandra.stress.operations.ThriftRangeSlicer; +import org.apache.cassandra.stress.operations.ThriftReader; import org.apache.cassandra.stress.settings.Command; import org.apache.cassandra.stress.settings.CqlVersion; import org.apache.cassandra.stress.settings.SettingsCommandMixed; @@ -66,7 +81,8 @@ public abstract class Operation public final RowGen rowGen; public final List columnParents; public final StressMetrics metrics; -public final SettingsCommandMixed.CommandSelector readWriteSelector; +public final SettingsCommandMixed.CommandSelector commandSelector; +private final EnumMap substates; private Object cqlCache; public State(Command type, StressSettings settings, StressMetrics metrics) @@ -74,9 +90,15 @@ public abstract class Operation this.type = type; this.timer = metrics.getTiming().newTimer(); if (type == Command.MIXED) -readWriteSelector = ((SettingsCommandMixed) settings.command).selector(); +{ +commandSelector = ((SettingsCommandMixed) settings.command).selector(); +substates = new EnumMap<>(Command.class); +} else -readWriteSelector = null; +{ +commandSelector = null; +substates = null; +} this.settings = settings; this.keyGen
[1/2] git commit: update thrift-server to version 0.3.3 to fix CASSANDRA-6373 and CASSANDRA-6407
Updated Branches: refs/heads/trunk 8ebeee104 -> 25d2893dd update thrift-server to version 0.3.3 to fix CASSANDRA-6373 and CASSANDRA-6407 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c5432159 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c5432159 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c5432159 Branch: refs/heads/trunk Commit: c5432159180cd573d822d02739e96336d4f54888 Parents: 2bfaf8f Author: Pavel Yaskevich Authored: Fri Jan 10 17:20:22 2014 -0800 Committer: Pavel Yaskevich Committed: Fri Jan 10 17:20:22 2014 -0800 -- build.xml | 4 ++-- lib/thrift-server-0.3.2.jar | Bin 123920 -> 0 bytes lib/thrift-server-0.3.3.jar | Bin 0 -> 124160 bytes 3 files changed, 2 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/c5432159/build.xml -- diff --git a/build.xml b/build.xml index 2fcb0fd..96a5d5e 100644 --- a/build.xml +++ b/build.xml @@ -355,7 +355,7 @@ - + @@ -457,7 +457,7 @@ - + http://git-wip-us.apache.org/repos/asf/cassandra/blob/c5432159/lib/thrift-server-0.3.2.jar -- diff --git a/lib/thrift-server-0.3.2.jar b/lib/thrift-server-0.3.2.jar deleted file mode 100644 index 5b03c4d..000 Binary files a/lib/thrift-server-0.3.2.jar and /dev/null differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/c5432159/lib/thrift-server-0.3.3.jar -- diff --git a/lib/thrift-server-0.3.3.jar b/lib/thrift-server-0.3.3.jar new file mode 100644 index 000..06e3113 Binary files /dev/null and b/lib/thrift-server-0.3.3.jar differ
[2/2] git commit: Merge branch 'cassandra-2.0' into trunk
Merge branch 'cassandra-2.0' into trunk Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/25d2893d Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/25d2893d Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/25d2893d Branch: refs/heads/trunk Commit: 25d2893dd0d012e22e16231230ac6fc9dcd60f93 Parents: 8ebeee1 c543215 Author: Pavel Yaskevich Authored: Fri Jan 10 17:25:40 2014 -0800 Committer: Pavel Yaskevich Committed: Fri Jan 10 17:25:40 2014 -0800 -- build.xml | 4 ++-- lib/thrift-server-0.3.2.jar | Bin 123920 -> 0 bytes lib/thrift-server-0.3.3.jar | Bin 0 -> 124160 bytes 3 files changed, 2 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/25d2893d/build.xml -- diff --cc build.xml index 2e4719e,96a5d5e..04cc08f --- a/build.xml +++ b/build.xml @@@ -358,9 -355,7 +358,9 @@@ - - ++ + + @@@ -471,11 -457,11 +471,11 @@@ - + + - - - + +
git commit: update thrift-server to version 0.3.3 to fix CASSANDRA-6373 and CASSANDRA-6407
Updated Branches: refs/heads/cassandra-2.0 2bfaf8f8d -> c54321591 update thrift-server to version 0.3.3 to fix CASSANDRA-6373 and CASSANDRA-6407 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c5432159 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c5432159 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c5432159 Branch: refs/heads/cassandra-2.0 Commit: c5432159180cd573d822d02739e96336d4f54888 Parents: 2bfaf8f Author: Pavel Yaskevich Authored: Fri Jan 10 17:20:22 2014 -0800 Committer: Pavel Yaskevich Committed: Fri Jan 10 17:20:22 2014 -0800 -- build.xml | 4 ++-- lib/thrift-server-0.3.2.jar | Bin 123920 -> 0 bytes lib/thrift-server-0.3.3.jar | Bin 0 -> 124160 bytes 3 files changed, 2 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/c5432159/build.xml -- diff --git a/build.xml b/build.xml index 2fcb0fd..96a5d5e 100644 --- a/build.xml +++ b/build.xml @@ -355,7 +355,7 @@ - + @@ -457,7 +457,7 @@ - + http://git-wip-us.apache.org/repos/asf/cassandra/blob/c5432159/lib/thrift-server-0.3.2.jar -- diff --git a/lib/thrift-server-0.3.2.jar b/lib/thrift-server-0.3.2.jar deleted file mode 100644 index 5b03c4d..000 Binary files a/lib/thrift-server-0.3.2.jar and /dev/null differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/c5432159/lib/thrift-server-0.3.3.jar -- diff --git a/lib/thrift-server-0.3.3.jar b/lib/thrift-server-0.3.3.jar new file mode 100644 index 000..06e3113 Binary files /dev/null and b/lib/thrift-server-0.3.3.jar differ
[1/6] Improve Stress Tool patch by Benedict; reviewed by Pavel Yaskevich for CASSANDRA-6199
Updated Branches: refs/heads/trunk 34235ad7b -> 2e1e98ad0 http://git-wip-us.apache.org/repos/asf/cassandra/blob/2e1e98ad/tools/stress/src/org/apache/cassandra/stress/util/SmartThriftClient.java -- diff --git a/tools/stress/src/org/apache/cassandra/stress/util/SmartThriftClient.java b/tools/stress/src/org/apache/cassandra/stress/util/SmartThriftClient.java new file mode 100644 index 000..99fa452 --- /dev/null +++ b/tools/stress/src/org/apache/cassandra/stress/util/SmartThriftClient.java @@ -0,0 +1,235 @@ +package org.apache.cassandra.stress.util; + +import java.nio.ByteBuffer; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.atomic.AtomicInteger; + +import com.datastax.driver.core.Host; +import com.datastax.driver.core.Metadata; +import org.apache.cassandra.stress.settings.StressSettings; +import org.apache.cassandra.thrift.*; +import org.apache.cassandra.utils.ByteBufferUtil; +import org.apache.thrift.TException; + +public class SmartThriftClient implements ThriftClient +{ + +final String keyspace; +final Metadata metadata; +final StressSettings settings; +final ConcurrentHashMap> cache = new ConcurrentHashMap<>(); + +final AtomicInteger queryIdCounter = new AtomicInteger(); +final ConcurrentHashMap queryStrings = new ConcurrentHashMap<>(); +final ConcurrentHashMap queryIds = new ConcurrentHashMap<>(); + +public SmartThriftClient(StressSettings settings, String keyspace, Metadata metadata) +{ +this.metadata = metadata; +this.keyspace = keyspace; +this.settings = settings; +} + +private final AtomicInteger roundrobin = new AtomicInteger(); + +private Integer getId(String query) +{ +Integer r; +if ((r = queryIds.get(query)) != null) +return r; +r = queryIdCounter.incrementAndGet(); +if (queryIds.putIfAbsent(query, r) == null) +return r; +queryStrings.put(r, query); +return queryIds.get(query); +} + +final class Client +{ +final Cassandra.Client client; +final Host host; +final Map queryMap = new HashMap<>(); + +Client(Cassandra.Client client, Host host) +{ +this.client = client; +this.host = host; +} + +Integer get(Integer id, boolean cql3) throws TException +{ +Integer serverId = queryMap.get(id); +if (serverId != null) +return serverId; +prepare(id, cql3); +return queryMap.get(id); +} + + void prepare(Integer id, boolean cql3) throws TException + { + String query; + while ( null == (query = queryStrings.get(id)) ) ; + if (cql3) + { + Integer serverId = client.prepare_cql3_query(ByteBufferUtil.bytes(query), Compression.NONE).itemId; + queryMap.put(id, serverId); + } + else + { + Integer serverId = client.prepare_cql_query(ByteBufferUtil.bytes(query), Compression.NONE).itemId; + queryMap.put(id, serverId); + } + } +} + +private Client get(ByteBuffer pk) +{ +Set hosts = metadata.getReplicas(keyspace, pk); +int count = roundrobin.incrementAndGet() % hosts.size(); +if (count < 0) +count = -count; +Iterator iter = hosts.iterator(); +while (count > 0 && iter.hasNext()) +iter.next(); +Host host = iter.next(); +ConcurrentLinkedQueue q = cache.get(host); +if (q == null) +{ +ConcurrentLinkedQueue newQ = new ConcurrentLinkedQueue(); +q = cache.putIfAbsent(host, newQ); +if (q == null) +q = newQ; +} +Client tclient = q.poll(); +if (tclient != null) +return tclient; +return new Client(settings.getRawThriftClient(host.getAddress().getHostAddress()), host); +} + +@Override +public void batch_mutate(Map>> record, ConsistencyLevel consistencyLevel) throws TException +{ +for (Map.Entry>> e : record.entrySet()) +{ +Client client = get(e.getKey()); +try +{ + client.client.batch_mutate(Collections.singletonMap(e.getKey(), e.getValue()), consistencyLevel); +} finally +{ +cache.get(client.host).add(client); +} +} +} + +@Override +public List get_slice(ByteBuffer key, ColumnParent parent, SlicePredicate predicate, ConsistencyLevel consistencyLevel) throws InvalidRequestException, UnavailableException, TimedOutException, TException +{ +Client client = get(key); +try +{ +return client.cli
git commit: bump Distruptor Thrift Server version to 0.3.2
Updated Branches: refs/heads/cassandra-2.0 72be2a436 -> b4bc50e44 bump Distruptor Thrift Server version to 0.3.2 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b4bc50e4 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b4bc50e4 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b4bc50e4 Branch: refs/heads/cassandra-2.0 Commit: b4bc50e44d3cb1c1a528132e11e6641212b5bc3c Parents: 72be2a4 Author: Pavel Yaskevich Authored: Thu Sep 19 14:08:38 2013 -0700 Committer: Pavel Yaskevich Committed: Thu Sep 19 14:08:38 2013 -0700 -- build.xml | 4 ++-- lib/thrift-server-0.3.0.jar | Bin 123898 -> 0 bytes lib/thrift-server-0.3.2.jar | Bin 0 -> 123920 bytes 3 files changed, 2 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/cassandra/blob/b4bc50e4/build.xml -- diff --git a/build.xml b/build.xml index 6aab42a..72291e2 100644 --- a/build.xml +++ b/build.xml @@ -354,7 +354,7 @@ - + @@ -452,7 +452,7 @@ - + http://git-wip-us.apache.org/repos/asf/cassandra/blob/b4bc50e4/lib/thrift-server-0.3.0.jar -- diff --git a/lib/thrift-server-0.3.0.jar b/lib/thrift-server-0.3.0.jar deleted file mode 100644 index 3c93bb9..000 Binary files a/lib/thrift-server-0.3.0.jar and /dev/null differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/b4bc50e4/lib/thrift-server-0.3.2.jar -- diff --git a/lib/thrift-server-0.3.2.jar b/lib/thrift-server-0.3.2.jar new file mode 100644 index 000..5b03c4d Binary files /dev/null and b/lib/thrift-server-0.3.2.jar differ