Author: mduerig
Date: Tue Jul  7 09:47:57 2015
New Revision: 1689620

URL: http://svn.apache.org/r1689620
Log:
OAK-2849: Improve revision gc on SegmentMK
SegmentCompactionIT improvement: make the number of child nodes and properties 
configurable

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

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCompactionIT.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCompactionIT.java?rev=1689620&r1=1689619&r2=1689620&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCompactionIT.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCompactionIT.java
 Tue Jul  7 09:47:57 2015
@@ -62,6 +62,7 @@ import javax.management.MalformedObjectN
 import javax.management.NotCompliantMBeanException;
 import javax.management.ObjectName;
 
+import com.google.common.base.Predicate;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListenableScheduledFuture;
@@ -139,6 +140,8 @@ public class SegmentCompactionIT {
     private volatile int maxBlobSize = 1000000;
     private volatile int maxStringSize = 10000;
     private volatile int maxReferences = 10;
+    private volatile int maxNodeCount = 1000;
+    private volatile int maxPropertyCount = 1000;
     private volatile int compactionInterval = 1;
     private volatile boolean stopping;
     private volatile Reference rootReference;
@@ -401,6 +404,14 @@ public class SegmentCompactionIT {
             return childBuilder;
         }
 
+        private NodeBuilder chooseRandomNode(NodeBuilder nodeBuilder, 
Predicate<NodeBuilder> predicate) {
+            NodeBuilder childBuilder = chooseRandomNode(nodeBuilder);
+            while (!predicate.apply(childBuilder)) {
+                childBuilder = randomStep(nodeBuilder, nodeBuilder = 
childBuilder);
+            }
+            return childBuilder;
+        }
+
         private NodeBuilder randomStep(NodeBuilder parent, NodeBuilder node) {
             int count = (int) node.getChildNodeCount(Long.MAX_VALUE);
             int k = rnd.nextInt(count + 1);
@@ -421,23 +432,34 @@ public class SegmentCompactionIT {
         }
 
         private void addRandomNode(NodeBuilder nodeBuilder) {
-            if (nodeBuilder.getChildNodeCount(1000) < 1000) {
-                chooseRandomNode(nodeBuilder).setChildNode('N' + itemPrefix + 
rnd.nextInt(1000));
-            }
+            chooseRandomNode(nodeBuilder, new Predicate<NodeBuilder>() {
+                @Override
+                public boolean apply(NodeBuilder builder) {
+                    return builder.getChildNodeCount(maxNodeCount) < 
maxNodeCount;
+                }
+            }).setChildNode('N' + itemPrefix + rnd.nextInt(maxNodeCount));
         }
 
         private void addRandomValue(NodeBuilder nodeBuilder) {
-            if (nodeBuilder.getPropertyCount() < 1000) {
-                chooseRandomNode(nodeBuilder).setProperty('P' + itemPrefix + 
rnd.nextInt(1000),
-                        randomAlphabetic(rnd.nextInt(maxStringSize)));
-            }
+            chooseRandomNode(nodeBuilder, new Predicate<NodeBuilder>() {
+                @Override
+                public boolean apply(NodeBuilder builder) {
+                    return builder.getPropertyCount() < maxPropertyCount;
+                }
+            })
+            .setProperty('P' + itemPrefix + rnd.nextInt(maxPropertyCount),
+                    randomAlphabetic(rnd.nextInt(maxStringSize)));
         }
 
         private void addRandomBlob(NodeStore nodeStore, NodeBuilder 
nodeBuilder) throws IOException {
-            if (nodeBuilder.getPropertyCount() < 1000) {
-                chooseRandomNode(nodeBuilder).setProperty('B' + itemPrefix + 
rnd.nextInt(1000),
-                        createBlob(nodeStore, rnd.nextInt(maxBlobSize)));
-            }
+            chooseRandomNode(nodeBuilder, new Predicate<NodeBuilder>() {
+                @Override
+                public boolean apply(NodeBuilder builder) {
+                    return builder.getPropertyCount() < maxPropertyCount;
+                }
+            })
+            .setProperty('B' + itemPrefix + rnd.nextInt(maxPropertyCount),
+                    createBlob(nodeStore, rnd.nextInt(maxBlobSize)));
         }
 
         private Blob createBlob(NodeStore nodeStore, int size) throws 
IOException {
@@ -727,6 +749,28 @@ public class SegmentCompactionIT {
         }
 
         @Override
+        public void setMaxNodeCount(int count) {
+            checkArgument(count >= 0);
+            maxNodeCount = count;
+        }
+
+        @Override
+        public int getMaxNodeCount() {
+            return maxNodeCount;
+        }
+
+        @Override
+        public void setMaxPropertyCount(int count) {
+            checkArgument(count >= 0);
+            maxPropertyCount = count;
+        }
+
+        @Override
+        public int getMaxPropertyCount() {
+            return maxPropertyCount;
+        }
+
+        @Override
         public void setRootReference(boolean set) {
             if (set && rootReference == null) {
                 rootReference = new Reference(nodeStore.getRoot());

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCompactionMBean.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCompactionMBean.java?rev=1689620&r1=1689619&r2=1689620&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCompactionMBean.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCompactionMBean.java
 Tue Jul  7 09:47:57 2015
@@ -140,6 +140,28 @@ public interface SegmentCompactionMBean
     int getMaxReferences();
 
     /**
+     * Set the maximal number of child node of a node
+     * @param count  maximal number of child nodes
+     */
+    void setMaxNodeCount(int count);
+
+    /**
+     * @return  Maximal number of child nodes of a node
+     */
+    int getMaxNodeCount();
+
+    /**
+     * Set the maximal number of properties of a node
+     * @param count  maximal number of properties
+     */
+    void setMaxPropertyCount(int count);
+
+    /**
+     * @return  Maximal number of properties of a node
+     */
+    int getMaxPropertyCount();
+
+    /**
      * Add a reference to the current root or release a held reference.
      * @param set  add a reference if {@code true}, otherwise release any held 
reference
      */


Reply via email to