You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by db...@apache.org on 2012/11/13 05:14:41 UTC

[3/4] git commit: Add debug logging to list filenames processed by o.a.c.db.Directories.migrateFile method patch by dbrosius reviewed by slebresne for CASSANDRA-4939

Add debug logging to list filenames processed by o.a.c.db.Directories.migrateFile method
patch by dbrosius reviewed by slebresne for CASSANDRA-4939


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

Branch: refs/heads/trunk
Commit: 6677d075e9cadc073633fd84f810b9fc5174db45
Parents: c57fc3b
Author: Dave Brosius <db...@apache.org>
Authored: Mon Nov 12 19:57:31 2012 -0500
Committer: Dave Brosius <db...@apache.org>
Committed: Mon Nov 12 19:57:31 2012 -0500

----------------------------------------------------------------------
 CHANGES.txt                                        |    4 ++
 src/java/org/apache/cassandra/db/Directories.java  |   42 ++++++++++-----
 .../org/apache/cassandra/db/DirectoriesTest.java   |   40 ++++++++++++--
 3 files changed, 67 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/6677d075/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 7d4882d..d7855af 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,7 @@
+1.2.1
+ * Add debug logging to list filenames processed by Directories.migrateFile method (CASSANDRA-4939)
+
+
 1.2-rc1
  * fix cqlsh DESCRIBE command (CASSANDRA-4913)
  * save truncation position in system table (CASSANDRA-4906)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6677d075/src/java/org/apache/cassandra/db/Directories.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Directories.java b/src/java/org/apache/cassandra/db/Directories.java
index 877b5ed..9e53ab9 100644
--- a/src/java/org/apache/cassandra/db/Directories.java
+++ b/src/java/org/apache/cassandra/db/Directories.java
@@ -620,19 +620,35 @@ public class Directories
         if (file.isDirectory())
             return;
 
-        String name = file.getName();
-        boolean isManifest = name.endsWith(LeveledManifest.EXTENSION);
-        String cfname = isManifest
-                      ? name.substring(0, name.length() - LeveledManifest.EXTENSION.length())
-                      : name.substring(0, name.indexOf(Component.separator));
-
-        int idx = cfname.indexOf(SECONDARY_INDEX_NAME_SEPARATOR); // idx > 0 => secondary index
-        String dirname = idx > 0 ? cfname.substring(0, idx) : cfname;
-        File destDir = getOrCreate(ksDir, dirname, additionalPath);
-
-        File destFile = new File(destDir, isManifest ? name : ksDir.getName() + Component.separator + name);
-        logger.debug(String.format("[upgrade to 1.1] Moving %s to %s", file, destFile));
-        FileUtils.renameWithConfirm(file, destFile);
+        try
+        {
+            String name = file.getName();
+            boolean isManifest = name.endsWith(LeveledManifest.EXTENSION);
+            int separatorIndex = name.indexOf(Component.separator);
+
+            if (isManifest || (separatorIndex >= 0))
+            {
+                String cfname = isManifest
+                              ? name.substring(0, name.length() - LeveledManifest.EXTENSION.length())
+                              : name.substring(0, separatorIndex);
+
+                int idx = cfname.indexOf(SECONDARY_INDEX_NAME_SEPARATOR); // idx > 0 => secondary index
+                String dirname = idx > 0 ? cfname.substring(0, idx) : cfname;
+                File destDir = getOrCreate(ksDir, dirname, additionalPath);
+
+                File destFile = new File(destDir, isManifest ? name : ksDir.getName() + Component.separator + name);
+                logger.debug(String.format("[upgrade to 1.1] Moving %s to %s", file, destFile));
+                FileUtils.renameWithConfirm(file, destFile);
+            }
+            else
+            {
+                logger.warn("Found unrecognized file {} while migrating sstables from pre 1.1 format, ignoring.", file);
+            }
+        }
+        catch (Exception e)
+        {
+            throw new RuntimeException(String.format("Failed migrating file %s from pre 1.1 format.", file.getPath()), e);
+        }
     }
 
     // Hack for tests, don't use otherwise

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6677d075/test/unit/org/apache/cassandra/db/DirectoriesTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/DirectoriesTest.java b/test/unit/org/apache/cassandra/db/DirectoriesTest.java
index d1a44fd..ba6576d 100644
--- a/test/unit/org/apache/cassandra/db/DirectoriesTest.java
+++ b/test/unit/org/apache/cassandra/db/DirectoriesTest.java
@@ -22,13 +22,14 @@ import java.io.IOException;
 import java.util.*;
 
 import org.junit.AfterClass;
+import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import static org.junit.Assert.assertEquals;
 
 import org.apache.cassandra.db.compaction.LeveledManifest;
+import org.apache.cassandra.io.sstable.Component;
+import org.apache.cassandra.io.sstable.Descriptor;
 import org.apache.cassandra.io.util.FileUtils;
-import org.apache.cassandra.io.sstable.*;
 
 public class DirectoriesTest
 {
@@ -103,14 +104,14 @@ public class DirectoriesTest
         for (String cf : CFS)
         {
             Directories directories = Directories.create(KS, cf);
-            assertEquals(cfDir(cf), directories.getDirectoryForNewSSTables(0));
+            Assert.assertEquals(cfDir(cf), directories.getDirectoryForNewSSTables(0));
 
             Descriptor desc = new Descriptor(cfDir(cf), KS, cf, 1, false);
             File snapshotDir = new File(cfDir(cf),  File.separator + Directories.SNAPSHOT_SUBDIR + File.separator + "42");
-            assertEquals(snapshotDir, directories.getSnapshotDirectory(desc, "42"));
+            Assert.assertEquals(snapshotDir, directories.getSnapshotDirectory(desc, "42"));
 
             File backupsDir = new File(cfDir(cf),  File.separator + Directories.BACKUPS_SUBDIR);
-            assertEquals(backupsDir, directories.getBackupsDirectory(desc));
+            Assert.assertEquals(backupsDir, directories.getBackupsDirectory(desc));
         }
     }
 
@@ -167,7 +168,34 @@ public class DirectoriesTest
         {
             Directories directories = Directories.create(KS, cf);
             File manifest = new File(cfDir(cf), cf + LeveledManifest.EXTENSION);
-            assertEquals(manifest, directories.tryGetLeveledManifest());
+            Assert.assertEquals(manifest, directories.tryGetLeveledManifest());
+        }
+    }
+
+    @Test
+    public void testHandleBadFiles() throws IOException
+    {
+        /* files not matching the pattern should just be ignored, with a log warning */
+        Directories directories = Directories.create(KS, "bad");
+        File dir = directories.getDirectoryForNewSSTables(1);
+        File f = File.createTempFile("bad", "file", dir.getParentFile());
+        Directories.migrateSSTables();
+        Assert.assertTrue(f.isFile());
+
+        /* real failures should throw an exception with informational message */
+        f = File.createTempFile("locked", ".json", dir.getParentFile());
+        File targetDir = new File(dir.getParentFile(), f.getName().substring(0, f.getName().length() - ".json".length()));
+        targetDir.mkdirs();
+        targetDir.setReadOnly();
+
+        try
+        {
+            Directories.migrateSSTables();
+            Assert.assertFalse(true);
+        }
+        catch (Exception e)
+        {
+            Assert.assertTrue(e.getMessage().contains(f.getPath()));
         }
     }
 }