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 mr...@apache.org on 2016/12/01 11:29:04 UTC
svn commit: r1772172 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/document/
test/java/org/apache/jackrabbit/oak/plugins/document/
Author: mreutegg
Date: Thu Dec 1 11:29:03 2016
New Revision: 1772172
URL: http://svn.apache.org/viewvc?rev=1772172&view=rev
Log:
OAK-5205: Lucene index causes many split documents
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitOperations.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CollisionWithSplitTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentSplitTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/PreviousDocCacheTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/TestUtils.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorIT.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java?rev=1772172&r1=1772171&r2=1772172&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java Thu Dec 1 11:29:03 2016
@@ -392,14 +392,10 @@ public final class DocumentNodeStore
* apply method will throw an IllegalArgumentException if the String is
* malformed.
*/
- private final Predicate<String> isBinary = new Predicate<String>() {
+ private final Function<String, Long> binarySize = new Function<String, Long>() {
@Override
- public boolean apply(@Nullable String input) {
- if (input == null) {
- return false;
- }
- return new DocumentPropertyState(DocumentNodeStore.this,
- "p", input).getType().tag() == PropertyType.BINARY;
+ public Long apply(@Nullable String input) {
+ return getBinarySize(input);
}
};
@@ -2065,7 +2061,7 @@ public final class DocumentNodeStore
if (doc == null) {
continue;
}
- for (UpdateOp op : doc.split(this, head, isBinary)) {
+ for (UpdateOp op : doc.split(this, head, binarySize)) {
NodeDocument before = null;
if (!op.isNew() ||
!store.create(Collection.NODES, Collections.singletonList(op))) {
@@ -2110,6 +2106,33 @@ public final class DocumentNodeStore
//-----------------------------< internal >---------------------------------
+ /**
+ * Returns the binary size of a property value represented as a JSON or
+ * {@code -1} if the property is not of type binary.
+ *
+ * @param json the property value.
+ * @return the size of the referenced binary value(s); otherwise {@code -1}.
+ */
+ private long getBinarySize(@Nullable String json) {
+ if (json == null) {
+ return -1;
+ }
+ PropertyState p = new DocumentPropertyState(
+ DocumentNodeStore.this, "p", json);
+ if (p.getType().tag() != PropertyType.BINARY) {
+ return -1;
+ }
+ long size = 0;
+ if (p.isArray()) {
+ for (int i = 0; i < p.count(); i++) {
+ size += p.size(i);
+ }
+ } else {
+ size = p.size();
+ }
+ return size;
+ }
+
private JournalEntry newJournalEntry() {
return new JournalEntry(store, true);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java?rev=1772172&r1=1772171&r2=1772172&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java Thu Dec 1 11:29:03 2016
@@ -1205,17 +1205,16 @@ public final class NodeDocument extends
* @param context the revision context.
* @param head the head revision before this document was retrieved from
* the document store.
- * @param isBinaryValue a predicate that returns {@code true} if the given
- * String value is considered a binary; {@code false}
- * otherwise.
+ * @param binarySize a function that returns the binary size of the given
+ * JSON property value String.
* @return the split operations.
*/
@Nonnull
public Iterable<UpdateOp> split(@Nonnull RevisionContext context,
@Nonnull RevisionVector head,
- @Nonnull Predicate<String> isBinaryValue) {
+ @Nonnull Function<String, Long> binarySize) {
return SplitOperations.forDocument(this, context, head,
- isBinaryValue, NUM_REVS_THRESHOLD);
+ binarySize, NUM_REVS_THRESHOLD);
}
/**
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitOperations.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitOperations.java?rev=1772172&r1=1772171&r2=1772172&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitOperations.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitOperations.java Thu Dec 1 11:29:03 2016
@@ -35,6 +35,7 @@ import org.apache.jackrabbit.oak.plugins
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
@@ -44,6 +45,7 @@ import com.google.common.collect.Sets;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.Iterables.any;
+import static com.google.common.collect.Iterables.transform;
import static com.google.common.collect.Sets.filter;
import static org.apache.jackrabbit.oak.plugins.document.NodeDocument.COMMIT_ROOT;
import static org.apache.jackrabbit.oak.plugins.document.NodeDocument.DOC_SIZE_THRESHOLD;
@@ -66,6 +68,13 @@ class SplitOperations {
private static final Logger LOG = LoggerFactory.getLogger(SplitOperations.class);
private static final int GARBAGE_LIMIT = Integer.getInteger("oak.documentMK.garbage.limit", 1000);
+ private static final Predicate<Long> BINARY_FOR_SPLIT_THRESHOLD = new Predicate<Long>() {
+ @Override
+ public boolean apply(Long input) {
+ // only force trigger split for binaries bigger than 4k
+ return input > 4096;
+ }
+ };
private static final DocumentStore STORE = new MemoryDocumentStore();
private final NodeDocument doc;
@@ -73,7 +82,7 @@ class SplitOperations {
private final String id;
private final Revision headRevision;
private final RevisionContext context;
- private final Predicate<String> isBinaryValue;
+ private final Function<String, Long> binarySize;
private final int numRevsThreshold;
private Revision high;
private Revision low;
@@ -92,11 +101,11 @@ class SplitOperations {
private SplitOperations(@Nonnull final NodeDocument doc,
@Nonnull final RevisionContext context,
@Nonnull final RevisionVector headRev,
- @Nonnull final Predicate<String> isBinaryValue,
+ @Nonnull final Function<String, Long> binarySize,
int numRevsThreshold) {
this.doc = checkNotNull(doc);
this.context = checkNotNull(context);
- this.isBinaryValue = checkNotNull(isBinaryValue);
+ this.binarySize = checkNotNull(binarySize);
this.path = doc.getPath();
this.id = doc.getId();
this.headRevision = checkNotNull(headRev).getRevision(context.getClusterId());
@@ -123,9 +132,8 @@ class SplitOperations {
* @param context the revision context.
* @param headRevision the head revision before the document was retrieved
* from the document store.
- * @param isBinaryValue a predicate that returns {@code true} if the given
- * String value is considered a binary; {@code false}
- * otherwise.
+ * @param binarySize a function that returns the binary size of the given
+ * JSON property value String.
* @param numRevsThreshold only split off at least this number of revisions.
* @return list of update operations. An empty list indicates the document
* does not require a split.
@@ -136,14 +144,14 @@ class SplitOperations {
static List<UpdateOp> forDocument(@Nonnull NodeDocument doc,
@Nonnull RevisionContext context,
@Nonnull RevisionVector headRevision,
- @Nonnull Predicate<String> isBinaryValue,
+ @Nonnull Function<String, Long> binarySize,
int numRevsThreshold) {
if (doc.isSplitDocument()) {
throw new IllegalArgumentException(
"Not a main document: " + doc.getId());
}
return new SplitOperations(doc, context, headRevision,
- isBinaryValue, numRevsThreshold).create();
+ binarySize, numRevsThreshold).create();
}
@@ -211,7 +219,7 @@ class SplitOperations {
Revision r = splitMap.lastKey();
splitMap.remove(r);
splitRevs.addAll(splitMap.keySet());
- hasBinaryToSplit |= hasBinaryProperty(splitMap.values())
+ hasBinaryToSplit |= hasBinaryPropertyForSplit(splitMap.values())
&& nodeExistsAtHeadRevision.get();
mostRecentRevs.add(r);
}
@@ -225,8 +233,8 @@ class SplitOperations {
}
}
- private boolean hasBinaryProperty(Iterable<String> values) {
- return doc.hasBinary() && any(values, isBinaryValue);
+ private boolean hasBinaryPropertyForSplit(Iterable<String> values) {
+ return doc.hasBinary() && any(transform(values, binarySize), BINARY_FOR_SPLIT_THRESHOLD);
}
/**
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CollisionWithSplitTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CollisionWithSplitTest.java?rev=1772172&r1=1772171&r2=1772172&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CollisionWithSplitTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CollisionWithSplitTest.java Thu Dec 1 11:29:03 2016
@@ -19,7 +19,6 @@ package org.apache.jackrabbit.oak.plugin
import java.util.Collections;
import java.util.List;
-import com.google.common.base.Predicates;
import com.mongodb.DB;
import org.apache.jackrabbit.oak.api.CommitFailedException;
@@ -32,8 +31,8 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import static com.google.common.base.Predicates.alwaysFalse;
import static org.apache.jackrabbit.oak.plugins.document.Collection.NODES;
+import static org.apache.jackrabbit.oak.plugins.document.TestUtils.NO_BINARY;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -94,7 +93,7 @@ public class CollisionWithSplitTest exte
DocumentStore store = ns1.getDocumentStore();
NodeDocument doc = Utils.getRootDocument(store);
List<UpdateOp> ops = SplitOperations.forDocument(doc, ns1,
- ns1.getHeadRevision(), Predicates.<String>alwaysFalse(), NUM_NODES);
+ ns1.getHeadRevision(), NO_BINARY, NUM_NODES);
assertFalse(ops.isEmpty());
for (UpdateOp op : ops) {
if (!op.isNew() ||
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentSplitTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentSplitTest.java?rev=1772172&r1=1772171&r2=1772172&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentSplitTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentSplitTest.java Thu Dec 1 11:29:03 2016
@@ -28,7 +28,6 @@ import java.util.TreeSet;
import javax.annotation.Nonnull;
import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterators;
@@ -57,6 +56,7 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.plugins.document.NodeDocument.NUM_REVS_THRESHOLD;
import static org.apache.jackrabbit.oak.plugins.document.NodeDocument.PREV_SPLIT_FACTOR;
import static org.apache.jackrabbit.oak.plugins.document.NodeDocument.SplitDocType;
+import static org.apache.jackrabbit.oak.plugins.document.TestUtils.NO_BINARY;
import static org.apache.jackrabbit.oak.plugins.document.UpdateOp.Operation.Type.REMOVE_MAP_ENTRY;
import static org.apache.jackrabbit.oak.plugins.document.UpdateOp.Operation.Type.SET_MAP_ENTRY;
import static org.apache.jackrabbit.oak.plugins.memory.BinaryPropertyState.binaryProperty;
@@ -541,7 +541,7 @@ public class DocumentSplitTest extends B
assertNotNull(doc);
List<UpdateOp> splitOps = Lists.newArrayList(doc.split(
mk.getNodeStore(), mk.getNodeStore().getHeadRevision(),
- Predicates.<String>alwaysFalse()));
+ NO_BINARY));
assertEquals(2, splitOps.size());
// first update op is for the new intermediate doc
op = splitOps.get(0);
@@ -598,7 +598,7 @@ public class DocumentSplitTest extends B
// the second most recent revision
List<UpdateOp> splitOps = Lists.newArrayList(doc.split(
mk.getNodeStore(), mk.getNodeStore().getHeadRevision(),
- Predicates.<String>alwaysFalse()));
+ NO_BINARY));
assertEquals(2, splitOps.size());
String prevId = Utils.getPreviousIdFor("/test", revs.get(revs.size() - 2), 0);
assertEquals(prevId, splitOps.get(0).getId());
@@ -676,7 +676,7 @@ public class DocumentSplitTest extends B
doc.put(NodeDocument.SD_TYPE, NodeDocument.SplitDocType.DEFAULT.type);
RevisionVector head = mk.getNodeStore().getHeadRevision();
SplitOperations.forDocument(doc, DummyRevisionContext.INSTANCE, head,
- Predicates.<String>alwaysFalse(), NUM_REVS_THRESHOLD);
+ NO_BINARY, NUM_REVS_THRESHOLD);
}
@Test
@@ -859,7 +859,7 @@ public class DocumentSplitTest extends B
RevisionVector head = ns.getHeadRevision();
NodeDocument doc = store.find(NODES, id);
List<UpdateOp> ops = SplitOperations.forDocument(doc, rc, head,
- Predicates.<String>alwaysFalse(), NUM_REVS_THRESHOLD);
+ NO_BINARY, NUM_REVS_THRESHOLD);
Set<Revision> removed = Sets.newHashSet();
Set<Revision> added = Sets.newHashSet();
for (UpdateOp op : ops) {
@@ -905,7 +905,8 @@ public class DocumentSplitTest extends B
builder.child("foo");
merge(ns, builder);
- PropertyState binary = binaryProperty("p", "value".getBytes());
+ // use more than 4k of binary data (OAK-5205)
+ PropertyState binary = binaryProperty("p", randomBytes(5 * 1024));
for (int i = 0; i < 10; i++) {
builder = ns.getRoot().builder();
@@ -926,7 +927,8 @@ public class DocumentSplitTest extends B
DocumentStore store = mk.getDocumentStore();
DocumentNodeStore ns = mk.getNodeStore();
NodeBuilder builder = ns.getRoot().builder();
- PropertyState binary = binaryProperty("p", "value".getBytes());
+ // use more than 4k of binary data (OAK-5205)
+ PropertyState binary = binaryProperty("p", randomBytes(5 * 1024));
builder.child("foo").setProperty(binary);
merge(ns, builder);
@@ -953,6 +955,30 @@ public class DocumentSplitTest extends B
assertEquals(1, prevDocs.size());
}
+ // OAK-5205
+ @Test
+ public void noSplitForSmallBinary() throws Exception {
+ DocumentStore store = mk.getDocumentStore();
+ DocumentNodeStore ns = mk.getNodeStore();
+ NodeBuilder builder = ns.getRoot().builder();
+ builder.child("foo");
+ merge(ns, builder);
+
+ for (int i = 0; i < 10; i++) {
+ builder = ns.getRoot().builder();
+ builder.child("foo").setProperty(
+ binaryProperty("p", ("value" + i).getBytes()));
+ merge(ns, builder);
+ ns.runBackgroundOperations();
+ }
+
+ NodeDocument foo = store.find(NODES, Utils.getIdFromPath("/foo"));
+ assertNotNull(foo);
+ List<NodeDocument> prevDocs = copyOf(foo.getAllPreviousDocs());
+ // must not create split documents for small binaries less 4k
+ assertEquals(0, prevDocs.size());
+ }
+
private static class TestRevisionContext implements RevisionContext {
private final RevisionContext rc;
@@ -1007,4 +1033,11 @@ public class DocumentSplitTest extends B
}
}
}
+
+ private byte[] randomBytes(int num) {
+ Random random = new Random(42);
+ byte[] data = new byte[num];
+ random.nextBytes(data);
+ return data;
+ }
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java?rev=1772172&r1=1772171&r2=1772172&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java Thu Dec 1 11:29:03 2016
@@ -24,7 +24,6 @@ import java.util.Map;
import java.util.Random;
import java.util.Set;
-import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import com.google.common.collect.Iterators;
import com.google.common.collect.Lists;
@@ -44,6 +43,7 @@ import org.junit.Test;
import static com.google.common.collect.Sets.newHashSet;
import static org.apache.jackrabbit.oak.plugins.document.Collection.NODES;
import static org.apache.jackrabbit.oak.plugins.document.NodeDocument.COLLISIONS;
+import static org.apache.jackrabbit.oak.plugins.document.TestUtils.NO_BINARY;
import static org.apache.jackrabbit.oak.plugins.document.util.Utils.getRootDocument;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -71,7 +71,7 @@ public class NodeDocumentTest {
}
UpdateUtils.applyChanges(doc, op);
RevisionVector head = DummyRevisionContext.INSTANCE.getHeadRevision();
- doc.split(DummyRevisionContext.INSTANCE, head, Predicates.<String>alwaysFalse());
+ doc.split(DummyRevisionContext.INSTANCE, head, NO_BINARY);
}
@Test
@@ -205,7 +205,7 @@ public class NodeDocumentTest {
RevisionVector head = ns.getHeadRevision();
for (UpdateOp op : SplitOperations.forDocument(
getRootDocument(store), ns, head,
- Predicates.<String>alwaysFalse(), 2)) {
+ NO_BINARY, 2)) {
store.createOrUpdate(NODES, op);
}
}
@@ -321,7 +321,7 @@ public class NodeDocumentTest {
NodeDocument doc = ns.getDocumentStore().find(
NODES, Utils.getIdFromPath("/test"));
for (UpdateOp op : SplitOperations.forDocument(
- doc, ns, head, Predicates.<String>alwaysFalse(), 2)) {
+ doc, ns, head, NO_BINARY, 2)) {
store.createOrUpdate(NODES, op);
}
}
@@ -572,7 +572,7 @@ public class NodeDocumentTest {
NodeDocument test = ns2.getDocumentStore().find(NODES, testId);
assertNotNull(test);
List<UpdateOp> ops = SplitOperations.forDocument(test, ns2,
- ns2.getHeadRevision(), Predicates.<String>alwaysFalse(), 2);
+ ns2.getHeadRevision(), NO_BINARY, 2);
assertEquals(2, ops.size());
for (UpdateOp op : ops) {
ns2.getDocumentStore().createOrUpdate(NODES, op);
@@ -588,7 +588,7 @@ public class NodeDocumentTest {
merge(ns1, b1);
test = ns1.getDocumentStore().find(NODES, testId);
for (UpdateOp op : SplitOperations.forDocument(test, ns1,
- ns1.getHeadRevision(), Predicates.<String>alwaysFalse(), 3)) {
+ ns1.getHeadRevision(), NO_BINARY, 3)) {
ns1.getDocumentStore().createOrUpdate(NODES, op);
}
headRevs.add(ns1.getHeadRevision());
@@ -710,7 +710,7 @@ public class NodeDocumentTest {
RevisionVector head = ns.getHeadRevision();
for (UpdateOp op : SplitOperations.forDocument(
getRootDocument(store), ns, head,
- Predicates.<String>alwaysFalse(), 2)) {
+ NO_BINARY, 2)) {
store.createOrUpdate(NODES, op);
}
}
@@ -736,7 +736,7 @@ public class NodeDocumentTest {
RevisionVector head = ns.getHeadRevision();
for (UpdateOp op : SplitOperations.forDocument(
getRootDocument(store), ns, head,
- Predicates.<String>alwaysFalse(), 2)) {
+ NO_BINARY, 2)) {
store.createOrUpdate(NODES, op);
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/PreviousDocCacheTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/PreviousDocCacheTest.java?rev=1772172&r1=1772171&r2=1772172&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/PreviousDocCacheTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/PreviousDocCacheTest.java Thu Dec 1 11:29:03 2016
@@ -16,7 +16,6 @@
*/
package org.apache.jackrabbit.oak.plugins.document;
-import com.google.common.base.Predicates;
import com.google.common.collect.Iterators;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.cache.CacheStats;
@@ -31,6 +30,7 @@ import java.util.Collections;
import java.util.List;
import static org.apache.jackrabbit.oak.plugins.document.Collection.NODES;
+import static org.apache.jackrabbit.oak.plugins.document.TestUtils.NO_BINARY;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -106,7 +106,7 @@ public class PreviousDocCacheTest extend
DocumentStore store = ns.getDocumentStore();
NodeDocument doc = Utils.getRootDocument(store);
List<UpdateOp> ops = SplitOperations.forDocument(doc,
- ns, ns.getHeadRevision(), Predicates.<String>alwaysFalse(),
+ ns, ns.getHeadRevision(), NO_BINARY,
splitDocLimit/2);
assertFalse(ops.isEmpty());
for (UpdateOp op : ops) {
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/TestUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/TestUtils.java?rev=1772172&r1=1772171&r2=1772172&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/TestUtils.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/TestUtils.java Thu Dec 1 11:29:03 2016
@@ -20,6 +20,8 @@ import java.util.Map;
import javax.annotation.Nullable;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
import com.google.common.base.Predicate;
import org.apache.jackrabbit.oak.api.CommitFailedException;
@@ -30,6 +32,8 @@ import org.apache.jackrabbit.oak.spi.sta
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import static com.google.common.base.Functions.compose;
+import static com.google.common.base.Functions.constant;
import static org.junit.Assert.fail;
public class TestUtils {
@@ -41,6 +45,8 @@ public class TestUtils {
}
};
+ public static final Function<String, Long> NO_BINARY = compose(constant(-1L), Functions.<String>identity());
+
/**
* Returns {@code true} if the given {@code update} performs a
* {@code _lastRev} update.
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorIT.java?rev=1772172&r1=1772171&r2=1772172&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorIT.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorIT.java Thu Dec 1 11:29:03 2016
@@ -39,10 +39,10 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.commons.FixturesHelper.Fixture.DOCUMENT_RDB;
import static org.apache.jackrabbit.oak.commons.FixturesHelper.getFixtures;
import static org.apache.jackrabbit.oak.plugins.document.Collection.NODES;
-import static org.apache.jackrabbit.oak.plugins.document.Document.ID;
import static org.apache.jackrabbit.oak.plugins.document.NodeDocument.NUM_REVS_THRESHOLD;
import static org.apache.jackrabbit.oak.plugins.document.NodeDocument.PREV_SPLIT_FACTOR;
import static org.apache.jackrabbit.oak.plugins.document.NodeDocument.SplitDocType;
+import static org.apache.jackrabbit.oak.plugins.document.TestUtils.NO_BINARY;
import static org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector.VersionGCStats;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -54,7 +54,6 @@ import static org.junit.Assume.assumeTru
import com.google.common.base.Function;
import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterators;
@@ -548,7 +547,7 @@ public class VersionGarbageCollectorIT {
RevisionVector head = store.getHeadRevision();
for (UpdateOp op : SplitOperations.forDocument(
ds.find(NODES, Utils.getIdFromPath("/foo")), store, head,
- Predicates.<String>alwaysFalse(), 2)) {
+ NO_BINARY, 2)) {
ds.createOrUpdate(NODES, op);
}
clock.waitUntil(clock.getTime() + TimeUnit.MINUTES.toMillis(1));