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
*/