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;


Reply via email to