Repository: cassandra Updated Branches: refs/heads/trunk ee85a31f6 -> 72d187c0f
Fix sstable read rate tracking for NamesQueryFilters Patch by Tyler Hobbs; reviewed by Aleksey Yeschenko for CASSANDRA-8239 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/684b4f96 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/684b4f96 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/684b4f96 Branch: refs/heads/trunk Commit: 684b4f96fa7c9abcfa8a2d3483a4501cd9902bd5 Parents: 0bc1ea3 Author: Tyler Hobbs <[email protected]> Authored: Tue Nov 4 09:40:27 2014 -0600 Committer: Tyler Hobbs <[email protected]> Committed: Tue Nov 4 09:40:27 2014 -0600 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../cassandra/db/CollationController.java | 1 + .../cassandra/io/sstable/SSTableReaderTest.java | 28 ++++++++++++++++++++ 3 files changed, 30 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/684b4f96/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 8dd2613..37b3f83 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.1.2 + * Fix read-rate tracking of sstables for some queries (CASSANDRA-8239) * Fix default timestamp in QueryOptions (CASSANDRA-8246) * Set socket timeout when reading remote version (CASSANDRA-8188) * Refactor how we track live size (CASSANDRA-7852) http://git-wip-us.apache.org/repos/asf/cassandra/blob/684b4f96/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 1bc421d..f9d5daa 100644 --- a/src/java/org/apache/cassandra/db/CollationController.java +++ b/src/java/org/apache/cassandra/db/CollationController.java @@ -123,6 +123,7 @@ public class CollationController break; Tracing.trace("Merging data from sstable {}", sstable.descriptor.generation); + sstable.incrementReadCount(); OnDiskAtomIterator iter = reducedFilter.getSSTableColumnIterator(sstable); iterators.add(iter); isEmpty = false; http://git-wip-us.apache.org/repos/asf/cassandra/blob/684b4f96/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 6f8ab62..ef6b14a 100644 --- a/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java +++ b/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java @@ -188,6 +188,34 @@ public class SSTableReaderTest extends SchemaLoader } @Test + public void testReadRateTracking() + { + // try to make sure CASSANDRA-8239 never happens again + Keyspace keyspace = Keyspace.open("Keyspace1"); + ColumnFamilyStore store = keyspace.getColumnFamilyStore("Standard1"); + + for (int j = 0; j < 10; j++) + { + ByteBuffer key = ByteBufferUtil.bytes(String.valueOf(j)); + Mutation rm = new Mutation("Keyspace1", key); + rm.add("Standard1", cellname("0"), ByteBufferUtil.EMPTY_BYTE_BUFFER, j); + rm.apply(); + } + store.forceBlockingFlush(); + + SSTableReader sstable = store.getSSTables().iterator().next(); + assertEquals(0, sstable.readMeter.count()); + + DecoratedKey key = sstable.partitioner.decorateKey(ByteBufferUtil.bytes("4")); + store.getColumnFamily(key, Composites.EMPTY, Composites.EMPTY, false, 100, 100); + assertEquals(1, sstable.readMeter.count()); + store.getColumnFamily(key, cellname("0"), cellname("0"), false, 100, 100); + assertEquals(2, sstable.readMeter.count()); + store.getColumnFamily(Util.namesQueryFilter(store, key, cellname("0"))); + assertEquals(3, sstable.readMeter.count()); + } + + @Test public void testGetPositionsForRangesWithKeyCache() throws ExecutionException, InterruptedException { Keyspace keyspace = Keyspace.open("Keyspace1");
