You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ja...@apache.org on 2014/10/02 20:34:09 UTC
git commit: Fix for live CFMetadata on SecondaryIndexes
Repository: cassandra
Updated Branches:
refs/heads/cassandra-2.1 88c71963c -> dbb1fa569
Fix for live CFMetadata on SecondaryIndexes
Patch by tjake; reviewed by carl yeksigian for CASSANDRA-8027
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/dbb1fa56
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/dbb1fa56
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/dbb1fa56
Branch: refs/heads/cassandra-2.1
Commit: dbb1fa5690ab3d9d26f7406910e92c6294108041
Parents: 88c7196
Author: Jake Luciani <ja...@apache.org>
Authored: Thu Oct 2 14:31:08 2014 -0400
Committer: Jake Luciani <ja...@apache.org>
Committed: Thu Oct 2 14:31:08 2014 -0400
----------------------------------------------------------------------
.../org/apache/cassandra/config/CFMetaData.java | 18 ++++++++-
.../cassandra/io/sstable/SSTableReader.java | 4 +-
.../cassandra/cql3/CrcCheckChanceTest.java | 42 ++++++++++++++++++++
3 files changed, 62 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/dbb1fa56/src/java/org/apache/cassandra/config/CFMetaData.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/CFMetaData.java b/src/java/org/apache/cassandra/config/CFMetaData.java
index 1d6e3a4..b5784ed 100644
--- a/src/java/org/apache/cassandra/config/CFMetaData.java
+++ b/src/java/org/apache/cassandra/config/CFMetaData.java
@@ -487,7 +487,6 @@ public final class CFMetaData
public CFMetaData droppedColumns(Map<ColumnIdentifier, Long> cols) {droppedColumns = cols; return this;}
public CFMetaData triggers(Map<String, TriggerDefinition> prop) {triggers = prop; return this;}
public CFMetaData isDense(Boolean prop) {isDense = prop; return this;}
-
/**
* Create new ColumnFamily metadata with generated random ID.
* When loading from existing schema, use CFMetaData
@@ -692,6 +691,23 @@ public final class CFMetaData
return cfType == ColumnFamilyType.Super;
}
+ /**
+ * The '.' char is the only way to identify if the CFMetadata is for a secondary index
+ */
+ public boolean isSecondaryIndex()
+ {
+ return cfName.contains(".");
+ }
+
+ /**
+ *
+ * @return The name of the parent cf if this is a seconday index
+ */
+ public String getParentColumnFamilyName()
+ {
+ return isSecondaryIndex() ? cfName.substring(0, cfName.indexOf('.')) : null;
+ }
+
public double getReadRepairChance()
{
return readRepairChance;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/dbb1fa56/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
index 2bd17b8..9f2b59d 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
@@ -1128,7 +1128,9 @@ public class SSTableReader extends SSTable
CompressionMetadata cmd = ((ICompressedFile) dfile).getMetadata();
- cmd.parameters.setLiveMetadata(Schema.instance.getCFMetaData(descriptor));
+ //We need the parent cf metadata
+ String cfName = metadata.isSecondaryIndex() ? metadata.getParentColumnFamilyName() : metadata.cfName;
+ cmd.parameters.setLiveMetadata(Schema.instance.getCFMetaData(metadata.ksName, cfName));
return cmd;
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/dbb1fa56/test/unit/org/apache/cassandra/cql3/CrcCheckChanceTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/CrcCheckChanceTest.java b/test/unit/org/apache/cassandra/cql3/CrcCheckChanceTest.java
index 0cd9202..b9d23cd 100644
--- a/test/unit/org/apache/cassandra/cql3/CrcCheckChanceTest.java
+++ b/test/unit/org/apache/cassandra/cql3/CrcCheckChanceTest.java
@@ -31,39 +31,81 @@ public class CrcCheckChanceTest extends CQLTester
//Start with crc_check_chance of 99%
createTable("CREATE TABLE %s (p text, c text, v text, s text static, PRIMARY KEY (p, c)) WITH compression = {'sstable_compression': 'LZ4Compressor', 'crc_check_chance' : 0.99}");
+ execute("CREATE INDEX foo ON %s(v)");
+
execute("INSERT INTO %s(p, c, v, s) values (?, ?, ?, ?)", "p1", "k1", "v1", "sv1");
execute("INSERT INTO %s(p, c, v) values (?, ?, ?)", "p1", "k2", "v2");
execute("INSERT INTO %s(p, s) values (?, ?)", "p2", "sv2");
ColumnFamilyStore cfs = Keyspace.open(CQLTester.KEYSPACE).getColumnFamilyStore(currentTable());
+ ColumnFamilyStore indexCfs = cfs.indexManager.getIndexesBackedByCfs().iterator().next();
cfs.forceBlockingFlush();
Assert.assertEquals(0.99, cfs.metadata.compressionParameters.getCrcCheckChance());
Assert.assertEquals(0.99, cfs.getSSTables().iterator().next().getCompressionMetadata().parameters.getCrcCheckChance());
+ Assert.assertEquals(0.99, indexCfs.metadata.compressionParameters.getCrcCheckChance());
+ Assert.assertEquals(0.99, indexCfs.getSSTables().iterator().next().getCompressionMetadata().parameters.getCrcCheckChance());
+
assertRows(execute("SELECT * FROM %s WHERE p=?", "p1"),
row("p1", "k1", "sv1", "v1"),
row("p1", "k2", "sv1", "v2")
);
+ assertRows(execute("SELECT * FROM %s WHERE v=?", "v1"),
+ row("p1", "k1", "sv1", "v1")
+ );
+
+
+
+ //Write a few SSTables then Compact
+
+ execute("INSERT INTO %s(p, c, v, s) values (?, ?, ?, ?)", "p1", "k1", "v1", "sv1");
+ execute("INSERT INTO %s(p, c, v) values (?, ?, ?)", "p1", "k2", "v2");
+ execute("INSERT INTO %s(p, s) values (?, ?)", "p2", "sv2");
+
+ cfs.forceBlockingFlush();
+
+
+ execute("INSERT INTO %s(p, c, v, s) values (?, ?, ?, ?)", "p1", "k1", "v1", "sv1");
+ execute("INSERT INTO %s(p, c, v) values (?, ?, ?)", "p1", "k2", "v2");
+ execute("INSERT INTO %s(p, s) values (?, ?)", "p2", "sv2");
+
+ cfs.forceBlockingFlush();
+
+ execute("INSERT INTO %s(p, c, v, s) values (?, ?, ?, ?)", "p1", "k1", "v1", "sv1");
+ execute("INSERT INTO %s(p, c, v) values (?, ?, ?)", "p1", "k2", "v2");
+ execute("INSERT INTO %s(p, s) values (?, ?)", "p2", "sv2");
+
+ cfs.forceBlockingFlush();
+
+ cfs.forceMajorCompaction();
//Verify when we alter the value the live sstable readers hold the new one
alterTable("ALTER TABLE %s WITH compression = {'sstable_compression': 'LZ4Compressor', 'crc_check_chance': 0.01}");
Assert.assertEquals( 0.01, cfs.metadata.compressionParameters.getCrcCheckChance());
Assert.assertEquals( 0.01, cfs.getSSTables().iterator().next().getCompressionMetadata().parameters.getCrcCheckChance());
+ Assert.assertEquals( 0.01, indexCfs.metadata.compressionParameters.getCrcCheckChance());
+ Assert.assertEquals( 0.01, indexCfs.getSSTables().iterator().next().getCompressionMetadata().parameters.getCrcCheckChance());
assertRows(execute("SELECT * FROM %s WHERE p=?", "p1"),
row("p1", "k1", "sv1", "v1"),
row("p1", "k2", "sv1", "v2")
);
+ assertRows(execute("SELECT * FROM %s WHERE v=?", "v1"),
+ row("p1", "k1", "sv1", "v1")
+ );
+
//Verify the call used by JMX still works
cfs.setCrcCheckChance(0.03);
Assert.assertEquals( 0.03, cfs.metadata.compressionParameters.getCrcCheckChance());
Assert.assertEquals( 0.03, cfs.getSSTables().iterator().next().getCompressionMetadata().parameters.getCrcCheckChance());
+ Assert.assertEquals( 0.03, indexCfs.metadata.compressionParameters.getCrcCheckChance());
+ Assert.assertEquals( 0.03, indexCfs.getSSTables().iterator().next().getCompressionMetadata().parameters.getCrcCheckChance());
}
}