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 ----------------------------------------------------------------------