Author: jukka
Date: Tue Jul  1 21:33:26 2014
New Revision: 1607196

URL: http://svn.apache.org/r1607196
Log:
OAK-1927: TarMK compaction delays journal updates

Better not to track backlog since the compaction
already automatically rebases recent changes and
flush is invoked once every five seconds.

Also expose more details in the thread name

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/BackgroundThread.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/BackgroundThread.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/BackgroundThread.java?rev=1607196&r1=1607195&r2=1607196&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/BackgroundThread.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/BackgroundThread.java
 Tue Jul  1 21:33:26 2014
@@ -16,9 +16,9 @@
  */
 package org.apache.jackrabbit.oak.plugins.segment.file;
 
-import static java.lang.System.nanoTime;
-import static java.util.concurrent.TimeUnit.NANOSECONDS;
-import static java.util.concurrent.TimeUnit.SECONDS;
+import static java.lang.System.currentTimeMillis;
+
+import java.util.Calendar;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -33,9 +33,11 @@ class BackgroundThread extends Thread {
 
     private final long interval;
 
-    private long backlog = 0;
+    private boolean alive = true;
+
+    private long iterations = 0;
 
-    private long lastDuration = 0;
+    private long sumDuration = 0;
 
     private long maxDuration = 0;
 
@@ -54,18 +56,21 @@ class BackgroundThread extends Thread {
     public void run() {
         try {
             while (waitUntilNextIteration()) {
-                long start = nanoTime();
+                setName(name + ", active since " + Calendar.getInstance()
+                        + ", previous max duration " + maxDuration + "ms");
+
+                long start = currentTimeMillis();
                 super.run();
-                long seconds = SECONDS.convert(nanoTime() - start, 
NANOSECONDS);
+                long duration = currentTimeMillis() - start;
 
-                if (lastDuration != seconds) {
-                    lastDuration = seconds;
-                    if (maxDuration < seconds) {
-                        maxDuration = seconds;
-                    }
-                    // make execution statistics visible in thread dumps
-                    setName(name + " " + lastDuration + "/" + maxDuration);
-                }
+                iterations++;
+                sumDuration += duration;
+                maxDuration = Math.max(maxDuration, duration);
+
+                // make execution statistics visible in thread dumps
+                setName(name
+                        + ", avg " + (sumDuration / iterations) + "ms"
+                        + ", max " + maxDuration + "ms");
             }
         } catch (InterruptedException e) {
             log.error(name + " interrupted", e);
@@ -88,29 +93,21 @@ class BackgroundThread extends Thread {
 
     private synchronized void trigger(boolean close) {
         if (close) {
-            backlog = -1;
-        } else if (backlog >= 0) {
-            backlog++;
+            alive = false;
         }
         notify();
     }
 
     private synchronized boolean waitUntilNextIteration()
             throws InterruptedException {
-        if (backlog == 0) {
-            // no backlog to process (and not closed), so wait...
+        if (alive) {
             if (interval < 0) {
                 wait();
             } else {
                 wait(interval);
             }
         }
-
-        if (backlog > 0) {
-            backlog--;
-        }
-
-        return backlog >= 0;
+        return alive;
     }
 
 }


Reply via email to