Index: src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreRestore.java =================================================================== --- src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreRestore.java (revision 1607737) +++ src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreRestore.java (working copy) @@ -22,12 +22,12 @@ import java.io.IOException; import org.apache.jackrabbit.oak.api.CommitFailedException; +import org.apache.jackrabbit.oak.plugins.segment.Compactor; import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState; +import org.apache.jackrabbit.oak.plugins.segment.SegmentWriter; import org.apache.jackrabbit.oak.plugins.segment.file.FileStore; import org.apache.jackrabbit.oak.spi.commit.CommitInfo; import org.apache.jackrabbit.oak.spi.commit.EmptyHook; -import org.apache.jackrabbit.oak.spi.state.ApplyDiff; -import org.apache.jackrabbit.oak.spi.state.NodeBuilder; import org.apache.jackrabbit.oak.spi.state.NodeState; import org.apache.jackrabbit.oak.spi.state.NodeStore; import org.slf4j.Logger; @@ -52,21 +52,22 @@ // 2. init filestore FileStore restore = new FileStore(source, MAX_FILE_SIZE, false); + SegmentWriter writer = restore.getTracker().getWriter(); try { SegmentNodeState state = restore.getHead(); - restore(state.getChildNode("root"), store); + restore(state.getChildNode("root"), store, writer); } finally { restore.close(); } } - public static void restore(NodeState source, NodeStore store) - throws CommitFailedException { + public static void restore(NodeState source, NodeStore store, + SegmentWriter writer) throws CommitFailedException { long s = System.currentTimeMillis(); - NodeState after = store.getRoot(); - NodeBuilder builder = after.builder(); - source.compareAgainstBaseState(after, new ApplyDiff(builder)); - store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY); + NodeState current = store.getRoot(); + Compactor compactor = new Compactor(writer); + SegmentNodeState newhead = compactor.compact(current, source); + store.merge(newhead.builder(), EmptyHook.INSTANCE, CommitInfo.EMPTY); log.debug("Restore finished in {} ms.", System.currentTimeMillis() - s); }