[2/4] cassandra git commit: Revert "Add row offset support to SASI"

2016-11-17 Thread xedin
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

2016-11-17 Thread xedin
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"

2016-11-17 Thread xedin
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"

2016-11-17 Thread xedin
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"

2016-11-17 Thread xedin
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"

2016-11-17 Thread xedin
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"

2016-11-17 Thread xedin
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

2016-09-05 Thread xedin
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

2016-09-05 Thread xedin
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

2016-09-05 Thread xedin
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

2016-08-18 Thread xedin
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

2016-08-17 Thread xedin
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

2016-08-17 Thread xedin
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

2016-07-04 Thread xedin
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

2016-07-04 Thread xedin
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

2016-07-04 Thread xedin
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

2016-06-26 Thread xedin
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

2016-06-23 Thread xedin
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

2016-04-28 Thread xedin
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

2016-04-28 Thread xedin
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

2016-04-28 Thread xedin
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

2016-04-08 Thread xedin
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

2016-04-08 Thread xedin
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

2016-04-08 Thread xedin
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

2016-04-04 Thread xedin
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

2016-04-03 Thread xedin
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

2016-03-27 Thread xedin
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

2016-03-27 Thread xedin
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

2016-03-27 Thread xedin
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

2016-03-27 Thread xedin
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

2016-03-27 Thread xedin
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

2016-02-22 Thread xedin
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

2016-02-17 Thread xedin
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

2016-02-17 Thread xedin
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

2016-02-16 Thread xedin
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

2016-02-11 Thread xedin
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

2016-02-10 Thread xedin
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

2016-02-10 Thread xedin
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

2016-02-05 Thread xedin
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

2016-02-05 Thread xedin
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

2016-01-23 Thread xedin
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

2016-01-23 Thread xedin
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

2016-01-23 Thread xedin
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

2016-01-23 Thread xedin
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

2016-01-23 Thread xedin
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

2016-01-23 Thread xedin
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

2016-01-23 Thread xedin
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

2016-01-23 Thread xedin
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

2016-01-23 Thread xedin
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

2016-01-23 Thread xedin
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

2016-01-23 Thread xedin
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

2016-01-23 Thread xedin
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

2016-01-23 Thread xedin
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

2016-01-23 Thread xedin
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

2015-11-19 Thread xedin
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

2014-09-17 Thread xedin
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

2014-09-17 Thread xedin
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

2014-09-17 Thread xedin
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

2014-09-17 Thread xedin
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

2014-09-17 Thread xedin
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

2014-09-17 Thread xedin
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

2014-09-05 Thread xedin
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

2014-09-02 Thread xedin
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

2014-03-25 Thread xedin
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

2014-03-25 Thread xedin
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

2014-03-25 Thread xedin
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

2014-03-25 Thread xedin
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

2014-03-25 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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`

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-13 Thread xedin
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

2014-03-12 Thread xedin
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

2014-02-13 Thread xedin
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

2014-02-13 Thread xedin
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

2014-02-13 Thread xedin
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

2014-02-12 Thread xedin
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

2014-01-10 Thread xedin
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

2014-01-10 Thread xedin
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

2014-01-10 Thread xedin
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

2013-12-23 Thread xedin
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

2013-09-19 Thread xedin
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



  1   2   3   4   5   6   >