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 re...@apache.org on 2015/12/17 10:52:41 UTC
svn commit: r1720500 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/document/
test/java/org/apache/jackrabbit/oak/plugins/document/
test/java/org/apache/jackrabbit/oak/plugins/document/impl/
test/java/org/apache/ja...
Author: reschke
Date: Thu Dec 17 09:52:40 2015
New Revision: 1720500
URL: http://svn.apache.org/viewvc?rev=1720500&view=rev
Log:
OAK-3424: change ClusterNodeInfo to potentially wait for an abandoned cluster id to become available
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterConflictTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterInfoTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterJoinTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentConflictTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.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/JournalTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgentTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryTest.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/impl/DocumentMKConcurrentAddTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ClusterConflictTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/CollisionMarkerTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java?rev=1720500&r1=1720499&r2=1720500&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java Thu Dec 17 09:52:40 2015
@@ -374,7 +374,7 @@ public class ClusterNodeInfo {
int retries = 10;
for (int i = 0; i < retries; i++) {
- ClusterNodeInfo clusterNode = createInstance(store, machineId, instanceId, configuredClusterId);
+ ClusterNodeInfo clusterNode = createInstance(store, machineId, instanceId, configuredClusterId, i == 0);
String key = String.valueOf(clusterNode.id);
UpdateOp update = new UpdateOp(key, true);
update.set(ID, key);
@@ -409,7 +409,7 @@ public class ClusterNodeInfo {
}
private static ClusterNodeInfo createInstance(DocumentStore store, String machineId,
- String instanceId, int configuredClusterId) {
+ String instanceId, int configuredClusterId, boolean waitForLease) {
long now = getCurrentTime();
int clusterNodeId = 0;
@@ -447,16 +447,25 @@ public class ClusterNodeInfo {
}
Long leaseEnd = (Long) doc.get(LEASE_END_KEY);
+ String mId = "" + doc.get(MACHINE_ID_KEY);
+ String iId = "" + doc.get(INSTANCE_ID_KEY);
if (leaseEnd != null && leaseEnd > now) {
- // TODO wait for lease end, see OAK-3449
+ // wait if (a) instructed to, and (b) also the remaining time
+ // time is not much bigger than the lease interval (in which
+ // case something is very very wrong anyway)
+ if (waitForLease && (leaseEnd - now) < (DEFAULT_LEASE_DURATION_MILLIS + 5000) && mId.equals(machineId)
+ && iId.equals(instanceId)) {
+ boolean worthRetrying = waitForLeaseExpiry(store, doc, leaseEnd.longValue(), machineId, instanceId);
+ if (worthRetrying) {
+ return createInstance(store, machineId, instanceId, configuredClusterId, false);
+ }
+ }
+
reuseFailureReason = "leaseEnd " + leaseEnd + " > " + now + " - " + (leaseEnd - now) + "ms in the future";
continue;
}
- String mId = "" + doc.get(MACHINE_ID_KEY);
- String iId = "" + doc.get(INSTANCE_ID_KEY);
-
// remove entries with "random:" keys if not in use (no lease at all)
if (mId.startsWith(RANDOM_PREFIX) && leaseEnd == null) {
store.remove(Collection.CLUSTER_NODES, key);
@@ -506,6 +515,51 @@ public class ClusterNodeInfo {
RecoverLockState.NONE, prevLeaseEnd, newEntry);
}
+ private static boolean waitForLeaseExpiry(DocumentStore store, ClusterNodeInfoDocument cdoc, long leaseEnd, String machineId,
+ String instanceId) {
+ String key = cdoc.getId();
+ LOG.info("Found an existing possibly active cluster node info (" + key + ") for this instance: " + machineId + "/"
+ + instanceId + ", will try use it.");
+
+ // wait until lease expiry plus 2s
+ long waitUntil = leaseEnd + 2000;
+
+ while (getCurrentTime() < waitUntil) {
+ LOG.info("Waiting for cluster node " + key + "'s lease to expire: " + (waitUntil - getCurrentTime()) / 1000 + "s left");
+
+ try {
+ Thread.sleep(5000);
+ } catch (InterruptedException e) {
+ // ignored
+ }
+
+ try {
+ // check state of cluster node info
+ ClusterNodeInfoDocument reread = store.find(Collection.CLUSTER_NODES, key);
+ if (reread == null) {
+ LOG.info("Cluster node info " + key + ": gone; continueing.");
+ return true;
+ } else {
+ Long newLeaseEnd = (Long) reread.get(LEASE_END_KEY);
+ if (newLeaseEnd == null) {
+ LOG.info("Cluster node " + key + ": lease end information missing, aborting.");
+ return false;
+ } else {
+ if (newLeaseEnd.longValue() != leaseEnd) {
+ LOG.info("Cluster node " + key + " seems to be still active (lease end changed from " + leaseEnd
+ + " to " + newLeaseEnd + ", will not try to use it.");
+ return false;
+ }
+ }
+ }
+ } catch (DocumentStoreException ex) {
+ LOG.info("Error reading cluster node info for key " + key, ex);
+ return false;
+ }
+ }
+ return true;
+ }
+
public void performLeaseCheck() {
if (leaseCheckDisabled || !renewed) {
// if leaseCheckDisabled is set we never do the check, so return fast
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterConflictTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterConflictTest.java?rev=1720500&r1=1720499&r2=1720500&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterConflictTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterConflictTest.java Thu Dec 17 09:52:40 2015
@@ -57,17 +57,18 @@ public class ClusterConflictTest {
@Before
public void setUp() {
MemoryDocumentStore store = new MemoryDocumentStore();
- ns1 = newDocumentNodeStore(store);
- ns2 = newDocumentNodeStore(store);
+ ns1 = newDocumentNodeStore(store, 1);
+ ns2 = newDocumentNodeStore(store, 2);
}
- private DocumentNodeStore newDocumentNodeStore(DocumentStore store) {
+ private DocumentNodeStore newDocumentNodeStore(DocumentStore store, int clusterId) {
// use high async delay and run background ops manually
// asyncDelay set to zero prevents commits from suspending
return builderProvider.newBuilder()
.setAsyncDelay(60000)
.setDocumentStore(store)
.setLeaseCheck(false) // disabled for debugging purposes
+ .setClusterId(clusterId)
.getNodeStore();
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterInfoTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterInfoTest.java?rev=1720500&r1=1720499&r2=1720500&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterInfoTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterInfoTest.java Thu Dec 17 09:52:40 2015
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertTru
import java.util.List;
+import org.apache.jackrabbit.oak.plugins.document.ClusterNodeInfo.ClusterNodeState;
import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore;
import org.apache.jackrabbit.oak.stats.Clock;
import org.junit.After;
@@ -50,11 +51,13 @@ public class ClusterInfoTest {
setDocumentStore(mem).
setAsyncDelay(0).
setLeaseCheck(false).
+ setClusterId(1).
getNodeStore();
DocumentNodeStore ns2 = new DocumentMK.Builder().
setDocumentStore(mem).
setAsyncDelay(0).
setLeaseCheck(false).
+ setClusterId(2).
getNodeStore();
// Bring the current time forward to after the leaseTime which would have been
// updated in the DocumentNodeStore initialization.
@@ -140,6 +143,44 @@ public class ClusterInfoTest {
return doc.getLeaseEndTime();
}
+ @Test
+ public void useAbandoned() throws InterruptedException {
+
+ MemoryDocumentStore mem = new MemoryDocumentStore();
+
+ DocumentNodeStore ns1 = new DocumentMK.Builder().
+ setDocumentStore(mem).
+ setAsyncDelay(0).
+ setLeaseCheck(false).
+ getNodeStore();
+
+ DocumentStore ds = ns1.getDocumentStore();
+ int cid = ns1.getClusterId();
+
+ ClusterNodeInfoDocument cnid = ds.find(Collection.CLUSTER_NODES, "" + cid);
+ assertNotNull(cnid);
+ assertEquals(ClusterNodeState.ACTIVE.toString(), cnid.get(ClusterNodeInfo.STATE));
+ ns1.dispose();
+
+ long waitFor = 2000;
+ // modify record to indicate "active" with a lease end in the future
+ UpdateOp up = new UpdateOp("" + cid, false);
+ up.set(Document.ID, "" + cid);
+ up.set(ClusterNodeInfo.STATE, ClusterNodeState.ACTIVE.toString());
+ long now = System.currentTimeMillis();
+ up.set(ClusterNodeInfo.LEASE_END_KEY, now + waitFor);
+ ds.findAndUpdate(Collection.CLUSTER_NODES, up);
+
+ // try restart
+ ns1 = new DocumentMK.Builder().
+ setDocumentStore(mem).
+ setAsyncDelay(0).
+ setLeaseCheck(false).
+ getNodeStore();
+
+ assertEquals("should have re-used existing cluster id", cid, ns1.getClusterId());
+ }
+
@After
public void tearDown(){
ClusterNodeInfo.resetClockToDefault();
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterJoinTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterJoinTest.java?rev=1720500&r1=1720499&r2=1720500&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterJoinTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterJoinTest.java Thu Dec 17 09:52:40 2015
@@ -38,6 +38,7 @@ public class ClusterJoinTest extends Abs
DocumentMK mk2 = new DocumentMK.Builder().
setAsyncDelay(0).
setMongoDB(connectionFactory.getConnection().getDB()).
+ setClusterId(mk.getNodeStore().getClusterId() + 1).
open();
try {
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterTest.java?rev=1720500&r1=1720499&r2=1720500&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterTest.java Thu Dec 17 09:52:40 2015
@@ -164,14 +164,6 @@ public class ClusterTest {
}
@Test
- public void clusterNodeId() {
- DocumentMK mk1 = createMK(0);
- DocumentMK mk2 = createMK(0);
- assertEquals(1, mk1.getClusterInfo().getId());
- assertEquals(2, mk2.getClusterInfo().getId());
- }
-
- @Test
public void clusterBranchInVisibility() throws InterruptedException {
DocumentMK mk1 = createMK(1);
mk1.commit("/", "+\"regular\": {}", null, null);
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentConflictTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentConflictTest.java?rev=1720500&r1=1720499&r2=1720500&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentConflictTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentConflictTest.java Thu Dec 17 09:52:40 2015
@@ -57,13 +57,13 @@ public class ConcurrentConflictTest exte
public void initDocumentMK() {
logBuffer.setLength(0);
this.store = new MemoryDocumentStore();
- DocumentMK mk = openDocumentMK();
+ DocumentMK mk = openDocumentMK(1);
for (int i = 0; i < NUM_NODES; i++) {
mk.commit("/", "+\"node-" + i + "\":{\"value\":100}", null, null);
}
mk.dispose();
for (int i = 0; i < NUM_WRITERS; i++) {
- kernels.add(openDocumentMK());
+ kernels.add(openDocumentMK(i + 2));
}
}
@@ -77,8 +77,8 @@ public class ConcurrentConflictTest exte
kernels.clear();
}
- private DocumentMK openDocumentMK() {
- return new DocumentMK.Builder().setAsyncDelay(10).setDocumentStore(store).open();
+ private DocumentMK openDocumentMK(int clusterId) {
+ return new DocumentMK.Builder().setAsyncDelay(10).setDocumentStore(store).setClusterId(clusterId).open();
}
@Test
@@ -198,7 +198,7 @@ public class ConcurrentConflictTest exte
for (DocumentMK mk : kernels) {
mk.dispose();
}
- DocumentMK mk = openDocumentMK();
+ DocumentMK mk = openDocumentMK(1);
String rev = mk.getHeadRevision();
long sum = calculateSum(mk, rev);
log("Conflict rate: " + conflicts.get() +
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java?rev=1720500&r1=1720499&r2=1720500&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java Thu Dec 17 09:52:40 2015
@@ -675,9 +675,11 @@ public class DocumentNodeStoreTest {
public void updateClusterState() {
DocumentStore docStore = new MemoryDocumentStore();
DocumentNodeStore ns1 = builderProvider.newBuilder().setAsyncDelay(0)
- .setDocumentStore(docStore).getNodeStore();
+ .setClusterId(1).setDocumentStore(docStore)
+ .getNodeStore();
DocumentNodeStore ns2 = builderProvider.newBuilder().setAsyncDelay(0)
- .setDocumentStore(docStore).getNodeStore();
+ .setClusterId(2).setDocumentStore(docStore)
+ .getNodeStore();
ns1.updateClusterState();
ns2.updateClusterState();
@@ -742,7 +744,8 @@ public class DocumentNodeStoreTest {
DocumentNodeStore store1 = builderProvider.newBuilder()
.setDocumentStore(docStore)
- .setAsyncDelay(0).clock(clock).getNodeStore();
+ .setAsyncDelay(0).clock(clock).setClusterId(1)
+ .getNodeStore();
NodeBuilder builder = store1.getRoot().builder();
builder.child("test");
@@ -770,7 +773,8 @@ public class DocumentNodeStoreTest {
// start a second store
DocumentNodeStore store2 = builderProvider.newBuilder()
.setDocumentStore(docStore)
- .setAsyncDelay(0).clock(clock).getNodeStore();
+ .setAsyncDelay(0).clock(clock).setClusterId(2)
+ .getNodeStore();
// must see /test/node
assertTrue(store2.getRoot().getChildNode("test").getChildNode("node").exists());
}
@@ -1143,7 +1147,8 @@ public class DocumentNodeStoreTest {
c1.waitUntil(now);
Revision.setClock(c1);
DocumentNodeStore ns1 = builderProvider.newBuilder().clock(c1)
- .setDocumentStore(store).setAsyncDelay(0).getNodeStore();
+ .setDocumentStore(store).setAsyncDelay(0).setClusterId(1)
+ .getNodeStore();
NodeBuilder b1 = ns1.getRoot().builder();
b1.child("node");
merge(ns1, b1);
@@ -1157,7 +1162,8 @@ public class DocumentNodeStoreTest {
Revision.setClock(c2);
DocumentNodeStore ns2 = builderProvider.newBuilder().clock(c2)
- .setDocumentStore(store).setAsyncDelay(0).getNodeStore();
+ .setDocumentStore(store).setAsyncDelay(0).setClusterId(2)
+ .getNodeStore();
// ns2 sees /node
assertTrue(ns2.getRoot().hasChildNode("node"));
@@ -1538,7 +1544,8 @@ public class DocumentNodeStoreTest {
c1.waitUntil(now);
Revision.setClock(c1);
DocumentNodeStore ns1 = builderProvider.newBuilder().clock(c1)
- .setDocumentStore(store).setAsyncDelay(0).getNodeStore();
+ .setDocumentStore(store).setAsyncDelay(0)
+ .setClusterId(1).getNodeStore();
NodeBuilder b1 = ns1.getRoot().builder();
b1.child("node");
merge(ns1, b1);
@@ -1552,7 +1559,8 @@ public class DocumentNodeStoreTest {
Revision.setClock(c2);
DocumentNodeStore ns2 = builderProvider.newBuilder().clock(c2)
- .setDocumentStore(store).setAsyncDelay(0).getNodeStore();
+ .setDocumentStore(store).setAsyncDelay(0)
+ .setClusterId(2).getNodeStore();
// ns2 sees /node
assertTrue(ns2.getRoot().hasChildNode("node"));
@@ -1589,7 +1597,8 @@ public class DocumentNodeStoreTest {
c1.waitUntil(now);
Revision.setClock(c1);
DocumentNodeStore ns1 = builderProvider.newBuilder().clock(c1)
- .setDocumentStore(store).setAsyncDelay(0).getNodeStore();
+ .setDocumentStore(store).setAsyncDelay(0)
+ .setClusterId(1).getNodeStore();
NodeBuilder b1 = ns1.getRoot().builder();
b1.child("node").setProperty("p", 1);
merge(ns1, b1);
@@ -1603,7 +1612,8 @@ public class DocumentNodeStoreTest {
Revision.setClock(c2);
DocumentNodeStore ns2 = builderProvider.newBuilder().clock(c2)
- .setDocumentStore(store).setAsyncDelay(0).getNodeStore();
+ .setDocumentStore(store).setAsyncDelay(0)
+ .setClusterId(2).getNodeStore();
// ns2 sees /node
assertTrue(ns2.getRoot().hasChildNode("node"));
assertEquals(1, ns2.getRoot().getChildNode("node").getProperty("p").getValue(Type.LONG).longValue());
@@ -1637,9 +1647,11 @@ public class DocumentNodeStoreTest {
public void notYetVisibleExceptionMessage() throws Exception {
MemoryDocumentStore store = new MemoryDocumentStore();
DocumentNodeStore ns1 = builderProvider.newBuilder()
- .setDocumentStore(store).setAsyncDelay(0).getNodeStore();
+ .setDocumentStore(store).setAsyncDelay(0)
+ .setClusterId(1).getNodeStore();
DocumentNodeStore ns2 = builderProvider.newBuilder()
- .setDocumentStore(store).setAsyncDelay(0).getNodeStore();
+ .setDocumentStore(store).setAsyncDelay(0)
+ .setClusterId(2).getNodeStore();
ns2.setMaxBackOffMillis(0);
NodeBuilder b1 = ns1.getRoot().builder();
@@ -1695,10 +1707,12 @@ public class DocumentNodeStoreTest {
MemoryDocumentStore store = new MemoryDocumentStore();
DocumentNodeStore ns1 = builderProvider.newBuilder()
.setAsyncDelay(0).clock(clock)
- .setDocumentStore(store).getNodeStore();
+ .setDocumentStore(store)
+ .setClusterId(1).getNodeStore();
DocumentNodeStore ns2 = builderProvider.newBuilder()
.setAsyncDelay(0).clock(clock)
- .setDocumentStore(store).getNodeStore();
+ .setDocumentStore(store)
+ .setClusterId(2).getNodeStore();
// create some children under /foo/bar
NodeBuilder b1 = ns1.getRoot().builder();
@@ -2483,9 +2497,11 @@ public class DocumentNodeStoreTest {
public void sameSeenAtRevision() throws Exception {
MemoryDocumentStore store = new MemoryDocumentStore();
DocumentNodeStore ns1 = builderProvider.newBuilder()
- .setDocumentStore(store).setAsyncDelay(0).getNodeStore();
+ .setDocumentStore(store).setAsyncDelay(0)
+ .setClusterId(1).getNodeStore();
DocumentNodeStore ns2 = builderProvider.newBuilder()
- .setDocumentStore(store).setAsyncDelay(0).getNodeStore();
+ .setDocumentStore(store).setAsyncDelay(0)
+ .setClusterId(2).getNodeStore();
NodeBuilder b2 = ns2.getRoot().builder();
b2.child("test");
@@ -2500,7 +2516,8 @@ public class DocumentNodeStoreTest {
ns1.runBackgroundOperations();
DocumentNodeStore ns3 = builderProvider.newBuilder()
- .setDocumentStore(store).setAsyncDelay(0).getNodeStore();
+ .setDocumentStore(store).setAsyncDelay(0)
+ .setClusterId(3).getNodeStore();
ns3.setMaxBackOffMillis(0);
NodeBuilder b3 = ns3.getRoot().builder();
assertFalse(b3.hasChildNode("test"));
@@ -2513,9 +2530,11 @@ public class DocumentNodeStoreTest {
public void sameSeenAtRevision2() throws Exception {
MemoryDocumentStore store = new MemoryDocumentStore();
DocumentNodeStore ns1 = builderProvider.newBuilder()
- .setDocumentStore(store).setAsyncDelay(0).getNodeStore();
+ .setDocumentStore(store).setAsyncDelay(0)
+ .setClusterId(1).getNodeStore();
DocumentNodeStore ns2 = builderProvider.newBuilder()
- .setDocumentStore(store).setAsyncDelay(0).getNodeStore();
+ .setDocumentStore(store).setAsyncDelay(0)
+ .setClusterId(2).getNodeStore();
NodeBuilder b2 = ns2.getRoot().builder();
b2.child("test");
@@ -2533,7 +2552,8 @@ public class DocumentNodeStoreTest {
ns1.runBackgroundOperations();
DocumentNodeStore ns3 = builderProvider.newBuilder()
- .setDocumentStore(store).setAsyncDelay(0).getNodeStore();
+ .setDocumentStore(store).setAsyncDelay(0)
+ .setClusterId(3).getNodeStore();
ns3.setMaxBackOffMillis(0);
NodeBuilder b3 = ns3.getRoot().builder();
assertTrue(b3.hasChildNode("test"));
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=1720500&r1=1720499&r2=1720500&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 17 09:52:40 2015
@@ -751,7 +751,7 @@ public class DocumentSplitTest extends B
ns1.runBackgroundOperations();
DocumentNodeStore ns2 = new DocumentMK.Builder().setDocumentStore(store)
- .setAsyncDelay(0).getNodeStore();
+ .setAsyncDelay(0).setClusterId(ns1.getClusterId() + 1).getNodeStore();
// prevent merge retries
ns2.setMaxBackOffMillis(0);
assertTrue(ns2.getRoot().hasChildNode("test"));
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalTest.java?rev=1720500&r1=1720499&r2=1720500&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalTest.java Thu Dec 17 09:52:40 2015
@@ -327,10 +327,10 @@ public class JournalTest extends Abstrac
}
private void doLastRevRecoveryJournalTest(boolean testConcurrency) throws Exception {
- DocumentMK mk1 = createMK(0 /*clusterId via clusterNodes collection*/, 0);
+ DocumentMK mk1 = createMK(1, 0);
DocumentNodeStore ds1 = mk1.getNodeStore();
int c1Id = ds1.getClusterId();
- DocumentMK mk2 = createMK(0 /*clusterId via clusterNodes collection*/, 0);
+ DocumentMK mk2 = createMK(2, 0);
DocumentNodeStore ds2 = mk2.getNodeStore();
final int c2Id = ds2.getClusterId();
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgentTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgentTest.java?rev=1720500&r1=1720499&r2=1720500&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgentTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgentTest.java Thu Dec 17 09:52:40 2015
@@ -99,6 +99,7 @@ public class LastRevRecoveryAgentTest {
.clock(clock)
.setDocumentStore(store)
.setLeaseCheck(false)
+ .setClusterId(1)
.getNodeStore();
c1Id = ds1.getClusterId();
@@ -107,6 +108,7 @@ public class LastRevRecoveryAgentTest {
.clock(clock)
.setDocumentStore(store)
.setLeaseCheck(false)
+ .setClusterId(2)
.getNodeStore();
c2Id = ds2.getClusterId();
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryTest.java?rev=1720500&r1=1720499&r2=1720500&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryTest.java Thu Dec 17 09:52:40 2015
@@ -67,6 +67,7 @@ public class LastRevRecoveryTest {
.setLeaseCheck(leaseCheck)
.setAsyncDelay(0)
.setDocumentStore(sharedStore)
+ .setClusterId(1)
.getNodeStore();
c1Id = ds1.getClusterId();
@@ -75,6 +76,7 @@ public class LastRevRecoveryTest {
.setLeaseCheck(leaseCheck)
.setAsyncDelay(0)
.setDocumentStore(sharedStore)
+ .setClusterId(2)
.getNodeStore();
c2Id = ds2.getClusterId();
}
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=1720500&r1=1720499&r2=1720500&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 17 09:52:40 2015
@@ -228,7 +228,7 @@ public class NodeDocumentTest {
for (int i = 0; i < NUM_CLUSTER_NODES; i++) {
DocumentNodeStore ns = new DocumentMK.Builder()
.setDocumentStore(store)
- .setAsyncDelay(0).getNodeStore();
+ .setAsyncDelay(0).setClusterId(i + 1).getNodeStore();
docStores.add(ns);
}
Random r = new Random(42);
@@ -385,8 +385,8 @@ public class NodeDocumentTest {
@Test
public void getNewestRevision() throws Exception {
MemoryDocumentStore store = new MemoryDocumentStore();
- DocumentNodeStore ns1 = createTestStore(store, 0);
- DocumentNodeStore ns2 = createTestStore(store, 0);
+ DocumentNodeStore ns1 = createTestStore(store, 1, 0);
+ DocumentNodeStore ns2 = createTestStore(store, 2, 0);
NodeBuilder b1 = ns1.getRoot().builder();
b1.child("test");
@@ -473,7 +473,7 @@ public class NodeDocumentTest {
@Test
public void getNewestRevisionCheckArgument() throws Exception {
MemoryDocumentStore store = new MemoryDocumentStore();
- DocumentNodeStore ns = createTestStore(store, 0);
+ DocumentNodeStore ns = createTestStore(store, 0, 0);
NodeBuilder builder = ns.getRoot().builder();
builder.child("test");
@@ -521,8 +521,8 @@ public class NodeDocumentTest {
final int numChanges = 200;
Random random = new Random();
MemoryDocumentStore store = new MemoryDocumentStore();
- DocumentNodeStore ns1 = createTestStore(store, 0);
- DocumentNodeStore ns2 = createTestStore(store, 0);
+ DocumentNodeStore ns1 = createTestStore(store, 1, 0);
+ DocumentNodeStore ns2 = createTestStore(store, 2, 0);
List<DocumentNodeStore> nodeStores = Lists.newArrayList(ns1, ns2);
for (int i = 0; i < numChanges; i++) {
@@ -570,7 +570,7 @@ public class NodeDocumentTest {
return super.find(collection, key);
}
};
- DocumentNodeStore ns = createTestStore(store, numChanges);
+ DocumentNodeStore ns = createTestStore(store, 0, numChanges);
NodeDocument doc = getRootDocument(store);
Map<Revision, String> valueMap = doc.getValueMap("p");
assertEquals(200, valueMap.size());
@@ -587,14 +587,15 @@ public class NodeDocumentTest {
}
private DocumentNodeStore createTestStore(int numChanges) throws Exception {
- return createTestStore(new MemoryDocumentStore(), numChanges);
+ return createTestStore(new MemoryDocumentStore(), 0, numChanges);
}
private DocumentNodeStore createTestStore(DocumentStore store,
+ int clusterId,
int numChanges) throws Exception {
DocumentNodeStore ns = new DocumentMK.Builder()
.setDocumentStore(store)
- .setAsyncDelay(0).getNodeStore();
+ .setAsyncDelay(0).setClusterId(clusterId).getNodeStore();
for (int i = 0; i < numChanges; i++) {
NodeBuilder builder = ns.getRoot().builder();
builder.setProperty("p", i);
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/impl/DocumentMKConcurrentAddTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/impl/DocumentMKConcurrentAddTest.java?rev=1720500&r1=1720499&r2=1720500&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/impl/DocumentMKConcurrentAddTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/impl/DocumentMKConcurrentAddTest.java Thu Dec 17 09:52:40 2015
@@ -43,10 +43,10 @@ public class DocumentMKConcurrentAddTest
private List<DocumentMK> mks = new ArrayList<DocumentMK>();
- private DocumentMK createMicroKernel() throws Exception {
+ private DocumentMK createMicroKernel(int clusterId) throws Exception {
MongoConnection connection = connectionFactory.getConnection();
DB mongoDB = connection.getDB();
- return new DocumentMK.Builder().memoryCacheSize(CACHE_SIZE).setMongoDB(mongoDB).open();
+ return new DocumentMK.Builder().memoryCacheSize(CACHE_SIZE).setMongoDB(mongoDB).setClusterId(clusterId).open();
}
@After
@@ -58,7 +58,7 @@ public class DocumentMKConcurrentAddTest
}
/**
- * Creates NB_THREADS microkernels, each commiting two nodes (one parent,
+ * Creates NB_THREADS microkernels, each committing two nodes (one parent,
* one child) in its own thread. The nodes being committed by separate
* threads do not overlap / conflict.
*
@@ -70,7 +70,8 @@ public class DocumentMKConcurrentAddTest
List<Callable<String>> cs = new LinkedList<Callable<String>>();
for (int i = 0; i < NB_THREADS; i++) {
// each callable has its own microkernel
- final DocumentMK mk = createMicroKernel();
+ // (try to assign a cluster id different from all other already existing nodes stores)
+ final DocumentMK mk = createMicroKernel(super.mk.getNodeStore().getClusterId() + 1 + i);
mks.add(mk);
// diff for adding one node and one child node
final List<String> stmts = new LinkedList<String>();
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ClusterConflictTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ClusterConflictTest.java?rev=1720500&r1=1720499&r2=1720500&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ClusterConflictTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ClusterConflictTest.java Thu Dec 17 09:52:40 2015
@@ -43,7 +43,7 @@ public class ClusterConflictTest extends
@Override
public void setUpConnection() throws Exception {
super.setUpConnection();
- ns2 = newBuilder(connectionFactory.getConnection().getDB()).getNodeStore();
+ ns2 = newBuilder(connectionFactory.getConnection().getDB()).setClusterId(2).getNodeStore();
}
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/CollisionMarkerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/CollisionMarkerTest.java?rev=1720500&r1=1720499&r2=1720500&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/CollisionMarkerTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/CollisionMarkerTest.java Thu Dec 17 09:52:40 2015
@@ -50,7 +50,7 @@ public class CollisionMarkerTest extends
public void setUpConnection() throws Exception {
mongoConnection = connectionFactory.getConnection();
MongoUtils.dropCollections(mongoConnection.getDB());
- mk = newDocumentMK(mongoConnection.getDB());
+ mk = newDocumentMK(mongoConnection.getDB(), 2);
ns1 = mk.getNodeStore();
}
@@ -69,7 +69,7 @@ public class CollisionMarkerTest extends
ns1.runBackgroundOperations();
// initialize second node store after background ops
// on ns1. this makes sure ns2 sees all changes done so far
- ns2 = newDocumentMK(connectionFactory.getConnection().getDB()).getNodeStore();
+ ns2 = newDocumentMK(connectionFactory.getConnection().getDB(), 3).getNodeStore();
b1 = ns1.getRoot().builder();
b1.child("node").child("foo");
@@ -93,10 +93,12 @@ public class CollisionMarkerTest extends
" committed revision", root.getValueMap(COLLISIONS).containsKey(head));
}
- private static DocumentMK newDocumentMK(DB db) {
+ private static DocumentMK newDocumentMK(DB db, int clusterId) {
DocumentMK mk = new DocumentMK.Builder().setAsyncDelay(0)
.setLeaseCheck(false)
- .setMongoDB(db).open();
+ .setMongoDB(db)
+ .setClusterId(clusterId)
+ .open();
// do not retry on conflicts
mk.getNodeStore().setMaxBackOffMillis(0);
return mk;