Repository: cassandra Updated Branches: refs/heads/trunk 20ccf46f1 -> c37e7bfbb
Increase bloom filter true positive count on key cache hit Patch by marcuse; reviewed by thobbs for CASSANDRA-8525 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/f981bd59 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/f981bd59 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/f981bd59 Branch: refs/heads/trunk Commit: f981bd5969ad677e3ae6cda832075d94245acd4c Parents: 5f54285 Author: Marcus Eriksson <[email protected]> Authored: Mon Dec 22 09:00:04 2014 +0100 Committer: Marcus Eriksson <[email protected]> Committed: Wed Dec 24 13:57:00 2014 +0100 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../cassandra/io/sstable/SSTableReader.java | 3 ++ .../cassandra/io/sstable/SSTableReaderTest.java | 36 +++++++++++++++++++- 3 files changed, 39 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/f981bd59/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 57ab5b4..c8cf1d4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.0.12: + * Increase bf true positive count on key cache hit (CASSANDRA-8525) * Move MeteredFlusher to its own thread (CASSANDRA-8485) * Fix non-distinct results in DISTNCT queries on static columns when paging is enabled (CASSANDRA-8087) http://git-wip-us.apache.org/repos/asf/cassandra/blob/f981bd59/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 f0e9e65..803c7fa 100644 --- a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java +++ b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java @@ -887,7 +887,10 @@ public class SSTableReader extends SSTable implements Closeable RowIndexEntry cachedEntry = keyCache.get(unifiedKey); keyCacheRequest.incrementAndGet(); if (cachedEntry != null) + { keyCacheHit.incrementAndGet(); + bloomFilterTracker.addTruePositive(); + } return cachedEntry; } else http://git-wip-us.apache.org/repos/asf/cassandra/blob/f981bd59/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java b/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java index 427d089..e49e564 100644 --- a/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java +++ b/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java @@ -56,6 +56,7 @@ import org.apache.cassandra.thrift.IndexExpression; import org.apache.cassandra.thrift.IndexOperator; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.Pair; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @RunWith(OrderedJUnit4ClassRunner.class) @@ -204,6 +205,39 @@ public class SSTableReaderTest extends SchemaLoader } @Test + public void testGetPositionsKeyCacheStats() throws IOException, ExecutionException, InterruptedException + { + Keyspace keyspace = Keyspace.open("Keyspace1"); + ColumnFamilyStore store = keyspace.getColumnFamilyStore("Standard2"); + CacheService.instance.keyCache.setCapacity(1000); + + // insert data and compact to a single sstable + CompactionManager.instance.disableAutoCompaction(); + for (int j = 0; j < 10; j++) + { + ByteBuffer key = ByteBufferUtil.bytes(String.valueOf(j)); + RowMutation rm = new RowMutation("Keyspace1", key); + rm.add("Standard2", ByteBufferUtil.bytes("0"), ByteBufferUtil.EMPTY_BYTE_BUFFER, j); + rm.apply(); + } + store.forceBlockingFlush(); + CompactionManager.instance.performMaximal(store); + + SSTableReader sstable = store.getSSTables().iterator().next(); + sstable.getPosition(k(2), SSTableReader.Operator.EQ); + assertEquals(0, sstable.getKeyCacheHit()); + assertEquals(1, sstable.getBloomFilterTruePositiveCount()); + sstable.getPosition(k(2), SSTableReader.Operator.EQ); + assertEquals(1, sstable.getKeyCacheHit()); + assertEquals(2, sstable.getBloomFilterTruePositiveCount()); + sstable.getPosition(k(15), SSTableReader.Operator.EQ); + assertEquals(1, sstable.getKeyCacheHit()); + assertEquals(2, sstable.getBloomFilterTruePositiveCount()); + + } + + + @Test public void testPersistentStatisticsWithSecondaryIndex() throws IOException, ExecutionException, InterruptedException { // Create secondary index and flush to disk @@ -254,7 +288,7 @@ public class SSTableReaderTest extends SchemaLoader // test to see if sstable can be opened as expected SSTableReader target = SSTableReader.open(desc); - Assert.assertEquals(target.getKeySampleSize(), 1); + assertEquals(target.getKeySampleSize(), 1); Assert.assertArrayEquals(ByteBufferUtil.getArray(firstKey.key), target.getKeySample(0)); assert target.first.equals(firstKey); assert target.last.equals(lastKey);
