diff --git oak-run/pom.xml oak-run/pom.xml index 604ff9d31a..7168a9e1c3 100644 --- oak-run/pom.xml +++ oak-run/pom.xml @@ -35,13 +35,12 @@ 2.4.7 - 48200000 + 47000000 diff --git oak-segment-tar/pom.xml oak-segment-tar/pom.xml index 932b3527b2..2893004eb0 100644 --- oak-segment-tar/pom.xml +++ oak-segment-tar/pom.xml @@ -171,11 +171,6 @@ commons-io provided - - org.apache.commons - commons-math3 - provided - com.google.guava guava @@ -206,6 +201,11 @@ org.apache.felix.scr.annotations provided + + io.dropwizard.metrics + metrics-core + 3.1.0 + @@ -318,12 +318,7 @@ 1.10.19 test - - io.dropwizard.metrics - metrics-core - 3.1.0 - test - + org.apache.jackrabbit diff --git oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java index b5a551521f..42b6aa7616 100644 --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java @@ -33,7 +33,6 @@ import java.util.concurrent.atomic.AtomicReference; import javax.annotation.Nonnull; -import org.apache.commons.math3.stat.descriptive.SynchronizedDescriptiveStatistics; import org.apache.jackrabbit.oak.api.CommitFailedException; import org.apache.jackrabbit.oak.api.PropertyState; import org.apache.jackrabbit.oak.segment.Revisions; @@ -52,6 +51,9 @@ import org.apache.jackrabbit.oak.stats.StatisticsProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.codahale.metrics.Histogram; +import com.codahale.metrics.SlidingWindowReservoir; + public class LockBasedScheduler implements Scheduler { public static class LockBasedSchedulerBuilder { @@ -114,11 +116,11 @@ public class LockBasedScheduler implements Scheduler { .parseBoolean(System.getProperty("oak.segmentNodeStore.commitFairLock", "true")); /** - * Flag controlling the commit time percentile to wait for the lock in order + * Flag controlling the commit time quantile to wait for the lock in order * to increase chances of returning an up to date state. */ - private static final int SCHEDULER_FETCH_COMMIT_DELAY_PERCENTILE = Integer - .getInteger("oak.scheduler.fetch.commitDelayPercentile", 50); + private static final double SCHEDULER_FETCH_COMMIT_DELAY_QUANTILE = Double + .parseDouble(System.getProperty("oak.scheduler.fetch.commitDelayQuantile", "0.5")); /** * Sets the number of seconds to wait for the attempt to grab the lock to @@ -145,7 +147,7 @@ public class LockBasedScheduler implements Scheduler { private final SegmentNodeStoreStats stats; - private final SynchronizedDescriptiveStatistics commitTimeStats = new SynchronizedDescriptiveStatistics(1000); + private Histogram commitTimeHistogram = new Histogram(new SlidingWindowReservoir(1000)); public LockBasedScheduler(LockBasedSchedulerBuilder builder) { @@ -162,7 +164,7 @@ public class LockBasedScheduler implements Scheduler { @Override public NodeState getHeadNodeState() { - long delay = (long) commitTimeStats.getPercentile(SCHEDULER_FETCH_COMMIT_DELAY_PERCENTILE); + long delay = (long) commitTimeHistogram.getSnapshot().getValue(SCHEDULER_FETCH_COMMIT_DELAY_QUANTILE); try { if (commitSemaphore.tryAcquire(delay, NANOSECONDS)) { try { @@ -227,7 +229,7 @@ public class LockBasedScheduler implements Scheduler { long afterCommitTime = System.nanoTime(); stats.committedAfter(afterCommitTime - beforeCommitTime); - commitTimeStats.addValue(afterCommitTime - beforeCommitTime); + commitTimeHistogram.update(afterCommitTime - beforeCommitTime); stats.onCommit(); return merged;