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 2015/09/04 14:32:58 UTC

svn commit: r1701239 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment: SegmentNodeStore.java file/FileStore.java

Author: mduerig
Date: Fri Sep  4 12:32:58 2015
New Revision: 1701239

URL: http://svn.apache.org/r1701239
Log:
OAK-3347: Ineffective cleanup after compaction due to references to root
Explicitly give up reference to the previous root state before running cleanup

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java?rev=1701239&r1=1701238&r2=1701239&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java Fri Sep  4 12:32:58 2015
@@ -154,6 +154,9 @@ public class SegmentNodeStore implements
             try {
                 return c.call();
             } finally {
+                // Explicitly give up reference to the previous root state
+                // otherwise they would block cleanup. See OAK-3347
+                refreshHead();
                 commitSemaphore.release();
             }
         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java?rev=1701239&r1=1701238&r2=1701239&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java Fri Sep  4 12:32:58 2015
@@ -673,6 +673,10 @@ public class FileStore implements Segmen
                 // prevent the flush from stopping concurrent reads and writes
                 // by the persisted compaction map. See OAK-3264
                 if (cleanup) {
+                    // Explicitly give up reference to the previous root state
+                    // otherwise they would block cleanup. See OAK-3347
+                    before = null;
+                    after = null;
                     cleanup();
                 }
             }