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 2015/05/06 12:07:37 UTC

cassandra git commit: CASSANDRA-8049 follow up: only check versioning of *.db files at startup

Repository: cassandra
Updated Branches:
  refs/heads/trunk 907fe6221 -> 20c5ea02c


CASSANDRA-8049 follow up: only check versioning of *.db files at startup

patch by Sam Tunnicliffe; reviewed by Aleksey Yeschenko for
CASSANDRA-8049


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

Branch: refs/heads/trunk
Commit: 20c5ea02c43810c0cf5e72ef3c9a83fc71af2faf
Parents: 907fe62
Author: Sam Tunnicliffe <sa...@beobal.com>
Authored: Tue May 5 19:28:07 2015 +0100
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Wed May 6 13:07:06 2015 +0300

----------------------------------------------------------------------
 .../apache/cassandra/service/StartupChecks.java |  3 ++
 .../Keyspace1/Standard1/legacyleveled.json      | 27 ++++++++++++
 .../cassandra/service/StartupChecksTest.java    | 45 ++++++++++++++++----
 3 files changed, 67 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/20c5ea02/src/java/org/apache/cassandra/service/StartupChecks.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StartupChecks.java b/src/java/org/apache/cassandra/service/StartupChecks.java
index f9a1789..9c8d071 100644
--- a/src/java/org/apache/cassandra/service/StartupChecks.java
+++ b/src/java/org/apache/cassandra/service/StartupChecks.java
@@ -225,6 +225,9 @@ public class StartupChecks
             {
                 public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException
                 {
+                    if (!file.toString().endsWith(".db"))
+                        return FileVisitResult.CONTINUE;
+
                     try
                     {
                         if (!Descriptor.fromFilename(file.toString()).isCompatible())

http://git-wip-us.apache.org/repos/asf/cassandra/blob/20c5ea02/test/data/invalid-legacy-sstables/Keyspace1/Standard1/legacyleveled.json
----------------------------------------------------------------------
diff --git a/test/data/invalid-legacy-sstables/Keyspace1/Standard1/legacyleveled.json b/test/data/invalid-legacy-sstables/Keyspace1/Standard1/legacyleveled.json
new file mode 100644
index 0000000..1fc9c01
--- /dev/null
+++ b/test/data/invalid-legacy-sstables/Keyspace1/Standard1/legacyleveled.json
@@ -0,0 +1,27 @@
+{
+  "generations" : [ {
+    "generation" : 0,
+    "members" : [ 0 ]
+  }, {
+    "generation" : 1,
+    "members" : [ 1 ]
+  }, {
+    "generation" : 2,
+    "members" : [ 2 ]
+  }, {
+    "generation" : 3,
+    "members" : [ ]
+  }, {
+    "generation" : 4,
+    "members" : [ ]
+  }, {
+    "generation" : 5,
+    "members" : [ ]
+  }, {
+    "generation" : 6,
+    "members" : [ ]
+  }, {
+    "generation" : 7,
+    "members" : [ ]
+  } ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cassandra/blob/20c5ea02/test/unit/org/apache/cassandra/service/StartupChecksTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/service/StartupChecksTest.java b/test/unit/org/apache/cassandra/service/StartupChecksTest.java
index 834191a..d32b1b1 100644
--- a/test/unit/org/apache/cassandra/service/StartupChecksTest.java
+++ b/test/unit/org/apache/cassandra/service/StartupChecksTest.java
@@ -23,9 +23,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.*;
 
 import org.apache.cassandra.SchemaLoader;
 import org.apache.cassandra.config.DatabaseDescriptor;
@@ -33,6 +31,7 @@ import org.apache.cassandra.db.*;
 import org.apache.cassandra.exceptions.StartupException;
 import org.apache.cassandra.io.util.FileUtils;
 
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -40,6 +39,7 @@ public class StartupChecksTest
 {
     public static final String INVALID_LEGACY_SSTABLE_ROOT_PROP = "invalid-legacy-sstable-root";
     StartupChecks startupChecks;
+    Path sstableDir;
 
     @BeforeClass
     public static void setupServer()
@@ -48,24 +48,31 @@ public class StartupChecksTest
     }
 
     @Before
-    public void setup()
+    public void setup() throws IOException
     {
         for (ColumnFamilyStore cfs : Keyspace.open(SystemKeyspace.NAME).getColumnFamilyStores())
             cfs.clearUnsafe();
         for (File dataDir : Directories.getKSChildDirectories(SystemKeyspace.NAME))
             FileUtils.deleteRecursive(dataDir);
 
+        File dataDir = new File(DatabaseDescriptor.getAllDataFileLocations()[0]);
+        sstableDir = Paths.get(dataDir.getAbsolutePath(), "Keyspace1", "Standard1");
+        Files.createDirectories(sstableDir);
+
         startupChecks = new StartupChecks();
     }
 
+    @After
+    public void tearDown() throws IOException
+    {
+        FileUtils.deleteRecursive(sstableDir.toFile());
+    }
+
     @Test
     public void failStartupIfInvalidSSTablesFound() throws Exception
     {
         startupChecks = startupChecks.withTest(StartupChecks.checkSSTablesFormat);
 
-        File dataDir = new File(DatabaseDescriptor.getAllDataFileLocations()[0]);
-        Path sstableDir = Paths.get(dataDir.getAbsolutePath(), "Keyspace1", "Standard1");
-        Files.createDirectories(sstableDir);
         copyInvalidLegacySSTables(sstableDir);
 
         verifyFailure(startupChecks, "Detected unreadable sstables");
@@ -84,6 +91,29 @@ public class StartupChecksTest
         startupChecks.verify();
     }
 
+    @Test
+    public void compatibilityCheckIgnoresNonDbFiles() throws Exception
+    {
+        startupChecks = startupChecks.withTest(StartupChecks.checkSSTablesFormat);
+
+        copyLegacyNonSSTableFiles(sstableDir);
+        assertFalse(sstableDir.toFile().listFiles().length == 0);
+
+        startupChecks.verify();
+    }
+
+    private void copyLegacyNonSSTableFiles(Path targetDir) throws IOException
+    {
+
+        Path legacySSTableRoot = Paths.get(System.getProperty(INVALID_LEGACY_SSTABLE_ROOT_PROP),
+                                          "Keyspace1",
+                                          "Standard1");
+        for (String filename : new String[]{"Keyspace1-Standard1-ic-0-TOC.txt",
+                                            "Keyspace1-Standard1-ic-0-Digest.sha1",
+                                            "legacyleveled.json"})
+            Files.copy(Paths.get(legacySSTableRoot.toString(), filename), targetDir.resolve(filename));
+    }
+
     private void copyInvalidLegacySSTables(Path targetDir) throws IOException
     {
         File legacySSTableRoot = Paths.get(System.getProperty(INVALID_LEGACY_SSTABLE_ROOT_PROP),
@@ -94,7 +124,6 @@ public class StartupChecksTest
 
     }
 
-
     private void verifyFailure(StartupChecks tests, String message)
     {
         try