Merge branch 'cassandra-2.1' into cassandra-2.2

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

Branch: refs/heads/cassandra-2.2
Commit: 93745c05c7dd7ad841d6f5dc79f2140891ca75a0
Parents: eecfb07 0b8b67b
Author: Robert Stupp <sn...@snazy.de>
Authored: Thu Sep 17 23:23:35 2015 +0200
Committer: Robert Stupp <sn...@snazy.de>
Committed: Thu Sep 17 23:23:35 2015 +0200

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


http://git-wip-us.apache.org/repos/asf/cassandra/blob/93745c05/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index f9314f6,e2dd83a..59a50a5
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,15 -1,5 +1,15 @@@
 -2.1.10
 +2.2.2
 + * Defer default role manager setup until all nodes are on 2.2+ 
(CASSANDRA-9761)
 + * Cancel transaction for sstables we wont redistribute index summary
 +   for (CASSANDRA-10270)
 + * Handle missing RoleManager in config after upgrade to 2.2 
(CASSANDRA-10209) 
 + * Retry snapshot deletion after compaction and gc on Windows 
(CASSANDRA-10222)
 + * Fix failure to start with space in directory path on Windows 
(CASSANDRA-10239)
 + * Fix repair hang when snapshot failed (CASSANDRA-10057)
 + * Fall back to 1/4 commitlog volume for commitlog_total_space on small disks
 +   (CASSANDRA-10199)
 +Merged from 2.1:
-  * 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/93745c05/src/java/org/apache/cassandra/cache/AutoSavingCache.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/cache/AutoSavingCache.java
index 3ec9d4e,1174c44..48d60b7
--- a/src/java/org/apache/cassandra/cache/AutoSavingCache.java
+++ b/src/java/org/apache/cassandra/cache/AutoSavingCache.java
@@@ -184,9 -176,19 +184,18 @@@ public class AutoSavingCache<K extends 
              DataInputStream in = null;
              try
              {
 -                logger.info(String.format("reading saved cache %s", path));
 -                in = new DataInputStream(new LengthAvailableInputStream(new 
BufferedInputStream(streamFactory.getInputStream(path)), path.length()));
 +                logger.info(String.format("reading saved cache %s", 
dataPath));
 +                in = new DataInputStream(new LengthAvailableInputStream(new 
BufferedInputStream(streamFactory.getInputStream(dataPath, crcPath)), 
dataPath.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)
                  {
                      //ksname and cfname are serialized by the serializers in 
CacheService
@@@ -335,27 -322,34 +344,38 @@@
                      throw new RuntimeException(e);
                  }
  
-                 while (keyIterator.hasNext())
+                 try
                  {
-                     K key = keyIterator.next();
- 
-                     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)
++                    while (keyIterator.hasNext())
                      {
-                         throw new FSWriteError(e, cacheFilePaths.left);
-                     }
++                        K key = keyIterator.next();
  
-                     keysWritten++;
-                     if (keysWritten >= keysEstimate)
-                         break;
+                         ColumnFamilyStore cfs = 
Schema.instance.getColumnFamilyStoreIncludingIndexes(key.ksAndCFName);
+                         if (cfs == null)
+                             continue; // the table or 2i has been dropped.
+ 
+                         cacheLoader.serialize(key, writer, cfs);
+ 
+                         keysWritten++;
++                        if (keysWritten >= keysEstimate)
++                            break;
+                     }
                  }
+                 catch (IOException e)
+                 {
 -                    throw new FSWriteError(e, tempCacheFile);
++                    throw new FSWriteError(e, cacheFilePaths.left);
+                 }
++
              }
              finally
              {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/93745c05/test/unit/org/apache/cassandra/cql3/KeyCacheCqlTest.java
----------------------------------------------------------------------

Reply via email to