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/05/27 21:31:32 UTC

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

Author: jukka
Date: Tue May 27 19:31:31 2014
New Revision: 1597854

URL: http://svn.apache.org/r1597854
Log:
OAK-1804: TarMK compaction

Use SegmentNodeBuilder instead of MemoryNodeBuilder to avoid running out of memory.

Modified:
    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/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=1597854&r1=1597853&r2=1597854&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 Tue May 27 19:31:31 2014
@@ -55,16 +55,17 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.plugins.blob.BlobStoreBlob;
 import org.apache.jackrabbit.oak.plugins.memory.BinaryPropertyState;
-import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
 import org.apache.jackrabbit.oak.plugins.memory.MultiBinaryPropertyState;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.plugins.segment.RecordId;
 import org.apache.jackrabbit.oak.plugins.segment.Segment;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentBlob;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentId;
+import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeBuilder;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentTracker;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentStore;
+import org.apache.jackrabbit.oak.plugins.segment.SegmentWriter;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -383,7 +384,8 @@ public class FileStore implements Segmen
             if (cleanup || !after.equals(before)) {
                 // needs to happen outside the synchronization block below to
                 // avoid a deadlock with another thread flushing the writer
-                tracker.getWriter().flush();
+                SegmentWriter segmentWriter = tracker.getWriter();
+                segmentWriter.flush();
 
                 // needs to happen outside the synchronization block below to
                 // prevent the flush from stopping concurrent reads and writes
@@ -399,17 +401,15 @@ public class FileStore implements Segmen
                         long start = System.nanoTime();
 
                         log.debug("TarMK compaction");
-                        tracker.getWriter().dropCache();
+                        segmentWriter.dropCache();
+                        SegmentNodeBuilder builder =
+                                segmentWriter.writeNode(EMPTY_NODE).builder();
                         SegmentNodeState state = new SegmentNodeState(after);
-                        NodeBuilder mem = EmptyNodeState.EMPTY_NODE.builder();
-                        compact(state, "/", 5, mem);
-                        setHead(state,
-                                tracker.getWriter().writeNode(
-                                        mem.getNodeState()));
+                        compact(state, "/", 5, builder);
+                        setHead(state, builder.getNodeState());
                         before = null;
                         after = null;
                         state = null;
-                        mem = null;
                         System.gc();
 
                         Set<UUID> ids = newHashSet();