Repository: cassandra
Updated Branches:
  refs/heads/trunk e6bc6385a -> 3510bdb50


Fix various unit-test failures

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/3510bdb5
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/3510bdb5
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/3510bdb5

Branch: refs/heads/trunk
Commit: 3510bdb503c2a9d97cb12fd7d9e1a01fd91fa879
Parents: e6bc638
Author: Joshua McKenzie <jmcken...@apache.org>
Authored: Wed Apr 22 16:42:59 2015 -0500
Committer: Joshua McKenzie <jmcken...@apache.org>
Committed: Wed Apr 22 16:42:59 2015 -0500

----------------------------------------------------------------------
 .../apache/cassandra/config/DatabaseDescriptor.java |  2 +-
 .../apache/cassandra/db/commitlog/CommitLog.java    |  9 ++++++++-
 .../db/commitlog/CommitLogSegmentManager.java       |  4 ++--
 .../cassandra/io/sstable/SSTableRewriter.java       | 12 ++++++++++--
 .../apache/cassandra/db/ColumnFamilyStoreTest.java  |  4 +++-
 .../unit/org/apache/cassandra/db/CommitLogTest.java |  4 ++--
 test/unit/org/apache/cassandra/db/KeyCacheTest.java | 10 +++++++---
 .../apache/cassandra/db/RecoveryManager2Test.java   |  3 +--
 test/unit/org/apache/cassandra/db/ScrubTest.java    | 16 ++++++++++++++++
 9 files changed, 50 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/3510bdb5/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java 
b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
index 76ef4c5..68d7e82 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -1479,7 +1479,7 @@ public class DatabaseDescriptor
 
     public static int getSSTablePreempiveOpenIntervalInMB()
     {
-        return conf.sstable_preemptive_open_interval_in_mb;
+        return FBUtilities.isWindows() ? -1 : 
conf.sstable_preemptive_open_interval_in_mb;
     }
 
     public static boolean getTrickleFsync()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/3510bdb5/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 cf38d44..b1670ac 100644
--- a/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
+++ b/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
@@ -119,6 +119,11 @@ public class CommitLog implements CommitLogMBean
      */
     public int recover() throws IOException
     {
+        // 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
+        // on allocator.manages(...) below by grabbing a file off the 
filesystem before it's added to the CLQ.
+        allocator.allocatingFrom();
+
         FilenameFilter unmanagedFilesFilter = new FilenameFilter()
         {
             public boolean accept(File dir, String name)
@@ -372,11 +377,13 @@ public class CommitLog implements CommitLogMBean
 
     /**
      * FOR TESTING PURPOSES. See CommitLogAllocator.
+     * @return the number of files recovered
      */
-    public void resetUnsafe(boolean deleteSegments)
+    public int resetUnsafe(boolean deleteSegments) throws IOException
     {
         stopUnsafe(deleteSegments);
         startUnsafe();
+        return recover();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/cassandra/blob/3510bdb5/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 af415a2..ac36d34 100644
--- a/src/java/org/apache/cassandra/db/commitlog/CommitLogSegmentManager.java
+++ b/src/java/org/apache/cassandra/db/commitlog/CommitLogSegmentManager.java
@@ -466,6 +466,7 @@ public class CommitLogSegmentManager
     public void stopUnsafe(boolean deleteSegments)
     {
         logger.debug("CLSM closing and clearing existing commit log 
segments...");
+        createReserveSegments = false;
 
         while (!segmentManagementTasks.isEmpty())
             Thread.yield();
@@ -509,7 +510,7 @@ public class CommitLogSegmentManager
         }
         catch (AssertionError ignored)
         {
-            // segment file does not exit
+            // segment file does not exist
         }
     }
 
@@ -519,7 +520,6 @@ public class CommitLogSegmentManager
     public void startUnsafe()
     {
         start();
-        wakeManager();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/cassandra/blob/3510bdb5/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java 
b/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
index 618b1e4..8890659 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
@@ -57,16 +57,21 @@ public class SSTableRewriter
     static
     {
         long interval = 
DatabaseDescriptor.getSSTablePreempiveOpenIntervalInMB() * (1L << 20);
-        if (interval < 0 || FBUtilities.isWindows())
+        if (interval < 0)
             interval = Long.MAX_VALUE;
         preemptiveOpenInterval = interval;
     }
 
     @VisibleForTesting
-    static void overrideOpenInterval(long size)
+    public static void overrideOpenInterval(long size)
     {
         preemptiveOpenInterval = size;
     }
+    @VisibleForTesting
+    public static long getOpenInterval()
+    {
+        return preemptiveOpenInterval;
+    }
 
     private final DataTracker dataTracker;
     private final ColumnFamilyStore cfs;
@@ -280,6 +285,9 @@ public class SSTableRewriter
     {
         if (isOffline)
             return;
+        if (preemptiveOpenInterval == Long.MAX_VALUE)
+            return;
+
         List<SSTableReader> toReplace = new ArrayList<>();
         List<SSTableReader> replaceWith = new ArrayList<>();
         final List<DecoratedKey> invalidateKeys = new ArrayList<>();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/3510bdb5/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java 
b/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java
index 7d15c44..0c221ac 100644
--- a/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java
+++ b/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java
@@ -115,6 +115,7 @@ public class ColumnFamilyStoreTest
     public static final String CF_STANDARD2 = "Standard2";
     public static final String CF_STANDARD3 = "Standard3";
     public static final String CF_STANDARD4 = "Standard4";
+    public static final String CF_STANDARD5 = "Standard5";
     public static final String CF_STANDARDINT = "StandardInteger1";
     public static final String CF_SUPER1 = "Super1";
     public static final String CF_SUPER6 = "Super6";
@@ -142,6 +143,7 @@ public class ColumnFamilyStoreTest
                                     SchemaLoader.standardCFMD(KEYSPACE1, 
CF_STANDARD2),
                                     SchemaLoader.standardCFMD(KEYSPACE1, 
CF_STANDARD3),
                                     SchemaLoader.standardCFMD(KEYSPACE1, 
CF_STANDARD4),
+                                    SchemaLoader.standardCFMD(KEYSPACE1, 
CF_STANDARD5),
                                     SchemaLoader.indexCFMD(KEYSPACE1, 
CF_INDEX1, true),
                                     SchemaLoader.indexCFMD(KEYSPACE1, 
CF_INDEX2, false),
                                     SchemaLoader.superCFMD(KEYSPACE1, 
CF_SUPER1, LongType.instance),
@@ -1874,7 +1876,7 @@ public class ColumnFamilyStoreTest
     public void testLoadNewSSTablesAvoidsOverwrites() throws Throwable
     {
         String ks = KEYSPACE1;
-        String cf = CF_STANDARD1;
+        String cf = CF_STANDARD5;
         ColumnFamilyStore cfs = Keyspace.open(ks).getColumnFamilyStore(cf);
         cfs.truncateBlocking();
         SSTableDeletingTask.waitForDeletions();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/3510bdb5/test/unit/org/apache/cassandra/db/CommitLogTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/CommitLogTest.java 
b/test/unit/org/apache/cassandra/db/CommitLogTest.java
index 683d3f9..4db6057 100644
--- a/test/unit/org/apache/cassandra/db/CommitLogTest.java
+++ b/test/unit/org/apache/cassandra/db/CommitLogTest.java
@@ -311,7 +311,7 @@ public class CommitLogTest
     }
 
     @Test
-    public void testTruncateWithoutSnapshot()
+    public void testTruncateWithoutSnapshot() throws IOException
     {
         CommitLog.instance.resetUnsafe(true);
         boolean prev = DatabaseDescriptor.isAutoSnapshot();
@@ -340,7 +340,7 @@ public class CommitLogTest
     }
 
     @Test
-    public void testTruncateWithoutSnapshotNonDurable()
+    public void testTruncateWithoutSnapshotNonDurable() throws IOException
     {
         CommitLog.instance.resetUnsafe(true);
         boolean prevAutoSnapshot = DatabaseDescriptor.isAutoSnapshot();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/3510bdb5/test/unit/org/apache/cassandra/db/KeyCacheTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/KeyCacheTest.java 
b/test/unit/org/apache/cassandra/db/KeyCacheTest.java
index 9695b4a..e5fd470 100644
--- a/test/unit/org/apache/cassandra/db/KeyCacheTest.java
+++ b/test/unit/org/apache/cassandra/db/KeyCacheTest.java
@@ -25,7 +25,6 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 
 import com.google.common.util.concurrent.Uninterruptibles;
-import org.apache.cassandra.io.sstable.format.SSTableReader;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -33,15 +32,18 @@ import org.junit.Test;
 import org.apache.cassandra.SchemaLoader;
 import org.apache.cassandra.Util;
 import org.apache.cassandra.cache.KeyCacheKey;
+import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.config.KSMetaData;
 import org.apache.cassandra.concurrent.ScheduledExecutors;
 import org.apache.cassandra.db.composites.*;
 import org.apache.cassandra.db.compaction.CompactionManager;
 import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.exceptions.ConfigurationException;
+import org.apache.cassandra.io.sstable.format.SSTableReader;
 import org.apache.cassandra.locator.SimpleStrategy;
 import org.apache.cassandra.service.CacheService;
 import org.apache.cassandra.utils.ByteBufferUtil;
+import org.apache.cassandra.utils.FBUtilities;
 
 import org.apache.cassandra.utils.concurrent.Refs;
 import static org.junit.Assert.assertEquals;
@@ -175,10 +177,12 @@ public class KeyCacheTest
             throw new IllegalStateException();
 
         Util.compactAll(cfs, Integer.MAX_VALUE).get();
+        boolean noEarlyOpen = 
DatabaseDescriptor.getSSTablePreempiveOpenIntervalInMB() < 0;
+
         // after compaction cache should have entries for new SSTables,
         // but since we have kept a reference to the old sstables,
         // if we had 2 keys in cache previously it should become 4
-        assertKeyCacheSize(4, KEYSPACE1, COLUMN_FAMILY1);
+        assertKeyCacheSize(noEarlyOpen ? 2 : 4, KEYSPACE1, COLUMN_FAMILY1);
 
         refs.release();
 
@@ -205,7 +209,7 @@ public class KeyCacheTest
                                                        10,
                                                        
System.currentTimeMillis()));
 
-        assertKeyCacheSize(2, KEYSPACE1, COLUMN_FAMILY1);
+        assertKeyCacheSize(noEarlyOpen ? 4 : 2, KEYSPACE1, COLUMN_FAMILY1);
     }
 
     private void assertKeyCacheSize(int expected, String keyspace, String 
columnFamily)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/3510bdb5/test/unit/org/apache/cassandra/db/RecoveryManager2Test.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/RecoveryManager2Test.java 
b/test/unit/org/apache/cassandra/db/RecoveryManager2Test.java
index 772c827..13c3452 100644
--- a/test/unit/org/apache/cassandra/db/RecoveryManager2Test.java
+++ b/test/unit/org/apache/cassandra/db/RecoveryManager2Test.java
@@ -82,8 +82,7 @@ public class RecoveryManager2Test
         logger.debug("begin manual replay");
         // replay the commit log (nothing on Standard1 should be replayed 
since everything was flushed, so only the row on Standard2
         // will be replayed)
-        CommitLog.instance.resetUnsafe(false);
-        int replayed = CommitLog.instance.recover();
+        int replayed = CommitLog.instance.resetUnsafe(false);
         assert replayed == 1 : "Expecting only 1 replayed mutation, got " + 
replayed;
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/3510bdb5/test/unit/org/apache/cassandra/db/ScrubTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/ScrubTest.java 
b/test/unit/org/apache/cassandra/db/ScrubTest.java
index f91ba64..dce8d14 100644
--- a/test/unit/org/apache/cassandra/db/ScrubTest.java
+++ b/test/unit/org/apache/cassandra/db/ScrubTest.java
@@ -54,6 +54,7 @@ import 
org.apache.cassandra.exceptions.RequestExecutionException;
 import org.apache.cassandra.exceptions.WriteTimeoutException;
 import org.apache.cassandra.io.sstable.Component;
 import org.apache.cassandra.io.sstable.Descriptor;
+import org.apache.cassandra.io.sstable.SSTableRewriter;
 import org.apache.cassandra.io.sstable.format.SSTableFormat;
 import org.apache.cassandra.io.sstable.format.SSTableReader;
 import org.apache.cassandra.locator.SimpleStrategy;
@@ -169,6 +170,21 @@ public class ScrubTest
     }
 
     @Test
+    public void testScrubCorruptedCounterRowNoEarlyOpen() throws IOException, 
WriteTimeoutException
+    {
+        long oldOpenVal = SSTableRewriter.getOpenInterval();
+        try
+        {
+            SSTableRewriter.overrideOpenInterval(Long.MAX_VALUE);
+            testScrubCorruptedCounterRow();
+        }
+        finally
+        {
+            SSTableRewriter.overrideOpenInterval(oldOpenVal);
+        }
+    }
+
+    @Test
     public void testScrubDeletedRow() throws ExecutionException, 
InterruptedException
     {
         CompactionManager.instance.disableAutoCompaction();

Reply via email to