You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2015/12/01 10:27:47 UTC
cassandra git commit: Don't throw assertion error on old key cache
keys just skip serializing them.
Repository: cassandra
Updated Branches:
refs/heads/cassandra-3.0 44164bc3a -> 4378b58bb
Don't throw assertion error on old key cache keys just skip serializing them.
patch by aweisberg; reviewed by slebresne for CASSANDRA-10778
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/4378b58b
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/4378b58b
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/4378b58b
Branch: refs/heads/cassandra-3.0
Commit: 4378b58bba61ec6e7eb0bbfa5733cf9800a7dec3
Parents: 44164bc
Author: Ariel Weisberg <ar...@datastax.com>
Authored: Mon Nov 30 14:43:50 2015 -0500
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Tue Dec 1 10:27:10 2015 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../apache/cassandra/service/CacheService.java | 4 ++++
.../cassandra/io/sstable/LegacySSTableTest.java | 19 ++++++++++++++++++-
3 files changed, 23 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4378b58b/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 0356045..bd14e67 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.0.1
+ * Fix error when saving cached key for old format sstable (CASSANDRA-10778)
* Invalidate prepared statements on DROP INDEX (CASSANDRA-10758)
* Fix SELECT statement with IN restrictions on partition key,
ORDER BY and LIMIT (CASSANDRA-10729)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4378b58b/src/java/org/apache/cassandra/service/CacheService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/CacheService.java b/src/java/org/apache/cassandra/service/CacheService.java
index a3e7d12..c51a5d1 100644
--- a/src/java/org/apache/cassandra/service/CacheService.java
+++ b/src/java/org/apache/cassandra/service/CacheService.java
@@ -455,6 +455,10 @@ public class CacheService implements CacheServiceMBean
{
public void serialize(KeyCacheKey key, DataOutputPlus out, ColumnFamilyStore cfs) throws IOException
{
+ //Don't serialize old format entries since we didn't bother to implement serialization of both for simplicity
+ //https://issues.apache.org/jira/browse/CASSANDRA-10778
+ if (!key.desc.version.storeRows()) return;
+
RowIndexEntry entry = CacheService.instance.keyCache.getInternal(key);
if (entry == null)
return;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4378b58b/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java b/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java
index 0578d44..00727b8 100644
--- a/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java
+++ b/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java
@@ -56,6 +56,7 @@ import org.apache.cassandra.io.sstable.format.SSTableReader;
import org.apache.cassandra.io.sstable.format.Version;
import org.apache.cassandra.io.sstable.format.big.BigFormat;
import org.apache.cassandra.schema.KeyspaceParams;
+import org.apache.cassandra.service.CacheService;
import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.streaming.StreamPlan;
import org.apache.cassandra.streaming.StreamSession;
@@ -238,7 +239,7 @@ public class LegacySSTableTest
loadLegacyTables();
}
- private static void loadLegacyTables() throws IOException
+ private static void loadLegacyTables() throws Exception
{
for (String legacyVersion : legacyVersions)
{
@@ -251,6 +252,8 @@ public class LegacySSTableTest
loadLegacyTable("legacy_%s_clust", legacyVersion);
loadLegacyTable("legacy_%s_clust_counter", legacyVersion);
+ CacheService.instance.invalidateKeyCache();
+ long startCount = CacheService.instance.keyCache.size();
for (int ck = 0; ck < 50; ck++)
{
String ckValue = Integer.toString(ck) + longString;
@@ -286,6 +289,20 @@ public class LegacySSTableTest
Assert.assertEquals(1L, rs.one().getLong("val"));
}
}
+
+ //For https://issues.apache.org/jira/browse/CASSANDRA-10778
+ //Validate whether the key cache successfully saves in the presence of old keys as
+ //well as loads the correct number of keys
+ long endCount = CacheService.instance.keyCache.size();
+ Assert.assertTrue(endCount > startCount);
+ CacheService.instance.keyCache.submitWrite(Integer.MAX_VALUE).get();
+ CacheService.instance.invalidateKeyCache();
+ Assert.assertEquals(startCount, CacheService.instance.keyCache.size());
+ CacheService.instance.keyCache.loadSaved();
+ if (BigFormat.instance.getVersion(legacyVersion).storeRows())
+ Assert.assertEquals(endCount, CacheService.instance.keyCache.size());
+ else
+ Assert.assertEquals(startCount, CacheService.instance.keyCache.size());
}
}