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 <s...@beobal.com> Authored: Tue May 5 19:28:07 2015 +0100 Committer: Aleksey Yeschenko <alek...@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