You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by dj...@apache.org on 2019/12/12 18:15:32 UTC
[cassandra] branch trunk updated: Avoid deadlock during CommitLog
initialization
This is an automated email from the ASF dual-hosted git repository.
djoshi pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/trunk by this push:
new 3a8300e Avoid deadlock during CommitLog initialization
3a8300e is described below
commit 3a8300e0b86c4acfb7b7702197d36cc39ebe94bc
Author: Zephyr Guo <gz...@gmail.com>
AuthorDate: Fri Oct 18 17:15:20 2019 -0700
Avoid deadlock during CommitLog initialization
patch by Zephyr Guo, Dinesh Joshi; reviewed by Jordan West and Dinesh Joshi for CASSANDRA-15295
Co-Authored-By: Zephyr Guo <gz...@gmail.com>
Co-Authored-By: Dinesh Joshi <di...@apple.com>
---
.../cassandra/config/DatabaseDescriptor.java | 18 ++++
.../commitlog/AbstractCommitLogSegmentManager.java | 10 +-
.../db/commitlog/AbstractCommitLogService.java | 7 +-
.../apache/cassandra/db/commitlog/CommitLog.java | 56 ++++++++---
.../apache/cassandra/service/CassandraDaemon.java | 2 +
.../cassandra/utils/JVMStabilityInspector.java | 20 +++-
.../cassandra/distributed/impl/Instance.java | 1 +
.../CassandraIsolatedJunit4ClassRunner.java | 107 ++++++++++++++++++++
.../config/DatabaseDescriptorRefTest.java | 7 ++
test/unit/org/apache/cassandra/cql3/CQLTester.java | 2 +
test/unit/org/apache/cassandra/db/ColumnsTest.java | 2 +
.../apache/cassandra/db/SystemKeyspaceTest.java | 2 +
.../commitlog/CommitLogInitWithExceptionTest.java | 110 +++++++++++++++++++++
.../cassandra/db/context/CounterContextTest.java | 2 +
.../apache/cassandra/db/lifecycle/HelpersTest.java | 2 +
.../apache/cassandra/db/lifecycle/TrackerTest.java | 1 +
.../apache/cassandra/db/lifecycle/ViewTest.java | 2 +
.../apache/cassandra/dht/PartitionerTestCase.java | 2 +
.../apache/cassandra/dht/StreamStateStoreTest.java | 2 +
.../apache/cassandra/gms/FailureDetectorTest.java | 2 +
.../org/apache/cassandra/gms/GossiperTest.java | 2 +
.../org/apache/cassandra/gms/ShadowRoundTest.java | 2 +
.../sstable/format/SSTableFlushObserverTest.java | 2 +
.../cassandra/locator/AlibabaCloudSnitchTest.java | 2 +
.../cassandra/locator/CloudstackSnitchTest.java | 2 +
.../apache/cassandra/locator/EC2SnitchTest.java | 2 +
.../cassandra/locator/GoogleCloudSnitchTest.java | 2 +
.../metrics/HintedHandOffMetricsTest.java | 2 +
.../org/apache/cassandra/net/ConnectionTest.java | 2 +
.../org/apache/cassandra/net/HandshakeTest.java | 2 +
.../apache/cassandra/net/MessagingServiceTest.java | 2 +
.../net/OutboundConnectionSettingsTest.java | 2 +
.../cassandra/net/OutboundConnectionsTest.java | 2 +
.../org/apache/cassandra/service/RemoveTest.java | 2 +
.../service/StorageServiceServerTest.java | 2 +
.../cassandra/transport/IdleDisconnectTest.java | 4 +-
.../concurrent/AbstractTransactionalTest.java | 2 +
.../apache/cassandra/stress/CompactionStress.java | 2 +
38 files changed, 372 insertions(+), 23 deletions(-)
diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
index 02f5a70..3c184bd 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -51,6 +51,10 @@ import org.apache.cassandra.auth.IRoleManager;
import org.apache.cassandra.config.Config.CommitLogSync;
import org.apache.cassandra.config.EncryptionOptions.ServerEncryptionOptions.InternodeEncryption;
import org.apache.cassandra.db.ConsistencyLevel;
+import org.apache.cassandra.db.commitlog.AbstractCommitLogSegmentManager;
+import org.apache.cassandra.db.commitlog.CommitLog;
+import org.apache.cassandra.db.commitlog.CommitLogSegmentManagerCDC;
+import org.apache.cassandra.db.commitlog.CommitLogSegmentManagerStandard;
import org.apache.cassandra.dht.IPartitioner;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.io.FSWriteError;
@@ -147,6 +151,10 @@ public class DatabaseDescriptor
// turns some warnings into exceptions for testing
private static final boolean strictRuntimeChecks = Boolean.getBoolean("cassandra.strict.runtime.checks");
+ private static Function<CommitLog, AbstractCommitLogSegmentManager> commitLogSegmentMgrProvider = c -> DatabaseDescriptor.isCDCEnabled()
+ ? new CommitLogSegmentManagerCDC(c, DatabaseDescriptor.getCommitLogLocation())
+ : new CommitLogSegmentManagerStandard(c, DatabaseDescriptor.getCommitLogLocation());
+
public static void daemonInitialization() throws ConfigurationException
{
daemonInitialization(DatabaseDescriptor::loadConfig);
@@ -2968,4 +2976,14 @@ public class DatabaseDescriptor
logger.info("Setting use_offheap_merkle_trees to {}", value);
conf.use_offheap_merkle_trees = value;
}
+
+ public static Function<CommitLog, AbstractCommitLogSegmentManager> getCommitLogSegmentMgrProvider()
+ {
+ return commitLogSegmentMgrProvider;
+ }
+
+ public static void setCommitLogSegmentMgrProvider(Function<CommitLog, AbstractCommitLogSegmentManager> provider)
+ {
+ commitLogSegmentMgrProvider = provider;
+ }
}
diff --git a/src/java/org/apache/cassandra/db/commitlog/AbstractCommitLogSegmentManager.java b/src/java/org/apache/cassandra/db/commitlog/AbstractCommitLogSegmentManager.java
index fdbf7f6..dccca88 100755
--- a/src/java/org/apache/cassandra/db/commitlog/AbstractCommitLogSegmentManager.java
+++ b/src/java/org/apache/cassandra/db/commitlog/AbstractCommitLogSegmentManager.java
@@ -82,7 +82,8 @@ public abstract class AbstractCommitLogSegmentManager
*/
private final AtomicLong size = new AtomicLong();
- private Thread managerThread;
+ @VisibleForTesting
+ Thread managerThread;
protected final CommitLog commitLog;
private volatile boolean shutdown;
private final BooleanSupplier managerThreadWaitCondition = () -> (availableSegment == null && !atSegmentBufferLimit()) || shutdown;
@@ -485,8 +486,11 @@ public abstract class AbstractCommitLogSegmentManager
*/
public void awaitTermination() throws InterruptedException
{
- managerThread.join();
- managerThread = null;
+ if (managerThread != null)
+ {
+ managerThread.join();
+ managerThread = null;
+ }
for (CommitLogSegment segment : activeSegments)
segment.close();
diff --git a/src/java/org/apache/cassandra/db/commitlog/AbstractCommitLogService.java b/src/java/org/apache/cassandra/db/commitlog/AbstractCommitLogService.java
index 45df4eb..a65ef00 100644
--- a/src/java/org/apache/cassandra/db/commitlog/AbstractCommitLogService.java
+++ b/src/java/org/apache/cassandra/db/commitlog/AbstractCommitLogService.java
@@ -26,7 +26,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.codahale.metrics.Timer.Context;
-
import org.apache.cassandra.concurrent.NamedThreadFactory;
import org.apache.cassandra.config.Config;
import org.apache.cassandra.db.commitlog.CommitLogSegment.Allocation;
@@ -133,8 +132,7 @@ public abstract class AbstractCommitLogService
throw new IllegalArgumentException(String.format("Commit log flush interval must be positive: %fms",
syncIntervalNanos * 1e-6));
shutdown = false;
- Runnable runnable = new SyncRunnable(MonotonicClock.preciseTime);
- thread = NamedThreadFactory.createThread(runnable, name);
+ thread = NamedThreadFactory.createThread(new SyncRunnable(MonotonicClock.preciseTime), name);
thread.start();
}
@@ -314,7 +312,8 @@ public abstract class AbstractCommitLogService
public void awaitTermination() throws InterruptedException
{
- thread.join();
+ if (thread != null)
+ thread.join();
}
public long getCompletedTasks()
diff --git a/src/java/org/apache/cassandra/db/commitlog/CommitLog.java b/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
index 71fc1aa..c9e79cd 100644
--- a/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
+++ b/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
@@ -20,6 +20,7 @@ package org.apache.cassandra.db.commitlog;
import java.io.*;
import java.nio.ByteBuffer;
import java.util.*;
+import java.util.function.Function;
import java.util.zip.CRC32;
import com.google.common.annotations.VisibleForTesting;
@@ -74,18 +75,25 @@ public class CommitLog implements CommitLogMBean
final AbstractCommitLogService executor;
volatile Configuration configuration;
+ private boolean started = false;
private static CommitLog construct()
{
- CommitLog log = new CommitLog(CommitLogArchiver.construct());
+ CommitLog log = new CommitLog(CommitLogArchiver.construct(), DatabaseDescriptor.getCommitLogSegmentMgrProvider());
MBeanWrapper.instance.registerMBean(log, "org.apache.cassandra.db:type=Commitlog");
- return log.start();
+ return log;
}
@VisibleForTesting
CommitLog(CommitLogArchiver archiver)
{
+ this(archiver, DatabaseDescriptor.getCommitLogSegmentMgrProvider());
+ }
+
+ @VisibleForTesting
+ CommitLog(CommitLogArchiver archiver, Function<CommitLog, AbstractCommitLogSegmentManager> segmentManagerProvider)
+ {
this.configuration = new Configuration(DatabaseDescriptor.getCommitLogCompression(),
DatabaseDescriptor.getEncryptionContext());
DatabaseDescriptor.createAllDirectories();
@@ -108,18 +116,30 @@ public class CommitLog implements CommitLogMBean
throw new IllegalArgumentException("Unknown commitlog service type: " + DatabaseDescriptor.getCommitLogSync());
}
- segmentManager = DatabaseDescriptor.isCDCEnabled()
- ? new CommitLogSegmentManagerCDC(this, DatabaseDescriptor.getCommitLogLocation())
- : new CommitLogSegmentManagerStandard(this, DatabaseDescriptor.getCommitLogLocation());
+ segmentManager = segmentManagerProvider.apply(this);
// register metrics
metrics.attach(executor, segmentManager);
}
- CommitLog start()
+ /**
+ * Tries to start the CommitLog if not already started.
+ */
+ synchronized public CommitLog start()
{
- segmentManager.start();
- executor.start();
+ if (started)
+ return this;
+
+ try
+ {
+ segmentManager.start();
+ executor.start();
+ started = true;
+ } catch (Throwable t)
+ {
+ started = false;
+ throw t;
+ }
return this;
}
@@ -404,8 +424,12 @@ public class CommitLog implements CommitLogMBean
* Shuts down the threads used by the commit log, blocking until completion.
* TODO this should accept a timeout, and throw TimeoutException
*/
- public void shutdownBlocking() throws InterruptedException
+ synchronized public void shutdownBlocking() throws InterruptedException
{
+ if (!started)
+ return;
+
+ started = false;
executor.shutdown();
executor.awaitTermination();
segmentManager.shutdown();
@@ -416,7 +440,8 @@ public class CommitLog implements CommitLogMBean
* FOR TESTING PURPOSES
* @return the number of files recovered
*/
- public int resetUnsafe(boolean deleteSegments) throws IOException
+ @VisibleForTesting
+ synchronized public int resetUnsafe(boolean deleteSegments) throws IOException
{
stopUnsafe(deleteSegments);
resetConfiguration();
@@ -426,7 +451,8 @@ public class CommitLog implements CommitLogMBean
/**
* FOR TESTING PURPOSES.
*/
- public void resetConfiguration()
+ @VisibleForTesting
+ synchronized public void resetConfiguration()
{
configuration = new Configuration(DatabaseDescriptor.getCommitLogCompression(),
DatabaseDescriptor.getEncryptionContext());
@@ -435,8 +461,10 @@ public class CommitLog implements CommitLogMBean
/**
* FOR TESTING PURPOSES
*/
- public void stopUnsafe(boolean deleteSegments)
+ @VisibleForTesting
+ synchronized public void stopUnsafe(boolean deleteSegments)
{
+ started = false;
executor.shutdown();
try
{
@@ -456,8 +484,10 @@ public class CommitLog implements CommitLogMBean
/**
* FOR TESTING PURPOSES
*/
- public int restartUnsafe() throws IOException
+ @VisibleForTesting
+ synchronized public int restartUnsafe() throws IOException
{
+ started = false;
return start().recoverSegmentsOnDisk();
}
diff --git a/src/java/org/apache/cassandra/service/CassandraDaemon.java b/src/java/org/apache/cassandra/service/CassandraDaemon.java
index 24c1d6f..b3cfd19 100644
--- a/src/java/org/apache/cassandra/service/CassandraDaemon.java
+++ b/src/java/org/apache/cassandra/service/CassandraDaemon.java
@@ -202,6 +202,8 @@ public class CassandraDaemon
NativeLibrary.tryMlockall();
+ CommitLog.instance.start();
+
try
{
startupChecks.verify();
diff --git a/src/java/org/apache/cassandra/utils/JVMStabilityInspector.java b/src/java/org/apache/cassandra/utils/JVMStabilityInspector.java
index cdcbf4b..64403e7 100644
--- a/src/java/org/apache/cassandra/utils/JVMStabilityInspector.java
+++ b/src/java/org/apache/cassandra/utils/JVMStabilityInspector.java
@@ -45,6 +45,9 @@ public final class JVMStabilityInspector
private static Object lock = new Object();
private static boolean printingHeapHistogram;
+ // It is used for unit test
+ public static OnKillHook killerHook;
+
private JVMStabilityInspector() {}
/**
@@ -169,11 +172,26 @@ public final class JVMStabilityInspector
t.printStackTrace(System.err);
logger.error("JVM state determined to be unstable. Exiting forcefully due to:", t);
}
- if (killing.compareAndSet(false, true))
+
+ boolean doExit = killerHook != null ? killerHook.execute(t) : true;
+
+ if (doExit && killing.compareAndSet(false, true))
{
StorageService.instance.removeShutdownHook();
System.exit(100);
}
}
}
+
+ /**
+ * This class is usually used to avoid JVM exit when running junit tests.
+ */
+ public interface OnKillHook
+ {
+ /**
+ *
+ * @return False will skip exit
+ */
+ boolean execute(Throwable t);
+ }
}
diff --git a/test/distributed/org/apache/cassandra/distributed/impl/Instance.java b/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
index a8bd3ae..0d919ac 100644
--- a/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
+++ b/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
@@ -323,6 +323,7 @@ public class Instance extends IsolatedExecutor implements IInvokableInstance
DatabaseDescriptor.daemonInitialization();
DatabaseDescriptor.createAllDirectories();
+ CommitLog.instance.start();
// We need to persist this as soon as possible after startup checks.
// This should be the first write to SystemKeyspace (CASSANDRA-11742)
diff --git a/test/unit/org/apache/cassandra/CassandraIsolatedJunit4ClassRunner.java b/test/unit/org/apache/cassandra/CassandraIsolatedJunit4ClassRunner.java
new file mode 100644
index 0000000..5af6b1a
--- /dev/null
+++ b/test/unit/org/apache/cassandra/CassandraIsolatedJunit4ClassRunner.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.cassandra;
+
+import java.io.IOException;
+import java.net.URLClassLoader;
+import java.util.function.Predicate;
+
+import org.junit.runners.BlockJUnit4ClassRunner;
+import org.junit.runners.model.InitializationError;
+
+import org.apache.cassandra.distributed.impl.Versions;
+
+/**
+ *
+ * This class is usually used to test singletons. It ensure singletons can be unique in each test case.
+ *
+ */
+public class CassandraIsolatedJunit4ClassRunner extends BlockJUnit4ClassRunner
+{
+
+ private static final Predicate<String> isolatedPackage = name ->
+ name.startsWith("org.apache.cassandra.") ||
+ // YAML could not be shared because
+ // org.apache.cassandra.config.Config is loaded by org.yaml.snakeyaml.YAML
+ name.startsWith("org.yaml.snakeyaml.");
+
+
+ /**
+ * Creates a CassandraIsolatedJunit4ClassRunner to run {@code klass}
+ *
+ * @param clazz
+ * @throws InitializationError if the test class is malformed.
+ */
+ public CassandraIsolatedJunit4ClassRunner(Class<?> clazz) throws InitializationError
+ {
+ super(createClassLoader(clazz));
+ }
+
+ private static Class<?> createClassLoader(Class<?> clazz) throws InitializationError {
+ try {
+ ClassLoader testClassLoader = new CassandraIsolatedClassLoader();
+ return Class.forName(clazz.getName(), true, testClassLoader);
+ } catch (ClassNotFoundException e) {
+ throw new InitializationError(e);
+ }
+ }
+
+ public static class CassandraIsolatedClassLoader extends URLClassLoader
+ {
+ public CassandraIsolatedClassLoader()
+ {
+ super(Versions.CURRENT.classpath);
+ }
+
+ @Override
+ public Class<?> loadClass(String name) throws ClassNotFoundException
+ {
+
+ if (isolatedPackage.test(name))
+ {
+ synchronized (getClassLoadingLock(name))
+ {
+ // First, check if the class has already been loaded
+ Class<?> c = findLoadedClass(name);
+
+ if (c == null)
+ c = findClass(name);
+
+ return c;
+ }
+ }
+ else
+ {
+ return super.loadClass(name);
+ }
+ }
+
+ protected void finalize()
+ {
+ try
+ {
+ close();
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/unit/org/apache/cassandra/config/DatabaseDescriptorRefTest.java b/test/unit/org/apache/cassandra/config/DatabaseDescriptorRefTest.java
index c354e76..ca688f5 100644
--- a/test/unit/org/apache/cassandra/config/DatabaseDescriptorRefTest.java
+++ b/test/unit/org/apache/cassandra/config/DatabaseDescriptorRefTest.java
@@ -86,6 +86,13 @@ public class DatabaseDescriptorRefTest
"org.apache.cassandra.config.YamlConfigurationLoader$CustomConstructor",
"org.apache.cassandra.config.TransparentDataEncryptionOptions",
"org.apache.cassandra.db.ConsistencyLevel",
+ "org.apache.cassandra.db.commitlog.CommitLogSegmentManagerFactory",
+ "org.apache.cassandra.db.commitlog.DefaultCommitLogSegmentMgrFactory",
+ "org.apache.cassandra.db.commitlog.AbstractCommitLogSegmentManager",
+ "org.apache.cassandra.db.commitlog.CommitLogSegmentManagerCDC",
+ "org.apache.cassandra.db.commitlog.CommitLogSegmentManagerStandard",
+ "org.apache.cassandra.db.commitlog.CommitLog",
+ "org.apache.cassandra.db.commitlog.CommitLogMBean",
"org.apache.cassandra.dht.IPartitioner",
"org.apache.cassandra.distributed.api.IInstance",
"org.apache.cassandra.distributed.api.IIsolatedExecutor",
diff --git a/test/unit/org/apache/cassandra/cql3/CQLTester.java b/test/unit/org/apache/cassandra/cql3/CQLTester.java
index 8f3a52a..319cf68 100644
--- a/test/unit/org/apache/cassandra/cql3/CQLTester.java
+++ b/test/unit/org/apache/cassandra/cql3/CQLTester.java
@@ -202,6 +202,7 @@ public abstract class CQLTester
DatabaseDescriptor.daemonInitialization();
DatabaseDescriptor.setTransientReplicationEnabledUnsafe(true);
+ CommitLog.instance.start();
// Cleanup first
try
@@ -241,6 +242,7 @@ public abstract class CQLTester
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.start();
CommitLog.instance.stopUnsafe(true);
mkdirs();
cleanup();
diff --git a/test/unit/org/apache/cassandra/db/ColumnsTest.java b/test/unit/org/apache/cassandra/db/ColumnsTest.java
index a5d267e..6dc1832 100644
--- a/test/unit/org/apache/cassandra/db/ColumnsTest.java
+++ b/test/unit/org/apache/cassandra/db/ColumnsTest.java
@@ -28,6 +28,7 @@ import com.google.common.collect.Iterators;
import com.google.common.collect.Lists;
import org.apache.cassandra.cql3.ColumnIdentifier;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.db.marshal.BytesType;
import org.junit.AfterClass;
import org.junit.Test;
@@ -51,6 +52,7 @@ public class ColumnsTest
static
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
}
private static final TableMetadata TABLE_METADATA = MockSchema.newCFS().metadata();
diff --git a/test/unit/org/apache/cassandra/db/SystemKeyspaceTest.java b/test/unit/org/apache/cassandra/db/SystemKeyspaceTest.java
index aca13b3..0a6d551 100644
--- a/test/unit/org/apache/cassandra/db/SystemKeyspaceTest.java
+++ b/test/unit/org/apache/cassandra/db/SystemKeyspaceTest.java
@@ -25,6 +25,7 @@ import org.junit.BeforeClass;
import org.junit.Test;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.locator.InetAddressAndPort;
import org.apache.cassandra.schema.SchemaConstants;
import org.apache.cassandra.cql3.QueryProcessor;
@@ -45,6 +46,7 @@ public class SystemKeyspaceTest
public static void prepSnapshotTracker()
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
if (FBUtilities.isWindows)
WindowsFailedSnapshotTracker.deleteOldSnapshots();
diff --git a/test/unit/org/apache/cassandra/db/commitlog/CommitLogInitWithExceptionTest.java b/test/unit/org/apache/cassandra/db/commitlog/CommitLogInitWithExceptionTest.java
new file mode 100644
index 0000000..690d9ba
--- /dev/null
+++ b/test/unit/org/apache/cassandra/db/commitlog/CommitLogInitWithExceptionTest.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.cassandra.db.commitlog;
+
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.apache.cassandra.CassandraIsolatedJunit4ClassRunner;
+import org.apache.cassandra.config.Config;
+import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.utils.JVMStabilityInspector;
+
+@RunWith(CassandraIsolatedJunit4ClassRunner.class)
+public class CommitLogInitWithExceptionTest
+{
+ private static Thread initThread;
+
+ @BeforeClass
+ public static void setUp()
+ {
+ DatabaseDescriptor.daemonInitialization();
+
+ if (DatabaseDescriptor.getDiskFailurePolicy() == Config.DiskFailurePolicy.die ||
+ DatabaseDescriptor.getDiskFailurePolicy() == Config.DiskFailurePolicy.ignore)
+ {
+ DatabaseDescriptor.setDiskFailurePolicy(Config.DiskFailurePolicy.stop);
+ }
+
+ DatabaseDescriptor.setCommitLogSegmentMgrProvider(c -> new MockCommitLogSegmentMgr(c, DatabaseDescriptor.getCommitLogLocation()));
+
+ JVMStabilityInspector.killerHook = (t) -> {
+ Assert.assertEquals("MOCK EXCEPTION: createSegment", t.getMessage());
+
+ try
+ {
+ // Avoid JVM exit. The JVM still needs to run other junit tests.
+ return false;
+ }
+ finally
+ {
+ Assert.assertNotNull(initThread);
+ // We have to manually stop init thread because the JVM does not exit actually.
+ initThread.stop();
+ }
+ };
+ }
+
+ @Test(timeout = 30000)
+ public void testCommitLogInitWithException() {
+ // This line will trigger initialization process because it's the first time to access CommitLog class.
+ initThread = new Thread(CommitLog.instance::start);
+
+ initThread.setName("initThread");
+ initThread.start();
+
+ try
+ {
+ initThread.join(); // Should not block here
+ }
+ catch (InterruptedException expected)
+ {
+ }
+
+ Assert.assertFalse(initThread.isAlive());
+
+ try
+ {
+ Thread.sleep(1000); // Wait for COMMIT-LOG-ALLOCATOR exit
+ }
+ catch (InterruptedException e)
+ {
+ Assert.fail();
+ }
+
+ Assert.assertEquals(Thread.State.TERMINATED, CommitLog.instance.segmentManager.managerThread.getState()); // exit successfully
+ }
+
+ private static class MockCommitLogSegmentMgr extends CommitLogSegmentManagerStandard {
+
+ public MockCommitLogSegmentMgr(CommitLog commitLog, String storageDirectory)
+ {
+ super(commitLog, storageDirectory);
+ }
+
+ @Override
+ public CommitLogSegment createSegment()
+ {
+ throw new RuntimeException("MOCK EXCEPTION: createSegment");
+ }
+ }
+
+}
diff --git a/test/unit/org/apache/cassandra/db/context/CounterContextTest.java b/test/unit/org/apache/cassandra/db/context/CounterContextTest.java
index 4600137..4437365 100644
--- a/test/unit/org/apache/cassandra/db/context/CounterContextTest.java
+++ b/test/unit/org/apache/cassandra/db/context/CounterContextTest.java
@@ -28,6 +28,7 @@ import org.junit.Test;
import org.apache.cassandra.Util;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.ClockAndCount;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.db.context.CounterContext.Relationship;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.CounterId;
@@ -55,6 +56,7 @@ public class CounterContextTest
public static void setupDD()
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
}
@Test
diff --git a/test/unit/org/apache/cassandra/db/lifecycle/HelpersTest.java b/test/unit/org/apache/cassandra/db/lifecycle/HelpersTest.java
index 2bba7bd..7acd3e6 100644
--- a/test/unit/org/apache/cassandra/db/lifecycle/HelpersTest.java
+++ b/test/unit/org/apache/cassandra/db/lifecycle/HelpersTest.java
@@ -33,6 +33,7 @@ import org.junit.Test;
import org.junit.Assert;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.ColumnFamilyStore;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.db.compaction.OperationType;
import org.apache.cassandra.io.sstable.format.SSTableReader;
import org.apache.cassandra.schema.MockSchema;
@@ -48,6 +49,7 @@ public class HelpersTest
public static void setUp()
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
MockSchema.cleanup();
}
diff --git a/test/unit/org/apache/cassandra/db/lifecycle/TrackerTest.java b/test/unit/org/apache/cassandra/db/lifecycle/TrackerTest.java
index 522e59a..910445f 100644
--- a/test/unit/org/apache/cassandra/db/lifecycle/TrackerTest.java
+++ b/test/unit/org/apache/cassandra/db/lifecycle/TrackerTest.java
@@ -77,6 +77,7 @@ public class TrackerTest
public static void setUp()
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
MockSchema.cleanup();
}
diff --git a/test/unit/org/apache/cassandra/db/lifecycle/ViewTest.java b/test/unit/org/apache/cassandra/db/lifecycle/ViewTest.java
index 5fa8540..fd32087 100644
--- a/test/unit/org/apache/cassandra/db/lifecycle/ViewTest.java
+++ b/test/unit/org/apache/cassandra/db/lifecycle/ViewTest.java
@@ -36,6 +36,7 @@ import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.ColumnFamilyStore;
import org.apache.cassandra.db.Memtable;
import org.apache.cassandra.db.PartitionPosition;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.dht.AbstractBounds;
import org.apache.cassandra.io.sstable.format.SSTableReader;
import org.apache.cassandra.schema.MockSchema;
@@ -52,6 +53,7 @@ public class ViewTest
public static void setUp()
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
MockSchema.cleanup();
}
diff --git a/test/unit/org/apache/cassandra/dht/PartitionerTestCase.java b/test/unit/org/apache/cassandra/dht/PartitionerTestCase.java
index 33e9d60..ec535b0 100644
--- a/test/unit/org/apache/cassandra/dht/PartitionerTestCase.java
+++ b/test/unit/org/apache/cassandra/dht/PartitionerTestCase.java
@@ -29,6 +29,7 @@ import org.junit.BeforeClass;
import org.junit.Test;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.service.StorageService;
import static org.junit.Assert.assertEquals;
@@ -47,6 +48,7 @@ public abstract class PartitionerTestCase
public static void initDD()
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
}
@Before
diff --git a/test/unit/org/apache/cassandra/dht/StreamStateStoreTest.java b/test/unit/org/apache/cassandra/dht/StreamStateStoreTest.java
index 34096a7..61adb58 100644
--- a/test/unit/org/apache/cassandra/dht/StreamStateStoreTest.java
+++ b/test/unit/org/apache/cassandra/dht/StreamStateStoreTest.java
@@ -19,6 +19,7 @@ package org.apache.cassandra.dht;
import java.util.Collections;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.locator.RangesAtEndpoint;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -42,6 +43,7 @@ public class StreamStateStoreTest
public static void initDD()
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
}
@Test
diff --git a/test/unit/org/apache/cassandra/gms/FailureDetectorTest.java b/test/unit/org/apache/cassandra/gms/FailureDetectorTest.java
index 554e894..77fabef 100644
--- a/test/unit/org/apache/cassandra/gms/FailureDetectorTest.java
+++ b/test/unit/org/apache/cassandra/gms/FailureDetectorTest.java
@@ -29,6 +29,7 @@ import org.junit.Test;
import org.apache.cassandra.Util;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.dht.IPartitioner;
import org.apache.cassandra.dht.RandomPartitioner;
import org.apache.cassandra.dht.Token;
@@ -47,6 +48,7 @@ public class FailureDetectorTest
System.setProperty("cassandra.max_local_pause_in_ms", "20000");
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
}
@Test
diff --git a/test/unit/org/apache/cassandra/gms/GossiperTest.java b/test/unit/org/apache/cassandra/gms/GossiperTest.java
index 97c577c..fd760cb 100644
--- a/test/unit/org/apache/cassandra/gms/GossiperTest.java
+++ b/test/unit/org/apache/cassandra/gms/GossiperTest.java
@@ -34,6 +34,7 @@ import org.junit.Test;
import org.apache.cassandra.Util;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.dht.IPartitioner;
import org.apache.cassandra.dht.RandomPartitioner;
import org.apache.cassandra.dht.Token;
@@ -52,6 +53,7 @@ public class GossiperTest
{
System.setProperty(Gossiper.Props.DISABLE_THREAD_VALIDATION, "true");
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
}
static final IPartitioner partitioner = new RandomPartitioner();
diff --git a/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java b/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java
index 57cd4a9..2bcbc50 100644
--- a/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java
+++ b/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java
@@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.Keyspace;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.locator.IEndpointSnitch;
import org.apache.cassandra.locator.PropertyFileSnitch;
@@ -53,6 +54,7 @@ public class ShadowRoundTest
System.setProperty("cassandra.config", "cassandra-seeds.yaml");
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
IEndpointSnitch snitch = new PropertyFileSnitch();
DatabaseDescriptor.setEndpointSnitch(snitch);
Keyspace.setInitialized();
diff --git a/test/unit/org/apache/cassandra/io/sstable/format/SSTableFlushObserverTest.java b/test/unit/org/apache/cassandra/io/sstable/format/SSTableFlushObserverTest.java
index aea3b4a..2b787ca 100644
--- a/test/unit/org/apache/cassandra/io/sstable/format/SSTableFlushObserverTest.java
+++ b/test/unit/org/apache/cassandra/io/sstable/format/SSTableFlushObserverTest.java
@@ -25,6 +25,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.schema.TableMetadata;
import org.apache.cassandra.schema.ColumnMetadata;
import org.apache.cassandra.config.DatabaseDescriptor;
@@ -63,6 +64,7 @@ public class SSTableFlushObserverTest
public static void initDD()
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
}
private static final String KS_NAME = "test";
diff --git a/test/unit/org/apache/cassandra/locator/AlibabaCloudSnitchTest.java b/test/unit/org/apache/cassandra/locator/AlibabaCloudSnitchTest.java
index 4e8ab16..043e332 100644
--- a/test/unit/org/apache/cassandra/locator/AlibabaCloudSnitchTest.java
+++ b/test/unit/org/apache/cassandra/locator/AlibabaCloudSnitchTest.java
@@ -25,6 +25,7 @@ import java.util.Map;
import org.apache.cassandra.SchemaLoader;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.Keyspace;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.gms.ApplicationState;
import org.apache.cassandra.gms.Gossiper;
@@ -43,6 +44,7 @@ public class AlibabaCloudSnitchTest
{
System.setProperty(Gossiper.Props.DISABLE_THREAD_VALIDATION, "true");
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
SchemaLoader.mkdirs();
SchemaLoader.cleanup();
Keyspace.setInitialized();
diff --git a/test/unit/org/apache/cassandra/locator/CloudstackSnitchTest.java b/test/unit/org/apache/cassandra/locator/CloudstackSnitchTest.java
index 6be3c47..7d623a2 100644
--- a/test/unit/org/apache/cassandra/locator/CloudstackSnitchTest.java
+++ b/test/unit/org/apache/cassandra/locator/CloudstackSnitchTest.java
@@ -29,6 +29,7 @@ import org.junit.Test;
import org.apache.cassandra.SchemaLoader;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.Keyspace;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.gms.ApplicationState;
import org.apache.cassandra.gms.Gossiper;
@@ -46,6 +47,7 @@ public class CloudstackSnitchTest
{
System.setProperty(Gossiper.Props.DISABLE_THREAD_VALIDATION, "true");
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
SchemaLoader.mkdirs();
SchemaLoader.cleanup();
Keyspace.setInitialized();
diff --git a/test/unit/org/apache/cassandra/locator/EC2SnitchTest.java b/test/unit/org/apache/cassandra/locator/EC2SnitchTest.java
index ef58e7d..2646d1c 100644
--- a/test/unit/org/apache/cassandra/locator/EC2SnitchTest.java
+++ b/test/unit/org/apache/cassandra/locator/EC2SnitchTest.java
@@ -34,6 +34,7 @@ import org.junit.Test;
import org.apache.cassandra.SchemaLoader;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.Keyspace;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.gms.ApplicationState;
import org.apache.cassandra.gms.Gossiper;
@@ -60,6 +61,7 @@ public class EC2SnitchTest
{
System.setProperty(Gossiper.Props.DISABLE_THREAD_VALIDATION, "true");
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
SchemaLoader.mkdirs();
SchemaLoader.cleanup();
Keyspace.setInitialized();
diff --git a/test/unit/org/apache/cassandra/locator/GoogleCloudSnitchTest.java b/test/unit/org/apache/cassandra/locator/GoogleCloudSnitchTest.java
index c3f8d27..ac1abe1 100644
--- a/test/unit/org/apache/cassandra/locator/GoogleCloudSnitchTest.java
+++ b/test/unit/org/apache/cassandra/locator/GoogleCloudSnitchTest.java
@@ -30,6 +30,7 @@ import org.junit.Test;
import org.apache.cassandra.SchemaLoader;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.Keyspace;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.gms.ApplicationState;
import org.apache.cassandra.gms.Gossiper;
@@ -47,6 +48,7 @@ public class GoogleCloudSnitchTest
{
System.setProperty(Gossiper.Props.DISABLE_THREAD_VALIDATION, "true");
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
SchemaLoader.mkdirs();
SchemaLoader.cleanup();
Keyspace.setInitialized();
diff --git a/test/unit/org/apache/cassandra/metrics/HintedHandOffMetricsTest.java b/test/unit/org/apache/cassandra/metrics/HintedHandOffMetricsTest.java
index 2b13715..15feca4 100644
--- a/test/unit/org/apache/cassandra/metrics/HintedHandOffMetricsTest.java
+++ b/test/unit/org/apache/cassandra/metrics/HintedHandOffMetricsTest.java
@@ -31,6 +31,7 @@ import com.google.common.collect.Iterators;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.cql3.UntypedResultSet;
import org.apache.cassandra.db.SystemKeyspace;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.db.marshal.Int32Type;
import org.apache.cassandra.db.marshal.UUIDType;
import org.apache.cassandra.hints.HintsService;
@@ -45,6 +46,7 @@ public class HintedHandOffMetricsTest
public static void initDD()
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
}
@Test
diff --git a/test/unit/org/apache/cassandra/net/ConnectionTest.java b/test/unit/org/apache/cassandra/net/ConnectionTest.java
index 17cae71..7b69cb9 100644
--- a/test/unit/org/apache/cassandra/net/ConnectionTest.java
+++ b/test/unit/org/apache/cassandra/net/ConnectionTest.java
@@ -55,6 +55,7 @@ import io.netty.channel.ChannelOutboundHandlerAdapter;
import io.netty.channel.ChannelPromise;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.config.EncryptionOptions;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.exceptions.RequestFailureReason;
import org.apache.cassandra.exceptions.UnknownColumnException;
import org.apache.cassandra.io.IVersionedAsymmetricSerializer;
@@ -119,6 +120,7 @@ public class ConnectionTest
public static void startup()
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
}
@AfterClass
diff --git a/test/unit/org/apache/cassandra/net/HandshakeTest.java b/test/unit/org/apache/cassandra/net/HandshakeTest.java
index c9d4e87..e680b83 100644
--- a/test/unit/org/apache/cassandra/net/HandshakeTest.java
+++ b/test/unit/org/apache/cassandra/net/HandshakeTest.java
@@ -31,6 +31,7 @@ import org.junit.Test;
import io.netty.channel.EventLoop;
import io.netty.util.concurrent.Future;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.locator.InetAddressAndPort;
import org.apache.cassandra.net.OutboundConnectionInitiator.Result;
import org.apache.cassandra.net.OutboundConnectionInitiator.Result.MessagingSuccess;
@@ -51,6 +52,7 @@ public class HandshakeTest
public static void startup()
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
}
@AfterClass
diff --git a/test/unit/org/apache/cassandra/net/MessagingServiceTest.java b/test/unit/org/apache/cassandra/net/MessagingServiceTest.java
index 76922f6..9a1f07f 100644
--- a/test/unit/org/apache/cassandra/net/MessagingServiceTest.java
+++ b/test/unit/org/apache/cassandra/net/MessagingServiceTest.java
@@ -43,6 +43,7 @@ import com.codahale.metrics.Timer;
import org.apache.cassandra.auth.IInternodeAuthenticator;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.config.EncryptionOptions.ServerEncryptionOptions;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.metrics.MessagingMetrics;
import org.apache.cassandra.utils.ApproximateTime;
import org.apache.cassandra.exceptions.ConfigurationException;
@@ -84,6 +85,7 @@ public class MessagingServiceTest
public static void beforeClass() throws UnknownHostException
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
DatabaseDescriptor.setBackPressureStrategy(new MockBackPressureStrategy(Collections.emptyMap()));
DatabaseDescriptor.setBroadcastAddress(InetAddress.getByName("127.0.0.1"));
originalAuthenticator = DatabaseDescriptor.getInternodeAuthenticator();
diff --git a/test/unit/org/apache/cassandra/net/OutboundConnectionSettingsTest.java b/test/unit/org/apache/cassandra/net/OutboundConnectionSettingsTest.java
index 7cf78a7..66773f8 100644
--- a/test/unit/org/apache/cassandra/net/OutboundConnectionSettingsTest.java
+++ b/test/unit/org/apache/cassandra/net/OutboundConnectionSettingsTest.java
@@ -28,6 +28,7 @@ import org.junit.Test;
import org.apache.cassandra.config.Config;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.locator.AbstractEndpointSnitch;
import org.apache.cassandra.locator.InetAddressAndPort;
import org.apache.cassandra.locator.Replica;
@@ -44,6 +45,7 @@ public class OutboundConnectionSettingsTest
public static void before()
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
}
@Test (expected = IllegalArgumentException.class)
diff --git a/test/unit/org/apache/cassandra/net/OutboundConnectionsTest.java b/test/unit/org/apache/cassandra/net/OutboundConnectionsTest.java
index 20180fb..82543e1 100644
--- a/test/unit/org/apache/cassandra/net/OutboundConnectionsTest.java
+++ b/test/unit/org/apache/cassandra/net/OutboundConnectionsTest.java
@@ -33,6 +33,7 @@ import org.junit.BeforeClass;
import org.junit.Test;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.gms.GossipDigestSyn;
import org.apache.cassandra.io.IVersionedSerializer;
import org.apache.cassandra.io.util.DataInputPlus;
@@ -59,6 +60,7 @@ public class OutboundConnectionsTest
public static void before()
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
}
@Before
diff --git a/test/unit/org/apache/cassandra/service/RemoveTest.java b/test/unit/org/apache/cassandra/service/RemoveTest.java
index e6fbe7b..ea8c8d8 100644
--- a/test/unit/org/apache/cassandra/service/RemoveTest.java
+++ b/test/unit/org/apache/cassandra/service/RemoveTest.java
@@ -32,6 +32,7 @@ import org.junit.*;
import org.apache.cassandra.Util;
import org.apache.cassandra.concurrent.NamedThreadFactory;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.dht.IPartitioner;
import org.apache.cassandra.dht.RandomPartitioner;
import org.apache.cassandra.dht.Token;
@@ -55,6 +56,7 @@ public class RemoveTest
static
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
}
static final IPartitioner partitioner = RandomPartitioner.instance;
diff --git a/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java b/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java
index 565d91a..6111339 100644
--- a/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java
+++ b/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java
@@ -37,6 +37,7 @@ import org.apache.cassandra.OrderedJUnit4ClassRunner;
import org.apache.cassandra.SchemaLoader;
import org.apache.cassandra.audit.AuditLogManager;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.gms.ApplicationState;
import org.apache.cassandra.gms.Gossiper;
import org.apache.cassandra.gms.VersionedValue;
@@ -72,6 +73,7 @@ public class StorageServiceServerTest
{
System.setProperty(Gossiper.Props.DISABLE_THREAD_VALIDATION, "true");
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
IEndpointSnitch snitch = new PropertyFileSnitch();
DatabaseDescriptor.setEndpointSnitch(snitch);
Keyspace.setInitialized();
diff --git a/test/unit/org/apache/cassandra/transport/IdleDisconnectTest.java b/test/unit/org/apache/cassandra/transport/IdleDisconnectTest.java
index 2c8adea..355959f 100644
--- a/test/unit/org/apache/cassandra/transport/IdleDisconnectTest.java
+++ b/test/unit/org/apache/cassandra/transport/IdleDisconnectTest.java
@@ -46,9 +46,9 @@ public class IdleDisconnectTest extends CQLTester
DatabaseDescriptor.setNativeTransportIdleTimeout(TIMEOUT);
try (SimpleClient client = new SimpleClient(nativeAddr.getHostAddress(), nativePort))
{
+ long start = System.currentTimeMillis();
client.connect(false, false);
Assert.assertTrue(client.channel.isOpen());
- long start = System.currentTimeMillis();
CompletableFuture.runAsync(() -> {
while (!Thread.currentThread().isInterrupted() && client.channel.isOpen());
}).get(30, TimeUnit.SECONDS);
@@ -63,9 +63,9 @@ public class IdleDisconnectTest extends CQLTester
long sleepTime = 1000;
try (SimpleClient client = new SimpleClient(nativeAddr.getHostAddress(), nativePort))
{
+ long start = System.currentTimeMillis();
client.connect(false, false);
Assert.assertTrue(client.channel.isOpen());
- long start = System.currentTimeMillis();
Thread.sleep(sleepTime);
client.execute("SELECT * FROM system.peers", ConsistencyLevel.ONE);
CompletableFuture.runAsync(() -> {
diff --git a/test/unit/org/apache/cassandra/utils/concurrent/AbstractTransactionalTest.java b/test/unit/org/apache/cassandra/utils/concurrent/AbstractTransactionalTest.java
index f5ea3e8..bde0586 100644
--- a/test/unit/org/apache/cassandra/utils/concurrent/AbstractTransactionalTest.java
+++ b/test/unit/org/apache/cassandra/utils/concurrent/AbstractTransactionalTest.java
@@ -24,6 +24,7 @@ import org.junit.Test;
import org.junit.Assert;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.db.commitlog.CommitLog;
@Ignore
public abstract class AbstractTransactionalTest
@@ -32,6 +33,7 @@ public abstract class AbstractTransactionalTest
public static void setupDD()
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
}
protected abstract TestableTransaction newTest() throws Exception;
diff --git a/tools/stress/src/org/apache/cassandra/stress/CompactionStress.java b/tools/stress/src/org/apache/cassandra/stress/CompactionStress.java
index b4be63d..5daf654 100644
--- a/tools/stress/src/org/apache/cassandra/stress/CompactionStress.java
+++ b/tools/stress/src/org/apache/cassandra/stress/CompactionStress.java
@@ -34,6 +34,7 @@ import org.apache.cassandra.cql3.statements.schema.CreateTableStatement;
import org.apache.cassandra.db.ColumnFamilyStore;
import org.apache.cassandra.db.Directories;
import org.apache.cassandra.db.SystemKeyspace;
+import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.db.compaction.CompactionManager;
import org.apache.cassandra.db.lifecycle.LifecycleTransaction;
import org.apache.cassandra.dht.IPartitioner;
@@ -75,6 +76,7 @@ public abstract class CompactionStress implements Runnable
static
{
DatabaseDescriptor.daemonInitialization();
+ CommitLog.instance.start();
}
List<File> getDataDirectories()
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org