Author: adulceanu
Date: Thu Jul 6 09:08:19 2017
New Revision: 1801000
URL: http://svn.apache.org/viewvc?rev=1801000&view=rev
Log:
OAK-4732 - (Slightly) prioritise reads over writes
Added commons-math3 dependency to oak-segment-tar and increased oak-run jar
size to accommodate the change
Modified:
jackrabbit/oak/trunk/oak-run/pom.xml
jackrabbit/oak/trunk/oak-segment-tar/pom.xml
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java
Modified: jackrabbit/oak/trunk/oak-run/pom.xml
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/pom.xml?rev=1801000&r1=1800999&r2=1801000&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-run/pom.xml Thu Jul 6 09:08:19 2017
@@ -35,12 +35,13 @@
<groovy.version>2.4.7</groovy.version>
<!--
Size History:
+ + 48 MB added commons-math3 dependency to oak-segment-tar
+ 47 MB release profile build slightly bigger jar (OAK-6252)
+ 46 MB re-introduced the ServerCommand and required dependencies
(OAK-6252)
+ 41 MB build failing on the release profile (OAK-6250)
+ 38 MB. Initial value. Current 35MB plus a 10%
-->
- <max.jar.size>47000000</max.jar.size>
+ <max.jar.size>48200000</max.jar.size>
</properties>
<build>
Modified: jackrabbit/oak/trunk/oak-segment-tar/pom.xml
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/pom.xml?rev=1801000&r1=1800999&r2=1801000&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/pom.xml Thu Jul 6 09:08:19 2017
@@ -171,6 +171,11 @@
<artifactId>commons-io</artifactId>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-math3</artifactId>
+ <scope>provided</scope>
+ </dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
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=1801000&r1=1800999&r2=1801000&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
Thu Jul 6 09:08:19 2017
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.segmen
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static java.lang.Thread.currentThread;
+import static java.util.concurrent.TimeUnit.NANOSECONDS;
import static org.apache.jackrabbit.oak.api.Type.LONG;
import java.io.Closeable;
@@ -32,6 +33,7 @@ import java.util.concurrent.atomic.Atomi
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;
@@ -135,6 +137,9 @@ public class LockBasedScheduler implemen
protected final AtomicReference<SegmentNodeState> head;
private final SegmentNodeStoreStats stats;
+
+ private final SynchronizedDescriptiveStatistics commitTimeStats = new
SynchronizedDescriptiveStatistics(1000);
+
public LockBasedScheduler(LockBasedSchedulerBuilder builder) {
if (COMMIT_FAIR_LOCK) {
@@ -150,12 +155,17 @@ public class LockBasedScheduler implemen
@Override
public NodeState getHeadNodeState() {
- if (commitSemaphore.tryAcquire()) {
- try {
- refreshHead(true);
- } finally {
- commitSemaphore.release();
- }
+ long delay = (long) commitTimeStats.getPercentile(50);
+ try {
+ if (commitSemaphore.tryAcquire(delay, NANOSECONDS)) {
+ try {
+ refreshHead(true);
+ } finally {
+ commitSemaphore.release();
+ }
+ }
+ } catch (InterruptedException e) {
+ currentThread().interrupt();
}
return head.get();
}
@@ -210,6 +220,7 @@ public class LockBasedScheduler implemen
long afterCommitTime = System.nanoTime();
stats.committedAfter(afterCommitTime - beforeCommitTime);
+ commitTimeStats.addValue(afterCommitTime - beforeCommitTime);
stats.onCommit();
return merged;