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