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