You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2010/02/09 20:22:13 UTC

svn commit: r908162 - in /incubator/cassandra/trunk/src/java/org/apache/cassandra/db: ColumnFamilyStore.java RecoveryManager.java Table.java commitlog/CommitLog.java commitlog/CommitLogExecutorService.java

Author: jbellis
Date: Tue Feb  9 19:22:12 2010
New Revision: 908162

URL: http://svn.apache.org/viewvc?rev=908162&view=rev
Log:
replace double-checked locking in CL.open() with initialize on demand holder in CL.instance().  patch by jbellis

Modified:
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/RecoveryManager.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogExecutorService.java

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=908162&r1=908161&r2=908162&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Tue Feb  9 19:22:12 2010
@@ -366,7 +366,7 @@
         Table.flusherLock.writeLock().lock();
         try
         {
-            final CommitLog.CommitLogContext ctx = CommitLog.open().getContext(); // this is harmless if !writeCommitLog
+            final CommitLog.CommitLogContext ctx = CommitLog.instance().getContext(); // this is harmless if !writeCommitLog
 
             if (oldMemtable.isFrozen())
             {
@@ -541,7 +541,7 @@
     {
         if (cLogCtx.isValidContext())
         {
-            CommitLog.open().onMemtableFlush(table_, columnFamily_, cLogCtx);
+            CommitLog.instance().onMemtableFlush(table_, columnFamily_, cLogCtx);
         }
     }
 

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/RecoveryManager.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/RecoveryManager.java?rev=908162&r1=908161&r2=908162&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/RecoveryManager.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/RecoveryManager.java Tue Feb  9 19:22:12 2010
@@ -53,7 +53,7 @@
 
         Arrays.sort(files, new FileUtils.FileComparator());
         logger_.info("Replaying " + StringUtils.join(files, ", "));
-        CommitLog.open().recover(files);
+        CommitLog.instance().recover(files);
         FileUtils.delete(files);
         logger_.info("Log replay complete");
     }

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java?rev=908162&r1=908161&r2=908162&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java Tue Feb  9 19:22:12 2010
@@ -396,7 +396,7 @@
         {
             if (writeCommitLog)
             {
-                Future<CommitLog.CommitLogContext> future = CommitLog.open().add(mutation, serializedMutation);
+                Future<CommitLog.CommitLogContext> future = CommitLog.instance().add(mutation, serializedMutation);
                 if (waitForCommitLog)
                 {
                     try

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java?rev=908162&r1=908161&r2=908162&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java Tue Feb  9 19:22:12 2010
@@ -77,11 +77,19 @@
 public class CommitLog
 {
     private static volatile int SEGMENT_SIZE = 128*1024*1024; // roll after log gets this big
-    private static volatile CommitLog instance_;
-    private static final Lock lock_ = new ReentrantLock();
     private static final Logger logger_ = Logger.getLogger(CommitLog.class);
     private static final Map<String, CommitLogHeader> clHeaders_ = new HashMap<String, CommitLogHeader>();
 
+    public static CommitLog instance()
+    {
+        return CLHandle.instance;
+    }
+
+    private static class CLHandle
+    {
+        public static final CommitLog instance = new CommitLog();
+    }
+
     public static class CommitLogContext
     {
         /* Commit Log associated with this operation */
@@ -139,27 +147,6 @@
         return new BufferedRandomAccessFile(file, "rw");
     }
 
-    public static CommitLog open() throws IOException
-    {
-        if ( instance_ == null )
-        {
-            CommitLog.lock_.lock();
-            try
-            {
-
-                if ( instance_ == null )
-                {
-                    instance_ = new CommitLog();
-                }
-            }
-            finally
-            {
-                CommitLog.lock_.unlock();
-            }
-        }
-        return instance_;
-    }
-
     /* Current commit log file */
     private String logFile_;
     /* header for current commit log */
@@ -183,11 +170,18 @@
      * param @ recoverymode - is commit log being instantiated in
      *                        in recovery mode.
     */
-    private CommitLog() throws IOException
+    private CommitLog()
     {
         setNextFileName();
-        logWriter_ = CommitLog.createWriter(logFile_);
-        writeCommitLogHeader();
+        try
+        {
+            logWriter_ = CommitLog.createWriter(logFile_);
+            writeCommitLogHeader();
+        }
+        catch (IOException e)
+        {
+            throw new IOError(e);
+        }
 
         if (DatabaseDescriptor.getCommitLogSync() == DatabaseDescriptor.CommitLogSync.periodic)
         {
@@ -224,19 +218,6 @@
         }
     }
 
-    /*
-     * This ctor is currently used only for debugging. We
-     * are now using it to modify the header so that recovery
-     * can be tested in as many scenarios as we could imagine.
-     *
-     * param @ logFile - logfile which we wish to modify.
-    */
-    CommitLog(File logFile) throws IOException
-    {
-        logFile_ = logFile.getAbsolutePath();
-        logWriter_ = CommitLog.createWriter(logFile_);
-    }
-
     String getLogFile()
     {
         return logFile_;

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogExecutorService.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogExecutorService.java?rev=908162&r1=908161&r2=908162&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogExecutorService.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogExecutorService.java Tue Feb  9 19:22:12 2010
@@ -126,7 +126,7 @@
         // now sync and set the tasks' values (which allows thread calling get() to proceed)
         try
         {
-            CommitLog.open().sync();
+            CommitLog.instance().sync();
         }
         catch (IOException e)
         {