Author: mreutegg
Date: Tue Jul 17 12:59:02 2018
New Revision: 1836112
URL: http://svn.apache.org/viewvc?rev=1836112&view=rev
Log:
OAK-7628: Prevent commits after lease end
Modified:
jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreTrackerGCTest.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentRootBuilder.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalGCTest.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/ResurrectNodeAfterRevisionGCTest.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCTest.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCDeletionTest.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCQueryTest.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCWithSplitTest.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorIT.java
Modified:
jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreTrackerGCTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreTrackerGCTest.java?rev=1836112&r1=1836111&r2=1836112&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreTrackerGCTest.java
(original)
+++
jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreTrackerGCTest.java
Tue Jul 17 12:59:02 2018
@@ -42,6 +42,7 @@ import org.apache.jackrabbit.oak.plugins
import
org.apache.jackrabbit.oak.plugins.document.DocumentBlobReferenceRetriever;
import org.apache.jackrabbit.oak.plugins.document.DocumentMKBuilderProvider;
import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
+import org.apache.jackrabbit.oak.plugins.document.LeaseCheckMode;
import org.apache.jackrabbit.oak.plugins.document.TestUtils;
import org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector;
import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore;
@@ -624,6 +625,7 @@ public class DataStoreTrackerGCTest {
nodeStore = builderProvider.newBuilder()
.setClusterId(clusterId)
.clock(clock)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setAsyncDelay(0)
.setDocumentStore(store)
.setBlobStore(blobStore)
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java?rev=1836112&r1=1836111&r2=1836112&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
Tue Jul 17 12:59:02 2018
@@ -1960,7 +1960,18 @@ public final class DocumentNodeStore
if (simpleRevisionCounter != null) {
return new Revision(simpleRevisionCounter.getAndIncrement(), 0,
clusterId);
}
- return Revision.newRevision(clusterId);
+ Revision r = Revision.newRevision(clusterId);
+ if (clusterNodeInfo.getLeaseCheckMode() == LeaseCheckMode.STRICT) {
+ // verify revision timestamp is within lease period
+ long leaseEnd = clusterNodeInfo.getLeaseEndTime();
+ if (r.getTimestamp() >= leaseEnd) {
+ String msg = String.format("Cannot use new revision %s " +
+ "with timestamp %s >= lease end %s",
+ r, r.getTimestamp(), leaseEnd);
+ throw new DocumentStoreException(msg);
+ }
+ }
+ return r;
}
@Override
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentRootBuilder.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentRootBuilder.java?rev=1836112&r1=1836111&r2=1836112&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentRootBuilder.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentRootBuilder.java
Tue Jul 17 12:59:02 2018
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.oak.plugins.document;
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.oak.api.CommitFailedException.OAK;
import java.io.IOException;
import java.io.InputStream;
@@ -157,7 +158,14 @@ class DocumentRootBuilder extends Abstra
* Merge all changes tracked in this builder into the underlying store.
*/
NodeState merge(CommitHook hook, CommitInfo info) throws
CommitFailedException {
- purge();
+ try {
+ // we need to throw a CommitFailedException if purge fails
+ // here with a DocumentStoreException
+ purge();
+ } catch (DocumentStoreException e) {
+ String msg = "Merge failed to purge changes: " + e.getMessage();
+ throw new CommitFailedException(OAK, 1, msg, e);
+ }
boolean success = false;
try {
branch.merge(hook, info);
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java?rev=1836112&r1=1836111&r2=1836112&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
Tue Jul 17 12:59:02 2018
@@ -33,6 +33,7 @@ import static org.apache.jackrabbit.oak.
import static
org.apache.jackrabbit.oak.plugins.document.util.Utils.isCommitted;
import static org.hamcrest.CoreMatchers.everyItem;
import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.greaterThan;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -135,11 +136,13 @@ public class DocumentNodeStoreTest {
@AfterClass
public static void resetClock() {
Revision.resetClockToDefault();
+ ClusterNodeInfo.resetClockToDefault();
}
@Before
public void setDefaultClock() {
Revision.resetClockToDefault();
+ ClusterNodeInfo.resetClockToDefault();
}
// OAK-1254
@@ -1665,10 +1668,12 @@ public class DocumentNodeStoreTest {
MemoryDocumentStore store = new MemoryDocumentStore();
DocumentNodeStore ns1 = builderProvider.newBuilder()
.setAsyncDelay(0).clock(clock)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setDocumentStore(store)
.setClusterId(1).getNodeStore();
DocumentNodeStore ns2 = builderProvider.newBuilder()
.setAsyncDelay(0).clock(clock)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setDocumentStore(store)
.setClusterId(2).getNodeStore();
@@ -2212,6 +2217,7 @@ public class DocumentNodeStoreTest {
}
};
DocumentNodeStore ns = builderProvider.newBuilder().clock(clock)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setDocumentStore(ds).setAsyncDelay(0).getNodeStore();
NodeBuilder builder = ns.getRoot().builder();
@@ -3268,6 +3274,7 @@ public class DocumentNodeStoreTest {
Revision.setClock(clock);
DocumentNodeStore ns = builderProvider.newBuilder().disableBranches()
.setUpdateLimit(100).clock(clock)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setAsyncDelay(0).getNodeStore();
RevisionVector head = ns.getHeadRevision();
NodeBuilder b = ns.getRoot().builder();
@@ -3471,6 +3478,7 @@ public class DocumentNodeStoreTest {
Revision.setClock(clock);
MemoryDocumentStore docStore = new MemoryDocumentStore();
DocumentNodeStore ns = builderProvider.newBuilder()
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setDocumentStore(docStore).setUpdateLimit(100)
.setJournalGCMaxAge(TimeUnit.HOURS.toMillis(6))
.setBundlingDisabled(true)
@@ -3525,6 +3533,7 @@ public class DocumentNodeStoreTest {
Revision.setClock(clock);
MemoryDocumentStore docStore = new MemoryDocumentStore();
DocumentNodeStore ns = builderProvider.newBuilder()
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setDocumentStore(docStore).setUpdateLimit(100)
.setJournalGCMaxAge(TimeUnit.HOURS.toMillis(6))
.setAsyncDelay(0).clock(clock).getNodeStore();
@@ -3695,6 +3704,79 @@ public class DocumentNodeStoreTest {
assertTrue(ns.getRoot().hasChildNode("bar"));
}
+ @Test
+ public void preventCommitPastLeaseEnd() throws Exception {
+ Clock clock = new Clock.Virtual();
+ Revision.setClock(clock);
+ ClusterNodeInfo.setClock(clock);
+ DocumentNodeStore ns = builderProvider.newBuilder().setAsyncDelay(0)
+ .clock(clock).build();
+ NodeBuilder builder = ns.getRoot().builder();
+ builder.child("foo");
+ merge(ns, builder);
+ // wait until lease expires
+ clock.waitUntil(clock.getTime() +
ClusterNodeInfo.DEFAULT_LEASE_DURATION_MILLIS);
+ // now a merge must fail
+ builder = ns.getRoot().builder();
+ builder.child("bar");
+ try {
+ merge(ns, builder);
+ fail("must fail with CommitFailedException");
+ } catch (CommitFailedException e) {
+ assertThat(e.getMessage(), containsString("lease end"));
+ }
+ }
+
+ @Test
+ public void preventBranchCommitPastLeaseEnd() throws Exception {
+ Clock clock = new Clock.Virtual();
+ Revision.setClock(clock);
+ ClusterNodeInfo.setClock(clock);
+ DocumentNodeStore ns = builderProvider.newBuilder().setAsyncDelay(0)
+ .setUpdateLimit(10).clock(clock).build();
+ NodeBuilder builder = ns.getRoot().builder();
+ builder.child("foo");
+ merge(ns, builder);
+ // wait until lease expires
+ clock.waitUntil(clock.getTime() +
ClusterNodeInfo.DEFAULT_LEASE_DURATION_MILLIS);
+ // now a branch commit must fail
+ builder = ns.getRoot().builder();
+ try {
+ for (int i = 0; i < 30; i++) {
+ builder.child("bar-" + i);
+ }
+ fail("must fail with DocumentStoreException");
+ } catch (DocumentStoreException e) {
+ assertThat(e.getMessage(), containsString("failed to update the
lease"));
+ }
+ }
+
+ @Test
+ public void preventBranchMergePastLeaseEnd() throws Exception {
+ Clock clock = new Clock.Virtual();
+ Revision.setClock(clock);
+ ClusterNodeInfo.setClock(clock);
+ DocumentNodeStore ns = builderProvider.newBuilder().setAsyncDelay(0)
+ .setUpdateLimit(10).clock(clock).build();
+ NodeBuilder builder = ns.getRoot().builder();
+ builder.child("foo");
+ merge(ns, builder);
+ // start a branch
+ builder = ns.getRoot().builder();
+ for (int i = 0; i < 30; i++) {
+ builder.child("bar-" + i);
+ }
+ // wait until lease expires
+ clock.waitUntil(clock.getTime() +
ClusterNodeInfo.DEFAULT_LEASE_DURATION_MILLIS);
+ // now a branch merge must fail
+ try {
+ merge(ns, builder);
+ fail("must fail with CommitFailedException");
+ } catch (CommitFailedException e) {
+ assertThat(e.getMessage(), containsString("lease end"));
+ }
+ }
+
private void getChildNodeCountTest(int numChildren,
Iterable<Long> maxValues,
Iterable<Long> expectedValues)
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalGCTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalGCTest.java?rev=1836112&r1=1836111&r2=1836112&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalGCTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalGCTest.java
Tue Jul 17 12:59:02 2018
@@ -124,6 +124,7 @@ public class JournalGCTest {
DocumentNodeStore ns = builderProvider.newBuilder()
.setDocumentStore(docStore).setUpdateLimit(100)
.setJournalGCMaxAge(TimeUnit.HOURS.toMillis(1))
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.clock(c).setAsyncDelay(0).getNodeStore();
NodeBuilder builder = ns.getRoot().builder();
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/ResurrectNodeAfterRevisionGCTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/ResurrectNodeAfterRevisionGCTest.java?rev=1836112&r1=1836111&r2=1836112&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/ResurrectNodeAfterRevisionGCTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/ResurrectNodeAfterRevisionGCTest.java
Tue Jul 17 12:59:02 2018
@@ -66,8 +66,10 @@ public class ResurrectNodeAfterRevisionG
c.waitUntil(System.currentTimeMillis());
Revision.setClock(c);
ns1 = new DocumentMK.Builder().setAsyncDelay(0).clock(c)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setClusterId(1).setDocumentStore(wrap(ds1)).getNodeStore();
ns2 = new DocumentMK.Builder().setAsyncDelay(0).clock(c)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setClusterId(2).setDocumentStore(wrap(ds2)).getNodeStore();
}
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCTest.java?rev=1836112&r1=1836111&r2=1836112&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCTest.java
Tue Jul 17 12:59:02 2018
@@ -61,6 +61,7 @@ public class RevisionGCTest {
Revision.setClock(clock);
store = new DocumentMK.Builder()
.clock(clock)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setDocumentStore(fixture.createDocumentStore())
.setAsyncDelay(0)
.getNodeStore();
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCDeletionTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCDeletionTest.java?rev=1836112&r1=1836111&r2=1836112&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCDeletionTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCDeletionTest.java
Tue Jul 17 12:59:02 2018
@@ -71,7 +71,7 @@ public class VersionGCDeletionTest {
}
@After
- public void tearDown() throws Exception {
+ public void tearDown() {
if (store != null) {
store.dispose();
}
@@ -83,6 +83,7 @@ public class VersionGCDeletionTest {
TestDocumentStore ts = new TestDocumentStore();
store = new DocumentMK.Builder()
.clock(clock)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setDocumentStore(ts)
.setAsyncDelay(0)
.getNodeStore();
@@ -127,6 +128,7 @@ public class VersionGCDeletionTest {
TestDocumentStore ts = new TestDocumentStore();
store = new DocumentMK.Builder()
.clock(clock)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setDocumentStore(ts)
.setAsyncDelay(0)
.getNodeStore();
@@ -175,6 +177,7 @@ public class VersionGCDeletionTest {
DocumentStore ts = new MemoryDocumentStore();
store = new DocumentMK.Builder()
.clock(clock)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setDocumentStore(new MemoryDocumentStore())
.setAsyncDelay(0)
.getNodeStore();
@@ -220,7 +223,8 @@ public class VersionGCDeletionTest {
DocumentStore ts = new MemoryDocumentStore();
store = new DocumentMK.Builder()
.clock(clock)
- .setDocumentStore(new MemoryDocumentStore())
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
+ .setDocumentStore(ts)
.setAsyncDelay(0)
.getNodeStore();
@@ -257,6 +261,7 @@ public class VersionGCDeletionTest {
DocumentStore ts = new MemoryDocumentStore();
store = new DocumentMK.Builder()
.clock(clock)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setDocumentStore(ts)
.setAsyncDelay(0)
.getNodeStore();
@@ -327,6 +332,7 @@ public class VersionGCDeletionTest {
}
};
store = new DocumentMK.Builder().clock(clock)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setDocumentStore(ms).setAsyncDelay(0).getNodeStore();
// create nodes
@@ -365,7 +371,7 @@ public class VersionGCDeletionTest {
Future<List<String>> f = newSingleThreadExecutor().submit(
new Callable<List<String>>() {
@Override
- public List<String> call() throws Exception {
+ public List<String> call() {
List<String> names = Lists.newArrayList();
NodeState n = store.getRoot().getChildNode("node");
for (ChildNodeEntry entry : n.getChildNodeEntries()) {
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCQueryTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCQueryTest.java?rev=1836112&r1=1836111&r2=1836112&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCQueryTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCQueryTest.java
Tue Jul 17 12:59:02 2018
@@ -71,6 +71,7 @@ public class VersionGCQueryTest {
}
};
ns = provider.newBuilder().setDocumentStore(store)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setAsyncDelay(0).clock(clock).getNodeStore();
}
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCWithSplitTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCWithSplitTest.java?rev=1836112&r1=1836111&r2=1836112&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCWithSplitTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCWithSplitTest.java
Tue Jul 17 12:59:02 2018
@@ -24,8 +24,6 @@ import java.util.Map;
import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicReference;
-import javax.annotation.Nonnull;
-
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -73,7 +71,7 @@ public class VersionGCWithSplitTest {
this.fixture = fixture;
}
- @Parameterized.Parameters
+ @Parameterized.Parameters(name = "{0}")
public static java.util.Collection<Object[]> fixtures() throws IOException
{
List<Object[]> fixtures = Lists.newArrayList();
fixtures.add(new Object[] {new DocumentStoreFixture.MemoryFixture()});
@@ -93,6 +91,7 @@ public class VersionGCWithSplitTest {
clock = new Clock.Virtual();
store = new DocumentMK.Builder()
.clock(clock)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.setDocumentStore(testStore)
.setAsyncDelay(0)
.getNodeStore();
@@ -208,7 +207,6 @@ public class VersionGCWithSplitTest {
this.docStore = base;
}
- @Nonnull
@Override
public <T extends Document> T createOrUpdate(final Collection<T>
collection,
final UpdateOp update) {
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorIT.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorIT.java?rev=1836112&r1=1836111&r2=1836112&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorIT.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorIT.java
Tue Jul 17 12:59:02 2018
@@ -614,6 +614,7 @@ public class VersionGarbageCollectorIT {
// run gc on another document node store
DocumentStore ds2 = fixture.createDocumentStore(2);
DocumentNodeStore ns2 = new DocumentMK.Builder().setClusterId(2)
+ .setLeaseCheckMode(LeaseCheckMode.LENIENT)
.clock(clock).setAsyncDelay(0).setDocumentStore(ds2).getNodeStore();
try {
VersionGarbageCollector gc = ns2.getVersionGarbageCollector();