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();