Author: davide
Date: Fri Jan 22 15:19:30 2016
New Revision: 1726230

URL: http://svn.apache.org/viewvc?rev=1726230&view=rev
Log:
OAK-3905 - configurable atomic counter task timeout

    - baseline
    - updated docs
    - used millis
    - first schedule 500ms
    - configurable

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/atomic/AtomicCounterEditor.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/atomic/package-info.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/atomic/AtomicCounterEditorTest.java
    jackrabbit/oak/trunk/oak-doc/src/site/markdown/features/atomic-counter.md

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/atomic/AtomicCounterEditor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/atomic/AtomicCounterEditor.java?rev=1726230&r1=1726229&r2=1726230&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/atomic/AtomicCounterEditor.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/atomic/AtomicCounterEditor.java
 Fri Jan 22 15:19:30 2016
@@ -316,7 +316,7 @@ public class AtomicCounterEditor extends
                     LOG.trace("CommitHook not registered with Whiteboard. 
Falling back to sync.");
                     consolidateCount(builder);
                 } else {
-                    long delay = 0;
+                    long delay = 500;
                     ConsolidatorTask t = new ConsolidatorTask(
                         path, 
                         builder.getProperty(revisionName), 
@@ -324,15 +324,25 @@ public class AtomicCounterEditor extends
                         executor, 
                         delay, 
                         hook);
-                    LOG.debug("[{}] Scheduling process by {}secs", 
t.getName(), delay); 
-                    executor.schedule(t, delay, TimeUnit.SECONDS);             
       
+                    LOG.debug("[{}] Scheduling process by {}ms", t.getName(), 
delay); 
+                    executor.schedule(t, delay, TimeUnit.MILLISECONDS);        
            
                 }
             }
         }
     }
     
     public static class ConsolidatorTask implements Callable<Void> {
-        public static final long MAX_TIMEOUT = 32;
+        /**
+         * millis over which the task will timeout
+         */
+        public static final long MAX_TIMEOUT = Long
+            .getLong("oak.atomiccounter.task.timeout", 32000);
+        
+        /**
+         * millis below which the next delay will schedule at this amount. 
+         */
+        public static final long MIN_TIMEOUT = 500;
+        
         private final String name;
         private final String p;
         private final PropertyState rev;
@@ -429,22 +439,19 @@ public class AtomicCounterEditor extends
         private void reschedule() {
             long d = nextDelay(delay);
             if (isTimedOut(d)) {
-                LOG.warn("[{}] The consolidator task for '{}' time out. 
Cancelling the retry.",
+                LOG.warn("[{}] The consolidator task for '{}' timed out. 
Cancelling the retry.",
                     name, p);
                 return;
             }
             
             ConsolidatorTask task = new ConsolidatorTask(this, d);
-            LOG.debug("[{}] Rescheduling '{}' by {}sec", task.getName(), p, d);
-            exec.schedule(task, d, TimeUnit.SECONDS);
+            LOG.debug("[{}] Rescheduling '{}' by {}ms", task.getName(), p, d);
+            exec.schedule(task, d, TimeUnit.MILLISECONDS);
         }
         
         public static long nextDelay(long currentDelay) {
-            if (currentDelay < 0) {
-                return 0;
-            }
-            if (currentDelay == 0) {
-                return 1;
+            if (currentDelay < MIN_TIMEOUT) {
+                return MIN_TIMEOUT;
             }
             if (currentDelay >= MAX_TIMEOUT) {
                 return Long.MAX_VALUE;
@@ -453,10 +460,7 @@ public class AtomicCounterEditor extends
         }
         
         public static boolean isTimedOut(long delay) {
-            if (delay > MAX_TIMEOUT) {
-                return true;
-            }
-            return false;
+            return delay > MAX_TIMEOUT;
         }
         
         public String getName() {

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/atomic/package-info.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/atomic/package-info.java?rev=1726230&r1=1726229&r2=1726230&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/atomic/package-info.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/atomic/package-info.java
 Fri Jan 22 15:19:30 2016
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@Version("2.0.0")
+@Version("2.1.0")
 @Export(optional = "provide:=true")
 package org.apache.jackrabbit.oak.plugins.atomic;
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/atomic/AtomicCounterEditorTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/atomic/AtomicCounterEditorTest.java?rev=1726230&r1=1726229&r2=1726230&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/atomic/AtomicCounterEditorTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/atomic/AtomicCounterEditorTest.java
 Fri Jan 22 15:19:30 2016
@@ -582,17 +582,23 @@ public class AtomicCounterEditorTest {
     
     @Test
     public void nextDelay() {
-        assertEquals(0, 
AtomicCounterEditor.ConsolidatorTask.nextDelay(-23456789));
-        assertEquals(1, AtomicCounterEditor.ConsolidatorTask.nextDelay(0));
-        assertEquals(2, AtomicCounterEditor.ConsolidatorTask.nextDelay(1));
-        assertEquals(4, AtomicCounterEditor.ConsolidatorTask.nextDelay(2));
-        assertEquals(8, AtomicCounterEditor.ConsolidatorTask.nextDelay(4));
-        assertEquals(16, AtomicCounterEditor.ConsolidatorTask.nextDelay(8));
-        assertEquals(32, AtomicCounterEditor.ConsolidatorTask.nextDelay(16));
+        assertEquals(AtomicCounterEditor.ConsolidatorTask.MIN_TIMEOUT,
+            AtomicCounterEditor.ConsolidatorTask.nextDelay(-23456789));
+        assertEquals(AtomicCounterEditor.ConsolidatorTask.MIN_TIMEOUT,
+            AtomicCounterEditor.ConsolidatorTask
+                .nextDelay(AtomicCounterEditor.ConsolidatorTask.MIN_TIMEOUT - 
1));
+        assertEquals(1000, 
AtomicCounterEditor.ConsolidatorTask.nextDelay(500));
+        assertEquals(2000, 
AtomicCounterEditor.ConsolidatorTask.nextDelay(1000));
+        assertEquals(4000, 
AtomicCounterEditor.ConsolidatorTask.nextDelay(2000));
+        assertEquals(8000, 
AtomicCounterEditor.ConsolidatorTask.nextDelay(4000));
+        assertEquals(16000, 
AtomicCounterEditor.ConsolidatorTask.nextDelay(8000));
+        assertEquals(32000, 
AtomicCounterEditor.ConsolidatorTask.nextDelay(16000));
         assertEquals(Long.MAX_VALUE,
             AtomicCounterEditor.ConsolidatorTask
                 .nextDelay(AtomicCounterEditor.ConsolidatorTask.MAX_TIMEOUT));
-        assertEquals(Long.MAX_VALUE, 
AtomicCounterEditor.ConsolidatorTask.nextDelay(45678));
+        assertEquals(Long.MAX_VALUE,
+            AtomicCounterEditor.ConsolidatorTask
+                .nextDelay(AtomicCounterEditor.ConsolidatorTask.MAX_TIMEOUT + 
1));
     }
     
     @Test

Modified: 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/features/atomic-counter.md
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-doc/src/site/markdown/features/atomic-counter.md?rev=1726230&r1=1726229&r2=1726230&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-doc/src/site/markdown/features/atomic-counter.md 
(original)
+++ jackrabbit/oak/trunk/oak-doc/src/site/markdown/features/atomic-counter.md 
Fri Jan 22 15:19:30 2016
@@ -48,7 +48,15 @@ happen asynchronously. Therefore the val
 could not be up to date and lagging behind of some time. This is for
 dealing with conflicts that could happen when updating the same
 properties across the cluster and for scaling without having to deal
-with any global locking system. 
+with any global locking system.
+
+The consolidation task will timeout by default at `32000ms`. This
+aspect is configurable by providing the environment variable:
+`oak.atomiccounter.task.timeout`. In case a node time out it will be
+tracked in the logs with a warning.
+
+For example to increase the timeout up to 64 seconds you can set from
+the command line `-Doak.atomiccounter.task.timeout=64000`.
 
 ##### Constraints
 


Reply via email to