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 al...@apache.org on 2017/03/30 14:26:54 UTC

svn commit: r1789531 - /jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java

Author: alexparvulescu
Date: Thu Mar 30 14:26:54 2017
New Revision: 1789531

URL: http://svn.apache.org/viewvc?rev=1789531&view=rev
Log:
OAK-5971 Offline compaction corrupts the journal
 - added test


Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java?rev=1789531&r1=1789530&r2=1789531&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java Thu Mar 30 14:26:54 2017
@@ -67,6 +67,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.segment.file.FileStoreGCMonitor;
+import org.apache.jackrabbit.oak.segment.tool.Compact;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
@@ -505,6 +506,43 @@ public class CompactionAndCleanupIT {
         }
     }
 
+    /**
+     * Test for the Offline compaction tool (OAK-5971)
+     */
+    @Test
+    public void offlineCompactionTool() throws Exception {
+        SegmentGCOptions gcOptions = defaultGCOptions().setOffline();
+        ScheduledExecutorService executor = newSingleThreadScheduledExecutor();
+        FileStore fileStore = fileStoreBuilder(getFileStoreFolder())
+                .withMaxFileSize(1)
+                .withGCOptions(gcOptions)
+                .withStatisticsProvider(new DefaultStatisticsProvider(executor))
+                .build();
+        SegmentNodeStore nodeStore = SegmentNodeStoreBuilders.builder(fileStore).build();
+        try {
+            NodeBuilder root = nodeStore.getRoot().builder();
+            root.child("content");
+            nodeStore.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+            fileStore.flush();
+        } finally {
+            fileStore.close();
+        }
+
+        Compact.builder().withPath(getFileStoreFolder()).build().run();
+
+        fileStore = fileStoreBuilder(getFileStoreFolder())
+                .withMaxFileSize(1)
+                .withGCOptions(gcOptions)
+                .withStatisticsProvider(new DefaultStatisticsProvider(executor))
+                .build();
+        nodeStore = SegmentNodeStoreBuilders.builder(fileStore).build();
+        try {
+            assertTrue(nodeStore.getRoot().hasChildNode("content"));
+        } finally {
+            fileStore.close();
+        }
+     }
+
     private static void assertSize(String info, long size, long lower, long upper) {
         log.debug("File Store {} size {}, expected in interval [{},{}]",
                 info, size, lower, upper);