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 2012/09/04 22:13:45 UTC

[2/2] git commit: use millis + atomicint for commitlog segment creation patch by amorton; reviewed by jbellis for CASSANDRA-4601

use millis + atomicint for commitlog segment creation
patch by amorton; reviewed by jbellis for CASSANDRA-4601


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

Branch: refs/heads/trunk
Commit: 5df7b2512de1f851d2add08d699c948f3d95d9c8
Parents: f94c839
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Sep 4 15:04:16 2012 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Sep 4 15:04:16 2012 -0500

----------------------------------------------------------------------
 CHANGES.txt                                        |    2 ++
 .../cassandra/db/commitlog/CommitLogArchiver.java  |    2 +-
 .../cassandra/db/commitlog/CommitLogSegment.java   |    9 ++++++++-
 3 files changed, 11 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/5df7b251/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 5e72de3..6125c9c 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,6 @@
 1.1.5
+ * use millis + atomicint for commitlog segment creation instead of
+   nanotime, which has issues under some hypervisors (CASSANDRA-4601)
  * fix FD leak in slice queries (CASSANDRA-4571)
  * avoid recursion in leveled compaction (CASSANDRA-4587)
  * increase stack size under Java7 to 180K

http://git-wip-us.apache.org/repos/asf/cassandra/blob/5df7b251/src/java/org/apache/cassandra/db/commitlog/CommitLogArchiver.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/commitlog/CommitLogArchiver.java b/src/java/org/apache/cassandra/db/commitlog/CommitLogArchiver.java
index 556a37a..fe66369 100644
--- a/src/java/org/apache/cassandra/db/commitlog/CommitLogArchiver.java
+++ b/src/java/org/apache/cassandra/db/commitlog/CommitLogArchiver.java
@@ -150,7 +150,7 @@ public class CommitLogArchiver
             {
                 File toFile = new File(DatabaseDescriptor.getCommitLogLocation(),
                                        CommitLogSegment.FILENAME_PREFIX +
-                                       System.nanoTime() +
+                                       CommitLogSegment.getNextId() +
                                        CommitLogSegment.FILENAME_EXTENSION);             
                 String command = restoreCommand.replace("%from", fromFile.getPath());
                 command = command.replace("%to", toFile.getPath());       

http://git-wip-us.apache.org/repos/asf/cassandra/blob/5df7b251/src/java/org/apache/cassandra/db/commitlog/CommitLogSegment.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/commitlog/CommitLogSegment.java b/src/java/org/apache/cassandra/db/commitlog/CommitLogSegment.java
index fcd4130..290db7c 100644
--- a/src/java/org/apache/cassandra/db/commitlog/CommitLogSegment.java
+++ b/src/java/org/apache/cassandra/db/commitlog/CommitLogSegment.java
@@ -27,6 +27,7 @@ import java.io.RandomAccessFile;
 import java.nio.channels.FileChannel;
 import java.nio.MappedByteBuffer;
 import java.util.Collection;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.zip.Checksum;
@@ -56,6 +57,8 @@ public class CommitLogSegment
     static final String FILENAME_PREFIX = "CommitLog-";
     static final String FILENAME_EXTENSION = ".log";
     private static final Pattern COMMIT_LOG_FILE_PATTERN = Pattern.compile(FILENAME_PREFIX + "(\\d+)" + FILENAME_EXTENSION);
+    private final static long idBase = System.currentTimeMillis();
+    private final static AtomicInteger nextId = new AtomicInteger(1);
 
     // The commit log entry overhead in bytes (int: length + long: head checksum + long: tail checksum)
     static final int ENTRY_OVERHEAD_SIZE = 4 + 8 + 8;
@@ -81,6 +84,10 @@ public class CommitLogSegment
         return new CommitLogSegment(null);
     }
 
+    public static long getNextId()
+    {
+        return idBase + nextId.getAndIncrement();
+    }
     /**
      * Constructs a new segment file.
      *
@@ -88,7 +95,7 @@ public class CommitLogSegment
      */
     CommitLogSegment(String filePath)
     {
-        id = System.nanoTime();
+        id = getNextId();
         logFile = new File(DatabaseDescriptor.getCommitLogLocation(), FILENAME_PREFIX + id + FILENAME_EXTENSION);
         boolean isCreating = true;