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 15:02:29 UTC
svn commit: r1720552 - in /jackrabbit/oak/branches/1.2: ./
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/
oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/
oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/do...
Author: reschke
Date: Thu Dec 17 14:02:28 2015
New Revision: 1720552
URL: http://svn.apache.org/viewvc?rev=1720552&view=rev
Log:
OAK-3424: change ClusterNodeInfo to potentially wait for an abandoned cluster id to become available (ported to 1.2)
Modified:
jackrabbit/oak/branches/1.2/ (props changed)
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterInfoTest.java
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterJoinTest.java
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterTest.java
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentConflictTest.java
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentSplitTest.java
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalTest.java
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgentTest.java
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryTest.java
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/impl/DocumentMKConcurrentAddTest.java
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ClusterConflictTest.java
Propchange: jackrabbit/oak/branches/1.2/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Dec 17 14:02:28 2015
@@ -1,3 +1,3 @@
/jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672642,1672644,1672834-1672835,1673351,1673410,1673414-1673415,1673436,1673644,1673662-1673664,1673669,1673695,1673713,1673738,1673787,1673791,1674046,1674065,1674075,1674107,1674228,1674780,1674880,1675054-1675055,1675319,1675332,1675354,1675357,1675382,1675555,1675566,1675593,1676198,1676237,1676407,1676458,1676539,1676670,1676693,1676703,1676725,1677579,1677581,1677609,1677611,1677774,1677788,1677797,1677804,1677806,1677939,1677991,1678023,1678095-1678096,1678124,1678171,1678173,1678211,1678323,1678758,1678938,1678954,1679144,1679165,1679191,1679232,1679235,1679503,1679958,1679961,1680170,1680172,1680182,1680222,1680232,1680236,1680461,1680633,1680643,1680747,1680805-1680806,1680903,1681282,1681767,1681918,1681921,1681955,1682042,1682218,1682235,1682437,1682494,1682555,1682855,1682904,1683059,1683089,1683213,1683249,1683259,1683278,1683323,1683687,1683700,1684174-1684175,1684186,1684376,1684442,1684561,1684570,1684601,1684618
,1684820,1684868,1685023,1685075,1685370,1685552,1685589-1685590,1685840,1685964,1685977,1685989,1685999,1686023,1686032,1686097,1686162,1686229,1686234,1686253,1686414,1686780,1686854,1686857,1686971,1687053-1687055,1687175,1687196,1687198,1687220,1687239-1687240,1687301,1687441,1687553,1688089-1688090,1688172,1688179,1688349,1688421,1688436,1688453,1688616,1688622,1688634,1688636,1688817,1689003-1689004,1689008,1689577,1689581,1689623,1689810,1689828,1689831,1689833,1689903,1690017,1690043,1690047,1690057,1690247,1690249,1690634-1690637,1690650,1690669,1690674,1690885,1690941,1691139,1691151,1691159,1691167,1691183,1691188,1691210,1691280,1691307,1691331-1691333,1691345,1691384-1691385,1691401,1691509,1692133-1692134,1692156,1692250,1692274,1692363,1692382,1692478,1692955,1693002,1693030,1693050,1693209,1693421,1693525-1693526,1694007,1694393-1694394,1694651,1694653-1694654,1695032,1695050,1695122,1695280,1695299,1695420,1695457,1695482,1695492,1695507,1695521,1695540,1695571,1695
905,1696190,1696194,1696242,1696285,1696375,1696522,1696578,1696759,1696916,1697363,1697373,1697410,1697582,1697589,1697616,1697672,1700191,1700231,1700397,1700403,1700506,1700571,1700718,1700727,1700749,1700769,1700775,1701065,1701619,1701733,1701743,1701750,1701768,1701806,1701810,1701814,1701948,1701955,1701959,1701965,1701986,1702014,1702022,1702045,1702051,1702241,1702272,1702387,1702405,1702423,1702860,1702942,1702960,1703212,1703382,1703395,1703411,1703428,1703430,1703568,1703592,1703758,1703858,1703878,1704256,1704282,1704285,1704457,1704479,1704490,1704614,1704629,1704636,1704655,1704670,1704886,1705005,1705027,1705043,1705055,1705250,1705268,1705273,1705323,1705677,1705701,1705871,1705992,1705998,1706009,1706037,1706059,1706212,1706218,1706270,1706764,1706772,1707049,1707191,1707435,1707509,1708105,1708315,1708546,1708592,1708766,1709012,1709852,1709978,1710013,1710031,1710049,1710205,1710242,1710559,1710575,1710590,1710614,1710637,1710789,1710800,1710811,1710816,1710972,1
711248,1711282,1711296,1711498,1711654,1712018,1712042,1712319,1712490,1712531,1712730,1712785,1712963,1713008,1713439,1713461,1713580,1713586,1713599-1713600,1713626,1713698,1713803,1713809,1714034,1714061,1714084,1714170,1714213,1714229,1714238,1714519-1714520,1714543-1714544,1714730,1714739,1714779,1714956,1714961,1715010,1715191,1715346,1715767,1715771,1715888,1715898,1716178,1716426,1716576,1716596,1716616,1716703,1716712,1716815,1716823,1716830,1716883,1717277,1717462,1717632,1717784,1717988,1718626,1718646,1718801,1718895,1719111,1719288,1720335
+/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672642,1672644,1672834-1672835,1673351,1673410,1673414-1673415,1673436,1673644,1673662-1673664,1673669,1673695,1673713,1673738,1673787,1673791,1674046,1674065,1674075,1674107,1674228,1674780,1674880,1675054-1675055,1675319,1675332,1675354,1675357,1675382,1675555,1675566,1675593,1676198,1676237,1676407,1676458,1676539,1676670,1676693,1676703,1676725,1677579,1677581,1677609,1677611,1677774,1677788,1677797,1677804,1677806,1677939,1677991,1678023,1678095-1678096,1678124,1678171,1678173,1678211,1678323,1678758,1678938,1678954,1679144,1679165,1679191,1679232,1679235,1679503,1679958,1679961,1680170,1680172,1680182,1680222,1680232,1680236,1680461,1680633,1680643,1680747,1680805-1680806,1680903,1681282,1681767,1681918,1681921,1681955,1682042,1682218,1682235,1682437,1682494,1682555,1682855,1682904,1683059,1683089,1683213,1683249,1683259,1683278,1683323,1683687,1683700,1684174-1684175,1684186,1684376,1684442,1684561,1684570,1684601,1684618
,1684820,1684868,1685023,1685075,1685370,1685552,1685589-1685590,1685840,1685964,1685977,1685989,1685999,1686023,1686032,1686097,1686162,1686229,1686234,1686253,1686414,1686780,1686854,1686857,1686971,1687053-1687055,1687175,1687196,1687198,1687220,1687239-1687240,1687301,1687441,1687553,1688089-1688090,1688172,1688179,1688349,1688421,1688436,1688453,1688616,1688622,1688634,1688636,1688817,1689003-1689004,1689008,1689577,1689581,1689623,1689810,1689828,1689831,1689833,1689903,1690017,1690043,1690047,1690057,1690247,1690249,1690634-1690637,1690650,1690669,1690674,1690885,1690941,1691139,1691151,1691159,1691167,1691183,1691188,1691210,1691280,1691307,1691331-1691333,1691345,1691384-1691385,1691401,1691509,1692133-1692134,1692156,1692250,1692274,1692363,1692382,1692478,1692955,1693002,1693030,1693050,1693209,1693421,1693525-1693526,1694007,1694393-1694394,1694651,1694653-1694654,1695032,1695050,1695122,1695280,1695299,1695420,1695457,1695482,1695492,1695507,1695521,1695540,1695571,1695
905,1696190,1696194,1696242,1696285,1696375,1696522,1696578,1696759,1696916,1697363,1697373,1697410,1697582,1697589,1697616,1697672,1700191,1700231,1700397,1700403,1700506,1700571,1700718,1700727,1700749,1700769,1700775,1701065,1701619,1701733,1701743,1701750,1701768,1701806,1701810,1701814,1701948,1701955,1701959,1701965,1701986,1702014,1702022,1702045,1702051,1702241,1702272,1702387,1702405,1702423,1702860,1702942,1702960,1703212,1703382,1703395,1703411,1703428,1703430,1703568,1703592,1703758,1703858,1703878,1704256,1704282,1704285,1704457,1704479,1704490,1704614,1704629,1704636,1704655,1704670,1704886,1705005,1705027,1705043,1705055,1705250,1705268,1705273,1705323,1705677,1705701,1705871,1705992,1705998,1706009,1706037,1706059,1706212,1706218,1706270,1706764,1706772,1707049,1707191,1707435,1707509,1708105,1708315,1708546,1708592,1708766,1709012,1709852,1709978,1710013,1710031,1710049,1710205,1710242,1710559,1710575,1710590,1710614,1710637,1710789,1710800,1710811,1710816,1710972,1
711248,1711282,1711296,1711498,1711654,1712018,1712042,1712319,1712490,1712531,1712730,1712785,1712963,1713008,1713439,1713461,1713580,1713586,1713599-1713600,1713626,1713698,1713803,1713809,1714034,1714061,1714084,1714170,1714213,1714229,1714238,1714519-1714520,1714543-1714544,1714730,1714739,1714779,1714956,1714961,1715010,1715191,1715346,1715767,1715771,1715888,1715898,1716178,1716426,1716576,1716596,1716616,1716703,1716712,1716815,1716823,1716830,1716883,1717277,1717462,1717632,1717784,1717988,1718626,1718646,1718801,1718895,1719111,1719288,1720335,1720500
/jackrabbit/trunk:1345480
Modified: jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java?rev=1720552&r1=1720551&r2=1720552&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java (original)
+++ jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java Thu Dec 17 14:02:28 2015
@@ -288,7 +288,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);
@@ -323,7 +323,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;
@@ -361,16 +361,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);
@@ -420,6 +429,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;
+ }
+
/**
* Renew the cluster id lease. This method needs to be called once in a while,
* to ensure the same cluster id is not re-used by a different instance.
Modified: jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterInfoTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterInfoTest.java?rev=1720552&r1=1720551&r2=1720552&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterInfoTest.java (original)
+++ jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterInfoTest.java Thu Dec 17 14:02:28 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;
@@ -49,10 +50,12 @@ public class ClusterInfoTest {
DocumentNodeStore ns1 = new DocumentMK.Builder().
setDocumentStore(mem).
setAsyncDelay(0).
+ setClusterId(1).
getNodeStore();
DocumentNodeStore ns2 = new DocumentMK.Builder().
setDocumentStore(mem).
setAsyncDelay(0).
+ setClusterId(2).
getNodeStore();
// Bring the current time forward to after the leaseTime which would have been
// updated in the DocumentNodeStore initialization.
@@ -135,6 +138,42 @@ 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).
+ 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).
+ getNodeStore();
+
+ assertEquals("should have re-used existing cluster id", cid, ns1.getClusterId());
+ }
+
@After
public void tearDown(){
ClusterNodeInfo.resetClockToDefault();
Modified: jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterJoinTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterJoinTest.java?rev=1720552&r1=1720551&r2=1720552&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterJoinTest.java (original)
+++ jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterJoinTest.java Thu Dec 17 14:02:28 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/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterTest.java?rev=1720552&r1=1720551&r2=1720552&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterTest.java (original)
+++ jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterTest.java Thu Dec 17 14:02:28 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/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentConflictTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentConflictTest.java?rev=1720552&r1=1720551&r2=1720552&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentConflictTest.java (original)
+++ jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentConflictTest.java Thu Dec 17 14:02:28 2015
@@ -59,13 +59,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));
}
}
@@ -79,8 +79,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();
}
@Ignore
@@ -201,7 +201,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/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java?rev=1720552&r1=1720551&r2=1720552&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java (original)
+++ jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java Thu Dec 17 14:02:28 2015
@@ -636,9 +636,9 @@ public class DocumentNodeStoreTest {
public void updateClusterState() {
DocumentStore docStore = new MemoryDocumentStore();
DocumentNodeStore ns1 = builderProvider.newBuilder().setAsyncDelay(0)
- .setDocumentStore(docStore).getNodeStore();
+ .setDocumentStore(docStore).setClusterId(1).getNodeStore();
DocumentNodeStore ns2 = builderProvider.newBuilder().setAsyncDelay(0)
- .setDocumentStore(docStore).getNodeStore();
+ .setDocumentStore(docStore).setClusterId(2).getNodeStore();
ns1.updateClusterState();
ns2.updateClusterState();
@@ -703,7 +703,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");
@@ -731,7 +732,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());
}
@@ -1103,7 +1105,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);
@@ -1117,7 +1120,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"));
@@ -1486,7 +1490,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);
@@ -1500,7 +1505,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"));
@@ -1537,7 +1543,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);
@@ -1551,7 +1558,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());
@@ -1585,9 +1593,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();
@@ -2149,9 +2159,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");
@@ -2166,7 +2178,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"));
@@ -2179,9 +2192,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");
@@ -2199,7 +2214,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/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentSplitTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentSplitTest.java?rev=1720552&r1=1720551&r2=1720552&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentSplitTest.java (original)
+++ jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentSplitTest.java Thu Dec 17 14:02:28 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/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalTest.java?rev=1720552&r1=1720551&r2=1720552&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalTest.java (original)
+++ jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalTest.java Thu Dec 17 14:02:28 2015
@@ -315,10 +315,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/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgentTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgentTest.java?rev=1720552&r1=1720551&r2=1720552&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgentTest.java (original)
+++ jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgentTest.java Thu Dec 17 14:02:28 2015
@@ -98,6 +98,7 @@ public class LastRevRecoveryAgentTest {
.setAsyncDelay(0)
.clock(clock)
.setDocumentStore(store)
+ .setClusterId(1)
.getNodeStore();
c1Id = ds1.getClusterId();
@@ -105,6 +106,7 @@ public class LastRevRecoveryAgentTest {
.setAsyncDelay(0)
.clock(clock)
.setDocumentStore(store)
+ .setClusterId(2)
.getNodeStore();
c2Id = ds2.getClusterId();
}
Modified: jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryTest.java?rev=1720552&r1=1720551&r2=1720552&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryTest.java (original)
+++ jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryTest.java Thu Dec 17 14:02:28 2015
@@ -48,12 +48,14 @@ public class LastRevRecoveryTest {
ds1 = builderProvider.newBuilder()
.setAsyncDelay(0)
.setDocumentStore(sharedStore)
+ .setClusterId(1)
.getNodeStore();
c1Id = ds1.getClusterId();
ds2 = builderProvider.newBuilder()
.setAsyncDelay(0)
.setDocumentStore(sharedStore)
+ .setClusterId(2)
.getNodeStore();
c2Id = ds2.getClusterId();
}
Modified: jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java?rev=1720552&r1=1720551&r2=1720552&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java (original)
+++ jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java Thu Dec 17 14:02:28 2015
@@ -180,7 +180,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);
@@ -337,8 +337,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");
@@ -425,7 +425,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");
@@ -473,8 +473,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++) {
@@ -522,7 +522,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());
@@ -539,14 +539,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/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/impl/DocumentMKConcurrentAddTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/impl/DocumentMKConcurrentAddTest.java?rev=1720552&r1=1720551&r2=1720552&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/impl/DocumentMKConcurrentAddTest.java (original)
+++ jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/impl/DocumentMKConcurrentAddTest.java Thu Dec 17 14:02:28 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/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ClusterConflictTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ClusterConflictTest.java?rev=1720552&r1=1720551&r2=1720552&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ClusterConflictTest.java (original)
+++ jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ClusterConflictTest.java Thu Dec 17 14:02:28 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