You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2019/03/15 13:34:45 UTC

svn commit: r1855586 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java

Author: mduerig
Date: Fri Mar 15 13:34:45 2019
New Revision: 1855586

URL: http://svn.apache.org/viewvc?rev=1855586&view=rev
Log:
OAK-8094: JMX monitoring to detect commits carrying over from previous GC generation can block other threads from committing
Always handle commits as queued even when the lock is free to avoid races between checking the number of available permits and actually acquiring the lock

Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java?rev=1855586&r1=1855585&r2=1855586&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java Fri Mar 15 13:34:45 2019
@@ -253,26 +253,17 @@ public class LockBasedScheduler implemen
     @Override
     public NodeState schedule(@NotNull Commit commit, SchedulerOption... schedulingOptions)
             throws CommitFailedException {
-        boolean queued = false;
-
         try {
             commitSemaphoreLogging.warnOnBlockingCommit();
 
-            long queuedTime = -1;
-
-            if (commitSemaphore.availablePermits() < 1) {
-                queuedTime = System.nanoTime();
-                stats.onCommitQueued(Thread.currentThread());
-                queued = true;
-            }
+            long queuedTime = System.nanoTime();
+            stats.onCommitQueued(Thread.currentThread());
 
             commitSemaphore.acquire();
             commitSemaphoreLogging.commitStarted(commit);
             try {
-                if (queued) {
-                    long dequeuedTime = System.nanoTime();
-                    stats.onCommitDequeued(Thread.currentThread(), dequeuedTime - queuedTime);
-                }
+                long dequeuedTime = System.nanoTime();
+                stats.onCommitDequeued(Thread.currentThread(), dequeuedTime - queuedTime);
 
                 long beforeCommitTime = System.nanoTime();