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 ju...@apache.org on 2014/04/03 06:47:39 UTC

svn commit: r1584259 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java

Author: jukka
Date: Thu Apr  3 04:47:39 2014
New Revision: 1584259

URL: http://svn.apache.org/r1584259
Log:
OAK-631: SegmentMK: Implement garbage collection

Flush the segment writer before and after a checkpoint to reduce the chance
of a checkpoint ending up in a segment together with some unrelated changes
which would then prevent that checkpoint from being garbage collected

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.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=1584259&r1=1584258&r2=1584259&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 Thu Apr  3 04:47:39 2014
@@ -206,6 +206,7 @@ public class SegmentNodeStore implements
             if (commitSemaphore.tryAcquire()) {
                 try {
                     refreshHead();
+                    store.getTracker().getWriter().flush();
 
                     SegmentNodeState state = head.get();
                     SegmentNodeBuilder builder = state.builder();
@@ -225,7 +226,9 @@ public class SegmentNodeStore implements
                     cp.setProperty("timestamp",  now + lifetime);
                     cp.setChildNode(ROOT, state.getChildNode(ROOT));
 
-                    if (store.setHead(state, builder.getNodeState())) {
+                    SegmentNodeState newState = builder.getNodeState();
+                    store.getTracker().getWriter().flush();
+                    if (store.setHead(state, newState)) {
                         refreshHead();
                         return name;
                     }