Return-Path: X-Original-To: apmail-cassandra-commits-archive@www.apache.org Delivered-To: apmail-cassandra-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 85ADE174BB for ; Thu, 7 May 2015 10:58:25 +0000 (UTC) Received: (qmail 45588 invoked by uid 500); 7 May 2015 10:58:25 -0000 Delivered-To: apmail-cassandra-commits-archive@cassandra.apache.org Received: (qmail 45544 invoked by uid 500); 7 May 2015 10:58:25 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 45508 invoked by uid 99); 7 May 2015 10:58:25 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 07 May 2015 10:58:25 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 18ECFE4416; Thu, 7 May 2015 10:58:25 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: benedict@apache.org To: commits@cassandra.apache.org Date: Thu, 07 May 2015 10:58:26 -0000 Message-Id: In-Reply-To: <9975950f43eb4b508ac1d61c74af3ffb@git.apache.org> References: <9975950f43eb4b508ac1d61c74af3ffb@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [2/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/cassandra-2.1 Commit: 6ab0c301edaf16544de7f839ffcd345dadef1cf6 Parents: afe541a Author: Benedict Elliott Smith Authored: Thu May 7 11:53:30 2015 +0100 Committer: Benedict Elliott Smith 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),