You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by be...@apache.org on 2015/08/08 12:37:05 UTC

[02/10] cassandra git commit: Make batch commit log mode easier to tune

Make batch commit log mode easier to tune

This patch effectively ignores the batch commit log
mode sync interval option, and performs a sync as soon
as work becomes available, causing a natural grouping
of writes and minimal latency.

patch by benedict; reviewed by ariel for CASSANDRA-9533


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

Branch: refs/heads/cassandra-2.2
Commit: 98a08ebcf11a5124ddf865b5337c781a11377588
Parents: 1e3f03e
Author: Benedict Elliott Smith <be...@apache.org>
Authored: Tue Aug 4 12:47:10 2015 +0100
Committer: Benedict Elliott Smith <be...@apache.org>
Committed: Sat Aug 8 12:33:22 2015 +0200

----------------------------------------------------------------------
 .../apache/cassandra/db/commitlog/AbstractCommitLogService.java   | 3 ++-
 .../org/apache/cassandra/db/commitlog/BatchCommitLogService.java  | 1 +
 2 files changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/98a08ebc/src/java/org/apache/cassandra/db/commitlog/AbstractCommitLogService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/commitlog/AbstractCommitLogService.java b/src/java/org/apache/cassandra/db/commitlog/AbstractCommitLogService.java
index d9ea683..9f3b410 100644
--- a/src/java/org/apache/cassandra/db/commitlog/AbstractCommitLogService.java
+++ b/src/java/org/apache/cassandra/db/commitlog/AbstractCommitLogService.java
@@ -43,7 +43,7 @@ public abstract class AbstractCommitLogService
 
     // signal that writers can wait on to be notified of a completed sync
     protected final WaitQueue syncComplete = new WaitQueue();
-    private final Semaphore haveWork = new Semaphore(1);
+    protected final Semaphore haveWork = new Semaphore(1);
 
     private static final Logger logger = LoggerFactory.getLogger(AbstractCommitLogService.class);
 
@@ -114,6 +114,7 @@ public abstract class AbstractCommitLogService
                         try
                         {
                             haveWork.tryAcquire(sleep, TimeUnit.MILLISECONDS);
+                            haveWork.drainPermits();
                         }
                         catch (InterruptedException e)
                         {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/98a08ebc/src/java/org/apache/cassandra/db/commitlog/BatchCommitLogService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/commitlog/BatchCommitLogService.java b/src/java/org/apache/cassandra/db/commitlog/BatchCommitLogService.java
index 65bee40..dd55d24 100644
--- a/src/java/org/apache/cassandra/db/commitlog/BatchCommitLogService.java
+++ b/src/java/org/apache/cassandra/db/commitlog/BatchCommitLogService.java
@@ -30,6 +30,7 @@ class BatchCommitLogService extends AbstractCommitLogService
     {
         // wait until record has been safely persisted to disk
         pending.incrementAndGet();
+        haveWork.release();
         alloc.awaitDiskSync();
         pending.decrementAndGet();
     }