You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2014/02/18 23:25:06 UTC

git commit: Fix replaying pre-2.0 commit logs

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.0 6a34b5651 -> ad3a4f824


Fix replaying pre-2.0 commit logs

patch by Aleksey Yeschenko; reviewed by Jonathan Ellis for
CASSANDRA-6714


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

Branch: refs/heads/cassandra-2.0
Commit: ad3a4f824e6d0f1484883f78498e3a07592259b3
Parents: 6a34b56
Author: Aleksey Yeschenko <al...@apache.org>
Authored: Wed Feb 19 01:21:13 2014 +0300
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Wed Feb 19 01:22:59 2014 +0300

----------------------------------------------------------------------
 CHANGES.txt                                          |  1 +
 .../cassandra/db/commitlog/CommitLogDescriptor.java  |  6 +++++-
 .../cassandra/db/commitlog/CommitLogReplayer.java    | 15 ++++++++-------
 3 files changed, 14 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/ad3a4f82/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index a5da346..95faf18 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -17,6 +17,7 @@
  * Improve support for paginating over composites (CASSANDRA-4851)
  * Fix count(*) queries in a mixed cluster (CASSANDRA-6707)
  * Improve repair tasks(snapshot, differencing) concurrency (CASSANDRA-6566)
+ * Fix replaying pre-2.0 commit logs (CASSANDRA-6714)
 Merged from 1.2:
  * Fix broken streams when replacing with same IP (CASSANDRA-6622)
  * Fix upgradesstables NPE for non-CF-based indexes (CASSANDRA-6645)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ad3a4f82/src/java/org/apache/cassandra/db/commitlog/CommitLogDescriptor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/commitlog/CommitLogDescriptor.java b/src/java/org/apache/cassandra/db/commitlog/CommitLogDescriptor.java
index 87de7d8..7488c20 100644
--- a/src/java/org/apache/cassandra/db/commitlog/CommitLogDescriptor.java
+++ b/src/java/org/apache/cassandra/db/commitlog/CommitLogDescriptor.java
@@ -70,7 +70,6 @@ public class CommitLogDescriptor
 
     public int getMessagingVersion()
     {
-        assert MessagingService.current_version == MessagingService.VERSION_20;
         switch (version)
         {
             case VERSION_12:
@@ -82,6 +81,11 @@ public class CommitLogDescriptor
         }
     }
 
+    public int getVersion()
+    {
+        return version;
+    }
+
     public String fileName()
     {
         return FILENAME_PREFIX + version + SEPARATOR + id + FILENAME_EXTENSION;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ad3a4f82/src/java/org/apache/cassandra/db/commitlog/CommitLogReplayer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/commitlog/CommitLogReplayer.java b/src/java/org/apache/cassandra/db/commitlog/CommitLogReplayer.java
index 44713ad..56cd4ff 100644
--- a/src/java/org/apache/cassandra/db/commitlog/CommitLogReplayer.java
+++ b/src/java/org/apache/cassandra/db/commitlog/CommitLogReplayer.java
@@ -179,11 +179,12 @@ public class CommitLogReplayer
     public void recover(File file) throws IOException
     {
         final ReplayFilter replayFilter = ReplayFilter.create();
-
-        logger.info("Replaying " + file.getPath());
         CommitLogDescriptor desc = CommitLogDescriptor.fromFileName(file.getName());
         final long segment = desc.id;
-        int version = desc.getMessagingVersion();
+        logger.info("Replaying {} (CL version {}, messaging version {})",
+                    file.getPath(),
+                    desc.getVersion(),
+                    desc.getMessagingVersion());
         RandomAccessReader reader = RandomAccessReader.open(new File(file.getAbsolutePath()));
         try
         {
@@ -234,7 +235,7 @@ public class CommitLogReplayer
 
                     long claimedSizeChecksum = reader.readLong();
                     checksum.reset();
-                    if (version < CommitLogDescriptor.VERSION_20)
+                    if (desc.getVersion() < CommitLogDescriptor.VERSION_20)
                         checksum.update(serializedSize);
                     else
                         FBUtilities.updateChecksumInt(checksum, serializedSize);
@@ -266,9 +267,9 @@ public class CommitLogReplayer
                 final RowMutation rm;
                 try
                 {
-                    // assuming version here. We've gone to lengths to make sure what gets written to the CL is in
-                    // the current version. so do make sure the CL is drained prior to upgrading a node.
-                    rm = RowMutation.serializer.deserialize(new DataInputStream(bufIn), version, ColumnSerializer.Flag.LOCAL);
+                    rm = RowMutation.serializer.deserialize(new DataInputStream(bufIn),
+                                                            desc.getMessagingVersion(),
+                                                            ColumnSerializer.Flag.LOCAL);
                     // doublecheck that what we read is [still] valid for the current schema
                     for (ColumnFamily cf : rm.getColumnFamilies())
                         for (Column cell : cf)