You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2012/03/23 16:02:57 UTC
[1/12] git commit: merge from 1.1
Updated Branches:
refs/heads/cassandra-1.0 fbdf7b03c -> 1e18538c9
refs/heads/cassandra-1.1 11bdcd6d7 -> d685f45ee
refs/heads/cassandra-1.1.0 643d18af2 -> 5697c3997
refs/heads/trunk e571ec2c6 -> 830495027
merge from 1.1
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/83049502
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/83049502
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/83049502
Branch: refs/heads/trunk
Commit: 83049502795d83a498c2c0d22b6042de64eb977f
Parents: e571ec2 d685f45
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Mar 23 10:02:23 2012 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Mar 23 10:02:23 2012 -0500
----------------------------------------------------------------------
CHANGES.txt | 3 +-
build.xml | 2 +-
debian/changelog | 8 +-
.../org/apache/cassandra/cache/IRowCacheEntry.java | 27 +++-
.../apache/cassandra/cache/RowCacheSentinel.java | 107 +++++++++------
.../apache/cassandra/io/sstable/SSTableReader.java | 25 ++--
.../org/apache/cassandra/utils/ByteBufferUtil.java | 4 +-
.../cassandra/io/sstable/SSTableReaderTest.java | 42 ++++++
8 files changed, 153 insertions(+), 65 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/83049502/CHANGES.txt
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/83049502/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/io/sstable/SSTableReader.java
index 864e11f,2715613..9e92220
--- a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
@@@ -357,23 -366,28 +357,28 @@@ public class SSTableReader extends SSTa
if (indexPosition == indexSize)
break;
- ByteBuffer key = null, skippedKey;
- skippedKey = ByteBufferUtil.readWithShortLength(input);
+ DecoratedKey decoratedKey = null;
+ int len = ByteBufferUtil.readShortLength(input);
+ boolean firstKey = left == null;
- boolean lastKey = indexPosition + DBConstants.shortSize + len + DBConstants.longSize == indexSize;
++ boolean lastKey = indexPosition + DBConstants.SHORT_SIZE + len + DBConstants.LONG_SIZE == indexSize;
boolean shouldAddEntry = indexSummary.shouldAddEntry();
- if (shouldAddEntry || cacheLoading || recreatebloom)
+ if (shouldAddEntry || cacheLoading || recreatebloom || firstKey || lastKey)
{
- key = skippedKey;
+ decoratedKey = decodeKey(partitioner, descriptor, ByteBufferUtil.read(input, len));
+ if (firstKey)
+ left = decoratedKey;
+ if (lastKey)
+ right = decoratedKey;
+ }
+ else
+ {
+ FileUtils.skipBytesFully(input, len);
}
-
- if(null == left)
- left = decodeKey(partitioner, descriptor, skippedKey);
- right = decodeKey(partitioner, descriptor, skippedKey);
- long dataPosition = input.readLong();
+ RowIndexEntry indexEntry = RowIndexEntry.serializer.deserialize(input, descriptor);
- if (key != null)
+ if (decoratedKey != null)
{
- DecoratedKey decoratedKey = decodeKey(partitioner, descriptor, key);
if (recreatebloom)
bf.add(decoratedKey.key);
if (shouldAddEntry)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/83049502/src/java/org/apache/cassandra/utils/ByteBufferUtil.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/83049502/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java
----------------------------------------------------------------------
diff --cc test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java
index 22e1233,102fccd..544f9e6
--- a/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java
+++ b/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java
@@@ -242,6 -244,46 +244,46 @@@ public class SSTableReaderTest extends
assertIndexQueryWorks(store);
}
+ @Test
+ public void testOpeningSSTable() throws Exception
+ {
+ String ks = "Keyspace1";
+ String cf = "Standard1";
+
+ // clear and create just one sstable for this test
+ Table table = Table.open(ks);
+ ColumnFamilyStore store = table.getColumnFamilyStore(cf);
+ store.clearUnsafe();
+ store.disableAutoCompaction();
+
+ DecoratedKey firstKey = null, lastKey = null;
+ long timestamp = System.currentTimeMillis();
+ for (int i = 0; i < DatabaseDescriptor.getIndexInterval(); i++) {
+ DecoratedKey key = Util.dk(String.valueOf(i));
+ if (firstKey == null)
+ firstKey = key;
+ if (lastKey == null)
+ lastKey = key;
+ if (store.metadata.getKeyValidator().compare(lastKey.key, key.key) < 0)
+ lastKey = key;
+ RowMutation rm = new RowMutation(ks, key.key);
+ rm.add(new QueryPath(cf, null, ByteBufferUtil.bytes("col")),
+ ByteBufferUtil.EMPTY_BYTE_BUFFER, timestamp);
+ rm.apply();
+ }
+ store.forceBlockingFlush();
+
+ SSTableReader sstable = store.getSSTables().iterator().next();
+ Descriptor desc = sstable.descriptor;
+
+ // test to see if sstable can be opened as expected
+ SSTableReader target = SSTableReader.open(desc);
- Collection<DecoratedKey<?>> keySamples = target.getKeySamples();
++ Collection<DecoratedKey> keySamples = target.getKeySamples();
+ assert keySamples.size() == 1 && keySamples.iterator().next().equals(firstKey);
+ assert target.first.equals(firstKey);
+ assert target.last.equals(lastKey);
+ }
+
private void assertIndexQueryWorks(ColumnFamilyStore indexedCFS) throws IOException
{
assert "Indexed1".equals(indexedCFS.getColumnFamilyName());