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 md...@apache.org on 2016/01/18 12:03:38 UTC

svn commit: r1725230 - /jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionAndCleanupIT.java

Author: mduerig
Date: Mon Jan 18 11:03:38 2016
New Revision: 1725230

URL: http://svn.apache.org/viewvc?rev=1725230&view=rev
Log:
OAK-3348: Cross gc sessions might introduce references to pre-compacted segments
More aggressive test

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

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionAndCleanupIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionAndCleanupIT.java?rev=1725230&r1=1725229&r2=1725230&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionAndCleanupIT.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionAndCleanupIT.java Mon Jan 18 11:03:38 2016
@@ -457,33 +457,39 @@ public class CompactionAndCleanupIT {
 
             try {
                 // add some content
-                NodeBuilder root = nodeStore.getRoot().builder();
-                root.setChildNode("test").setProperty("blob", createBlob(nodeStore, 1024 * 1024));
-                nodeStore.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+                NodeBuilder preGCBuilder = nodeStore.getRoot().builder();
+                preGCBuilder.setChildNode("test").setProperty("blob", createBlob(nodeStore, 1024 * 1024));
+                nodeStore.merge(preGCBuilder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
                 // remove it again so we have something to gc
-                root = nodeStore.getRoot().builder();
-                root.getChildNode("test").remove();
-                nodeStore.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+                preGCBuilder = nodeStore.getRoot().builder();
+                preGCBuilder.getChildNode("test").remove();
+                nodeStore.merge(preGCBuilder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
                 // with a new builder simulate exceeding the update limit.
                 // This will cause changes to be pre-written to segments
-                root = nodeStore.getRoot().builder();
+                preGCBuilder = nodeStore.getRoot().builder();
+                preGCBuilder.setChildNode("test").setChildNode("a").setChildNode("b").setProperty("foo", "bar");
                 for (int k = 0; k < getInteger("update.limit", 10000); k += 2) {
-                    root.setChildNode("test").remove();
+                    preGCBuilder.setChildNode("dummy").remove();
                 }
-                root.setChildNode("test");
 
                 // case 1: merge above changes before compact
                 if ("merge-before-compact".equals(ref)) {
-                    nodeStore.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+                    NodeBuilder builder = nodeStore.getRoot().builder();
+                    builder.setChildNode("n");
+                    nodeStore.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+                    nodeStore.merge(preGCBuilder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
                 }
 
                 fileStore.compact();
 
                 // case 2: merge above changes after compact
                 if ("merge-after-compact".equals(ref)) {
-                    nodeStore.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+                    NodeBuilder builder = nodeStore.getRoot().builder();
+                    builder.setChildNode("n");
+                    nodeStore.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+                    nodeStore.merge(preGCBuilder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
                 }
             } finally {
                 fileStore.close();