Fix race when opening ColumnFamilyStore; patch by yukim reviewed by jbellis for CASSANDRA-5350
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ffc9bece Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ffc9bece Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ffc9bece Branch: refs/heads/cassandra-1.1 Commit: ffc9bece4854c8f6aae7f672e262897d06fce50d Parents: 3346771 Author: Yuki Morishita <yu...@apache.org> Authored: Thu Mar 14 15:57:37 2013 -0500 Committer: Yuki Morishita <yu...@apache.org> Committed: Thu Mar 14 15:57:37 2013 -0500 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../org/apache/cassandra/db/ColumnFamilyStore.java | 6 ------ .../org/apache/cassandra/db/MeteredFlusher.java | 2 +- .../cassandra/service/AbstractCassandraDaemon.java | 8 ++++---- 4 files changed, 6 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/ffc9bece/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index da81b66..89c8b10 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -6,6 +6,7 @@ * nodetool: ability to repair specific range (CASSANDRA-5280) * Fix possible assertion triggered in SliceFromReadCommand (CASSANDRA-5284) * cqlsh: Add inet type support on Windows (ipv4-only) (CASSANDRA-4801) + * Fix race when initializing ColumnFamilyStore (CASSANDRA-5350) 1.1.10 http://git-wip-us.apache.org/repos/asf/cassandra/blob/ffc9bece/src/java/org/apache/cassandra/db/ColumnFamilyStore.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java index 2781800..8d239e3 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java @@ -99,12 +99,6 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean public static final ExecutorService postFlushExecutor = new JMXEnabledThreadPoolExecutor("MemtablePostFlusher"); - static - { - // (can block if flush queue fills up, so don't put on scheduledTasks) - StorageService.optionalTasks.scheduleWithFixedDelay(new MeteredFlusher(), 1000, 1000, TimeUnit.MILLISECONDS); - } - public final Table table; public final String columnFamily; public final CFMetaData metadata; http://git-wip-us.apache.org/repos/asf/cassandra/blob/ffc9bece/src/java/org/apache/cassandra/db/MeteredFlusher.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/MeteredFlusher.java b/src/java/org/apache/cassandra/db/MeteredFlusher.java index ca1fafa..199d2ee 100644 --- a/src/java/org/apache/cassandra/db/MeteredFlusher.java +++ b/src/java/org/apache/cassandra/db/MeteredFlusher.java @@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory; import org.apache.cassandra.config.DatabaseDescriptor; -class MeteredFlusher implements Runnable +public class MeteredFlusher implements Runnable { private static Logger logger = LoggerFactory.getLogger(MeteredFlusher.class); http://git-wip-us.apache.org/repos/asf/cassandra/blob/ffc9bece/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java b/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java index 2a66e73..9ab6df2 100644 --- a/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java +++ b/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java @@ -40,10 +40,7 @@ import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ConfigurationException; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.config.Schema; -import org.apache.cassandra.db.ColumnFamilyStore; -import org.apache.cassandra.db.Directories; -import org.apache.cassandra.db.SystemTable; -import org.apache.cassandra.db.Table; +import org.apache.cassandra.db.*; import org.apache.cassandra.db.commitlog.CommitLog; import org.apache.cassandra.db.compaction.CompactionManager; import org.apache.cassandra.utils.CLibrary; @@ -258,6 +255,9 @@ public abstract class AbstractCassandraDaemon implements CassandraDaemon }; StorageService.optionalTasks.schedule(runnable, 5 * 60, TimeUnit.SECONDS); + // MeteredFlusher can block if flush queue fills up, so don't put on scheduledTasks + StorageService.optionalTasks.scheduleWithFixedDelay(new MeteredFlusher(), 1000, 1000, TimeUnit.MILLISECONDS); + SystemTable.finishStartup(); // start server internals