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();


Reply via email to