You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2018/11/07 09:15:42 UTC

svn commit: r1845994 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CommitsTracker.java

Author: mduerig
Date: Wed Nov  7 09:15:42 2018
New Revision: 1845994

URL: http://svn.apache.org/viewvc?rev=1845994&view=rev
Log:
OAK-7885: Performance regression in FlatTreeUpdateTest
Break out early when purging the tracked commits.

Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CommitsTracker.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CommitsTracker.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CommitsTracker.java?rev=1845994&r1=1845993&r2=1845994&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CommitsTracker.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CommitsTracker.java Wed Nov  7 09:15:42 2018
@@ -23,6 +23,7 @@ import static com.google.common.collect.
 import static com.google.common.collect.Queues.newConcurrentLinkedQueue;
 
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
 import java.util.Queue;
 import java.util.concurrent.ConcurrentHashMap;
@@ -83,7 +84,17 @@ class CommitsTracker {
 
     public void trackExecutedCommitOf(Thread thread) {
         long t = System.currentTimeMillis();
-        commits.removeIf(c -> c.timeStamp < t - 60000);
+        final Iterator<Commit> it = commits.iterator();
+
+        // Purge the queue
+        // Avoiding removeIf allows us to bail out early. See OAK-7885
+        while (it.hasNext()) {
+            if (it.next().timeStamp < t - 60000) {
+                it.remove();
+            } else {
+                break;
+            }
+        }
         commits.offer(new Commit(t, thread.getName()));
     }