Repository: cassandra
Updated Branches:
  refs/heads/trunk 90476352a -> 774bd0bce


Follow-up #2 for 9104. Fix SchemaLoader + EmbeddedCassandraServer recover case

Patch by jmckenzie; reviewed by branimir for CASSANDRA-9104


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

Branch: refs/heads/trunk
Commit: 774bd0bceeee56abd97a122c563852210cf54bbc
Parents: 9047635
Author: Josh McKenzie <[email protected]>
Authored: Thu Apr 30 11:13:23 2015 -0500
Committer: Josh McKenzie <[email protected]>
Committed: Thu Apr 30 11:16:05 2015 -0500

----------------------------------------------------------------------
 .../org/apache/cassandra/db/commitlog/CommitLog.java | 10 ++++++----
 .../db/commitlog/CommitLogSegmentManager.java        |  2 +-
 test/unit/org/apache/cassandra/SchemaLoader.java     | 15 +++++++++++----
 .../cassandra/config/DatabaseDescriptorTest.java     |  3 ++-
 .../dht/OrderPreservingPartitionerTest.java          |  4 +++-
 5 files changed, 23 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/774bd0bc/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/commitlog/CommitLog.java 
b/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
index 37a709c..a8dda28 100644
--- a/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
+++ b/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
@@ -119,7 +119,9 @@ public class CommitLog implements CommitLogMBean
      */
     public int recover() throws IOException
     {
-        assert !allocator.createReserveSegments;
+        // If createReserveSegments is already flipped, the CLSM is running 
and recovery has already taken place.
+        if (allocator.createReserveSegments)
+            return 0;
 
         // Allocator could be in the process of initial startup with 0 active 
and available segments. We need to wait for
         // the allocation manager to finish allocation and add it to available 
segments so we don't get an invalid response
@@ -384,8 +386,7 @@ public class CommitLog implements CommitLogMBean
     public int resetUnsafe(boolean deleteSegments) throws IOException
     {
         stopUnsafe(deleteSegments);
-        startUnsafe();
-        return recover();
+        return startUnsafe();
     }
 
     /**
@@ -408,10 +409,11 @@ public class CommitLog implements CommitLogMBean
     /**
      * FOR TESTING PURPOSES.  See CommitLogAllocator
      */
-    public void startUnsafe()
+    public int startUnsafe() throws IOException
     {
         allocator.startUnsafe();
         executor.startUnsafe();
+        return recover();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/cassandra/blob/774bd0bc/src/java/org/apache/cassandra/db/commitlog/CommitLogSegmentManager.java
----------------------------------------------------------------------
diff --git 
a/src/java/org/apache/cassandra/db/commitlog/CommitLogSegmentManager.java 
b/src/java/org/apache/cassandra/db/commitlog/CommitLogSegmentManager.java
index 5a9e375..5301e1b 100644
--- a/src/java/org/apache/cassandra/db/commitlog/CommitLogSegmentManager.java
+++ b/src/java/org/apache/cassandra/db/commitlog/CommitLogSegmentManager.java
@@ -413,7 +413,7 @@ public class CommitLogSegmentManager
      * Throws a flag that enables the behavior of keeping at least one spare 
segment
      * available at all times.
      */
-    public void enableReserveSegmentCreation()
+    void enableReserveSegmentCreation()
     {
         createReserveSegments = true;
         wakeManager();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/774bd0bc/test/unit/org/apache/cassandra/SchemaLoader.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/SchemaLoader.java 
b/test/unit/org/apache/cassandra/SchemaLoader.java
index eb260c4..8f9df8f 100644
--- a/test/unit/org/apache/cassandra/SchemaLoader.java
+++ b/test/unit/org/apache/cassandra/SchemaLoader.java
@@ -18,6 +18,7 @@
 package org.apache.cassandra;
 
 import java.io.File;
+import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.*;
 
@@ -71,9 +72,15 @@ public class SchemaLoader
     public static void prepareServer()
     {
         // Cleanup first
-        cleanupAndLeaveDirs();
-
-        CommitLog.instance.allocator.enableReserveSegmentCreation();
+        try
+        {
+            cleanupAndLeaveDirs();
+        }
+        catch (IOException e)
+        {
+            logger.error("Failed to cleanup and recreate directories and 
files.");
+            throw new RuntimeException(e);
+        }
 
         Thread.setDefaultUncaughtExceptionHandler(new 
Thread.UncaughtExceptionHandler()
         {
@@ -444,7 +451,7 @@ public class SchemaLoader
             return new CompressionParameters(null);
     }
 
-    public static void cleanupAndLeaveDirs()
+    public static void cleanupAndLeaveDirs() throws IOException
     {
         // We need to stop and unmap all CLS instances prior to cleanup() or 
we'll get failures on Windows.
         CommitLog.instance.stopUnsafe(true);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/774bd0bc/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java 
b/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java
index 57c4194..5f231c3 100644
--- a/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java
+++ b/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java
@@ -18,6 +18,7 @@
 */
 package org.apache.cassandra.config;
 
+import java.io.IOException;
 import java.net.Inet4Address;
 import java.net.Inet6Address;
 import java.net.InetAddress;
@@ -76,7 +77,7 @@ public class DatabaseDescriptorTest
 
     // this came as a result of CASSANDRA-995
     @Test
-    public void testTransKsMigration() throws ConfigurationException
+    public void testTransKsMigration() throws ConfigurationException, 
IOException
     {
         SchemaLoader.cleanupAndLeaveDirs();
         Schema.instance.loadFromDisk();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/774bd0bc/test/unit/org/apache/cassandra/dht/OrderPreservingPartitionerTest.java
----------------------------------------------------------------------
diff --git 
a/test/unit/org/apache/cassandra/dht/OrderPreservingPartitionerTest.java 
b/test/unit/org/apache/cassandra/dht/OrderPreservingPartitionerTest.java
index 397d7cc..0449258 100644
--- a/test/unit/org/apache/cassandra/dht/OrderPreservingPartitionerTest.java
+++ b/test/unit/org/apache/cassandra/dht/OrderPreservingPartitionerTest.java
@@ -18,6 +18,8 @@
 */
 package org.apache.cassandra.dht;
 
+import java.io.IOException;
+
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -26,7 +28,7 @@ import org.apache.cassandra.SchemaLoader;
 public class OrderPreservingPartitionerTest extends PartitionerTestCase
 {
     @BeforeClass
-    public static void cleanStatesFromPreviousTest()
+    public static void cleanStatesFromPreviousTest() throws IOException
     {
         // Since OrderPreservingPartitioner#describeOwnership tries to read 
SSTables,
         // we need to clear data dir to clear garbage from previous test 
before running tests.

Reply via email to