You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by be...@apache.org on 2015/05/07 12:58:27 UTC
[3/6] cassandra git commit: Overload SecondaryIndex#indexes to accept
the column definition
Overload SecondaryIndex#indexes to accept the column definition
patch by sam; reviewed by sergio for CASSANDRA-9314
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/6ab0c301
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/6ab0c301
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/6ab0c301
Branch: refs/heads/trunk
Commit: 6ab0c301edaf16544de7f839ffcd345dadef1cf6
Parents: afe541a
Author: Benedict Elliott Smith <be...@apache.org>
Authored: Thu May 7 11:53:30 2015 +0100
Committer: Benedict Elliott Smith <be...@apache.org>
Committed: Thu May 7 11:53:30 2015 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/db/index/SecondaryIndex.java | 12 ++++++++-
.../db/index/SecondaryIndexManager.java | 4 +--
.../cassandra/db/ColumnFamilyStoreTest.java | 27 +++++++++-----------
.../db/index/PerRowSecondaryIndexTest.java | 14 ++++++++++
5 files changed, 40 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ab0c301/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 45c0238..d76606c 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
2.0.15:
+ * Overload SecondaryIndex#indexes to accept the column definition (CASSANDRA-9314)
* (cqlsh) Add SERIAL and LOCAL_SERIAL consistency levels (CASSANDRA-8051)
* Fix index selection during rebuild with certain table layouts (CASSANDRA-9281)
* Fix partition-level-delete-only workload accounting (CASSANDRA-9194)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ab0c301/src/java/org/apache/cassandra/db/index/SecondaryIndex.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/index/SecondaryIndex.java b/src/java/org/apache/cassandra/db/index/SecondaryIndex.java
index a83f5dd..789cc29 100644
--- a/src/java/org/apache/cassandra/db/index/SecondaryIndex.java
+++ b/src/java/org/apache/cassandra/db/index/SecondaryIndex.java
@@ -292,7 +292,7 @@ public abstract class SecondaryIndex
/**
* Returns true if the provided column name is indexed by this secondary index.
*
- * The default implement checks whether the name is one the columnDef name,
+ * The default implementation checks whether the name is one the columnDef name,
* but this should be overriden but subclass if needed.
*/
public boolean indexes(ByteBuffer name)
@@ -304,6 +304,16 @@ public abstract class SecondaryIndex
}
return false;
}
+
+ /**
+ * Returns true if the provided column definition is indexed by this secondary index.
+ *
+ * The default implementation checks whether it is contained in this index column definitions set.
+ */
+ public boolean indexes(ColumnDefinition cdef)
+ {
+ return columnDefs.contains(cdef);
+ }
/**
* This is the primary way to create a secondary index instance for a CF column.
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ab0c301/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java b/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java
index d5e88d0..b2f5196 100644
--- a/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java
+++ b/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java
@@ -133,7 +133,7 @@ public class SecondaryIndexManager
{
idxNames = filterByColumn(idxNames);
if (idxNames.isEmpty())
- return;
+ return;
logger.info(String.format("Submitting index build of %s for data in %s",
idxNames, StringUtils.join(sstables, ", ")));
@@ -589,7 +589,7 @@ public class SecondaryIndexManager
{
for (ColumnDefinition column : baseCfs.metadata.allColumns())
{
- if (candidate.getColumnDefs().contains(column))
+ if (candidate.indexes(column))
{
filtered.add(candidate.getIndexName());
break;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ab0c301/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java b/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java
index 001f838..2bcead8 100644
--- a/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java
+++ b/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java
@@ -62,6 +62,7 @@ import org.apache.cassandra.utils.WrappedRunnable;
import static org.junit.Assert.*;
import static org.apache.cassandra.Util.*;
+import org.apache.cassandra.db.index.PerRowSecondaryIndexTest;
import static org.apache.cassandra.utils.ByteBufferUtil.bytes;
import static org.apache.commons.lang3.ArrayUtils.EMPTY_BYTE_ARRAY;
@@ -2173,34 +2174,30 @@ public class ColumnFamilyStoreTest extends SchemaLoader
});
System.err.println("Row key: " + rowKey + " Cols: " + transformed);
}
-
+
@Test
public void testRebuildSecondaryIndex() throws IOException
{
- ByteBuffer indexedColumnName = ByteBufferUtil.bytes("indexed");
RowMutation rm;
-
+
rm = new RowMutation("PerRowSecondaryIndex", ByteBufferUtil.bytes("k1"));
- rm.add("Indexed1", indexedColumnName, ByteBufferUtil.bytes("foo"), 1);
+ rm.add("Indexed1", ByteBufferUtil.bytes("indexed"), ByteBufferUtil.bytes("foo"), 1);
rm.apply();
assertTrue(Arrays.equals("k1".getBytes(), PerRowSecondaryIndexTest.TestIndex.LAST_INDEXED_KEY.array()));
-
- ColumnFamilyStore cfs = Keyspace.open("PerRowSecondaryIndex").getColumnFamilyStore("Indexed1");
- cfs.forceBlockingFlush();
-
+
+ Keyspace.open("PerRowSecondaryIndex").getColumnFamilyStore("Indexed1").forceBlockingFlush();
+
PerRowSecondaryIndexTest.TestIndex.reset();
-
+
ColumnFamilyStore.rebuildSecondaryIndex("PerRowSecondaryIndex", "Indexed1", PerRowSecondaryIndexTest.TestIndex.class.getSimpleName());
assertTrue(Arrays.equals("k1".getBytes(), PerRowSecondaryIndexTest.TestIndex.LAST_INDEXED_KEY.array()));
-
+
PerRowSecondaryIndexTest.TestIndex.reset();
-
- ColumnDefinition indexedColumnDef = cfs.metadata.getColumnDefinition(indexedColumnName);
- cfs.indexManager.getIndexForColumn(indexedColumnName).getColumnDefs().remove(indexedColumnDef);
-
+
+ PerRowSecondaryIndexTest.TestIndex.ACTIVE = false;
ColumnFamilyStore.rebuildSecondaryIndex("PerRowSecondaryIndex", "Indexed1", PerRowSecondaryIndexTest.TestIndex.class.getSimpleName());
assertNull(PerRowSecondaryIndexTest.TestIndex.LAST_INDEXED_KEY);
-
+
PerRowSecondaryIndexTest.TestIndex.reset();
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ab0c301/test/unit/org/apache/cassandra/db/index/PerRowSecondaryIndexTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/index/PerRowSecondaryIndexTest.java b/test/unit/org/apache/cassandra/db/index/PerRowSecondaryIndexTest.java
index 81173b2..1a4b7d4 100644
--- a/test/unit/org/apache/cassandra/db/index/PerRowSecondaryIndexTest.java
+++ b/test/unit/org/apache/cassandra/db/index/PerRowSecondaryIndexTest.java
@@ -116,16 +116,30 @@ public class PerRowSecondaryIndexTest extends SchemaLoader
public static class TestIndex extends PerRowSecondaryIndex
{
+ public static volatile boolean ACTIVE = true;
public static ColumnFamily LAST_INDEXED_ROW;
public static ByteBuffer LAST_INDEXED_KEY;
public static void reset()
{
+ ACTIVE = true;
LAST_INDEXED_KEY = null;
LAST_INDEXED_ROW = null;
}
@Override
+ public boolean indexes(ByteBuffer name)
+ {
+ return ACTIVE;
+ }
+
+ @Override
+ public boolean indexes(ColumnDefinition cdef)
+ {
+ return ACTIVE;
+ }
+
+ @Override
public void index(ByteBuffer rowKey, ColumnFamily cf)
{
QueryFilter filter = QueryFilter.getIdentityFilter(DatabaseDescriptor.getPartitioner().decorateKey(rowKey),