cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sn...@apache.org
Subject [1/3] cassandra git commit: Saved caches use ambigous keyspace and CF name to identify tables
Date Thu, 17 Sep 2015 21:27:40 GMT
Repository: cassandra
Updated Branches:
  refs/heads/cassandra-3.0 90661a325 -> 6e5d16b37


Saved caches use ambigous keyspace and CF name to identify tables

patch by Ariel Weisberg; reviewed by Robert Stupp for CASSANDRA-10359


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/0b8b67bf
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/0b8b67bf
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/0b8b67bf

Branch: refs/heads/cassandra-3.0
Commit: 0b8b67bfe28db8e6b2aa0ab91cf76da5ff55fea3
Parents: 4e3555c
Author: Ariel Weisberg <ariel.weisberg@datastax.com>
Authored: Thu Sep 17 23:22:56 2015 +0200
Committer: Robert Stupp <snazy@snazy.de>
Committed: Thu Sep 17 23:22:56 2015 +0200

----------------------------------------------------------------------
 CHANGES.txt                                     |  2 +-
 .../apache/cassandra/cache/AutoSavingCache.java | 43 ++++++++++++++------
 .../apache/cassandra/cql3/KeyCacheCqlTest.java  |  1 +
 3 files changed, 33 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/0b8b67bf/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 207f16a..e2dd83a 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,5 @@
 2.1.10
- * Fix cache handling of 2i and base tables (CASSANDRA-10155)
+ * Fix cache handling of 2i and base tables (CASSANDRA-10155, 10359)
  * Fix NPE in nodetool compactionhistory (CASSANDRA-9758)
  * (Pig) support BulkOutputFormat as a URL parameter (CASSANDRA-7410)
  * BATCH statement is broken in cqlsh (CASSANDRA-10272)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/0b8b67bf/src/java/org/apache/cassandra/cache/AutoSavingCache.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cache/AutoSavingCache.java b/src/java/org/apache/cassandra/cache/AutoSavingCache.java
index 3ebbc76..1174c44 100644
--- a/src/java/org/apache/cassandra/cache/AutoSavingCache.java
+++ b/src/java/org/apache/cassandra/cache/AutoSavingCache.java
@@ -178,6 +178,15 @@ public class AutoSavingCache<K extends CacheKey, V> extends InstrumentingCache<K
             {
                 logger.info(String.format("reading saved cache %s", path));
                 in = new DataInputStream(new LengthAvailableInputStream(new BufferedInputStream(streamFactory.getInputStream(path)),
path.length()));
+
+                //Check the schema has not changed since CFs are looked up by name which
is ambiguous
+                UUID schemaVersion = new UUID(in.readLong(), in.readLong());
+                if (!schemaVersion.equals(Schema.instance.getVersion()))
+                    throw new RuntimeException("Cache schema version "
+                                              + schemaVersion.toString()
+                                              + " does not match current schema version "
+                                              + Schema.instance.getVersion());
+
                 ArrayDeque<Future<Pair<K, V>>> futures = new ArrayDeque<Future<Pair<K,
V>>>();
 
                 while (in.available() > 0)
@@ -313,23 +322,33 @@ public class AutoSavingCache<K extends CacheKey, V> extends InstrumentingCache<K
                     throw new RuntimeException(e);
                 }
 
-                for (K key : keys)
+                try
                 {
-
-                    ColumnFamilyStore cfs = Schema.instance.getColumnFamilyStoreIncludingIndexes(key.ksAndCFName);
-                    if (cfs == null)
-                        continue; // the table or 2i has been dropped.
-
-                    try
+                    //Need to be able to check schema version because CF names are ambiguous
+                    UUID schemaVersion = Schema.instance.getVersion();
+                    if (schemaVersion == null)
                     {
-                        cacheLoader.serialize(key, writer, cfs);
+                        Schema.instance.updateVersion();
+                        schemaVersion = Schema.instance.getVersion();
                     }
-                    catch (IOException e)
+                    writer.writeLong(schemaVersion.getMostSignificantBits());
+                    writer.writeLong(schemaVersion.getLeastSignificantBits());
+
+                    for (K key : keys)
                     {
-                        throw new FSWriteError(e, tempCacheFile);
-                    }
 
-                    keysWritten++;
+                        ColumnFamilyStore cfs = Schema.instance.getColumnFamilyStoreIncludingIndexes(key.ksAndCFName);
+                        if (cfs == null)
+                            continue; // the table or 2i has been dropped.
+
+                        cacheLoader.serialize(key, writer, cfs);
+
+                        keysWritten++;
+                    }
+                }
+                catch (IOException e)
+                {
+                    throw new FSWriteError(e, tempCacheFile);
                 }
             }
             finally

http://git-wip-us.apache.org/repos/asf/cassandra/blob/0b8b67bf/test/unit/org/apache/cassandra/cql3/KeyCacheCqlTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/KeyCacheCqlTest.java b/test/unit/org/apache/cassandra/cql3/KeyCacheCqlTest.java
index 0e879e9..f2bea8e 100644
--- a/test/unit/org/apache/cassandra/cql3/KeyCacheCqlTest.java
+++ b/test/unit/org/apache/cassandra/cql3/KeyCacheCqlTest.java
@@ -129,6 +129,7 @@ public class KeyCacheCqlTest extends CQLTester
         assertNull(Schema.instance.getColumnFamilyStoreIncludingIndexes(Pair.create(KEYSPACE,
"bar")));
 
         dropTable("DROP TABLE %s");
+        Schema.instance.updateVersion();
 
         //Test loading for a dropped 2i/table
         CacheService.instance.keyCache.clear();


Mime
View raw message