You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by st...@apache.org on 2016/11/15 12:38:36 UTC
svn commit: r1769802 [2/3] - in /sling/trunk/bundles/extensions/discovery:
base/
base/src/main/java/org/apache/sling/discovery/base/connectors/announcement/
base/src/test/java/org/apache/sling/discovery/base/its/
base/src/test/java/org/apache/sling/dis...
Modified: sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/SyncTokenService.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/SyncTokenService.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/SyncTokenService.java (original)
+++ sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/SyncTokenService.java Tue Nov 15 12:38:35 2016
@@ -68,7 +68,7 @@ public class SyncTokenService extends Ab
service.activate();
return service;
}
-
+
public static SyncTokenService testConstructor(
DiscoveryLiteConfig commonsConfig,
ResourceResolverFactory resourceResolverFactory,
@@ -94,20 +94,20 @@ public class SyncTokenService extends Ab
this.slingId = settingsService.getSlingId();
logger.info("activate: activated with slingId="+slingId);
}
-
+
public void setConsistencyHistory(ClusterSyncHistory consistencyHistory) {
this.clusterSyncHistory = consistencyHistory;
}
-
+
public ClusterSyncHistory getClusterSyncHistory() {
return clusterSyncHistory;
}
-
+
/** Get or create a ResourceResolver **/
protected ResourceResolver getResourceResolver() throws LoginException {
- return resourceResolverFactory.getAdministrativeResourceResolver(null);
+ return resourceResolverFactory.getServiceResourceResolver(null);
}
-
+
@Override
public void cancelSync() {
cancelPreviousBackgroundCheck();
@@ -124,9 +124,9 @@ public class SyncTokenService extends Ab
}
protected void syncToken(final BaseTopologyView view, final Runnable callback) {
-
+
startBackgroundCheck("SyncTokenService", new BackgroundCheck() {
-
+
@Override
public boolean check() {
// 1) first storing my syncToken
@@ -134,12 +134,12 @@ public class SyncTokenService extends Ab
if (!storeMySyncToken(localClusterSyncTokenId)) {
// if anything goes wrong above, then this will mean for the others
// that they will have to wait until the timeout hits
-
+
// so to try to avoid this, retry storing my sync token later:
clusterSyncHistory.addHistoryEntry(view, "storing my syncToken ("+localClusterSyncTokenId+")");
return false;
}
-
+
// 2) then check if all others have done the same already
return seenAllSyncTokens(view);
}
@@ -200,7 +200,7 @@ public class SyncTokenService extends Ab
Resource resource = ResourceHelper.getOrCreateResource(resourceResolver, getSyncTokenPath());
ValueMap syncTokens = resource.adaptTo(ValueMap.class);
String syncToken = view.getLocalClusterSyncTokenId();
-
+
boolean success = true;
StringBuffer historyEntry = new StringBuffer();
for (InstanceDescription instance : view.getLocalInstance().getClusterView().getInstances()) {
@@ -232,7 +232,7 @@ public class SyncTokenService extends Ab
} else {
clusterSyncHistory.addHistoryEntry(view, "seen all syncTokens");
}
-
+
resourceResolver.commit();
logger.info("seenAllSyncTokens: seen all syncTokens!");
return true;
@@ -249,5 +249,5 @@ public class SyncTokenService extends Ab
}
}
}
-
+
}
Modified: sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestHelper.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestHelper.java (original)
+++ sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestHelper.java Tue Nov 15 12:38:35 2016
@@ -19,7 +19,6 @@
package org.apache.sling.discovery.commons.providers.base;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
@@ -33,7 +32,6 @@ import org.apache.sling.discovery.common
import org.apache.sling.discovery.commons.providers.DefaultInstanceDescription;
import org.apache.sling.discovery.commons.providers.DummyTopologyView;
import org.apache.sling.discovery.commons.providers.EventHelper;
-import org.apache.sling.discovery.commons.providers.base.ViewStateManagerImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -78,7 +76,7 @@ public class TestHelper {
if (!mgr.getAsyncEventSender().hasInFlightEvent()) {
return;
}
-
+
// sleep outside of synchronized to keep test-influence
// to a minimum
try {
@@ -96,7 +94,7 @@ public class TestHelper {
}
/** does couple loops randomly calling handleChanging() (or not) and then handleNewView().
- * Note: random is passed to allow customizing and not hardcoding this method to a particular random
+ * Note: random is passed to allow customizing and not hardcoding this method to a particular random
* @throws InterruptedException **/
public static void randomEventLoop(ViewStateManagerImpl mgr, DummyDiscoveryService sds, int loopSize, int delayInMillis, final Random random, DummyListener... listeners) throws InterruptedException {
for(int i=0; i<loopSize; i++) {
Modified: sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestMinEventDelayHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestMinEventDelayHandler.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestMinEventDelayHandler.java (original)
+++ sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestMinEventDelayHandler.java Tue Nov 15 12:38:35 2016
@@ -28,7 +28,7 @@ import java.util.UUID;
import java.util.concurrent.locks.ReentrantLock;
import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
+import org.apache.log4j.spi.RootLogger;
import org.apache.sling.commons.testing.junit.categories.Slow;
import org.apache.sling.discovery.commons.providers.BaseTopologyView;
import org.apache.sling.discovery.commons.providers.DefaultClusterView;
@@ -38,7 +38,6 @@ import org.apache.sling.discovery.common
import org.apache.sling.discovery.commons.providers.spi.ClusterSyncService;
import org.junit.After;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.slf4j.Logger;
@@ -49,9 +48,9 @@ public class TestMinEventDelayHandler {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private ViewStateManagerImpl mgr;
-
+
private Random defaultRandom;
-
+
private DummyDiscoveryService sds;
private Level logLevel;
@@ -61,11 +60,12 @@ public class TestMinEventDelayHandler {
@Before
public void setup() throws Exception {
mgr = new ViewStateManagerImpl(new ReentrantLock(), new ClusterSyncService() {
-
+
+ @Override
public void sync(BaseTopologyView view, Runnable callback) {
callback.run();
}
-
+
@Override
public void cancelSync() {
// nothing to cancel, we're auto-run
@@ -77,7 +77,7 @@ public class TestMinEventDelayHandler {
sds = new DummyDiscoveryService();
mgr.installMinEventDelayHandler(sds, scheduler, 1);
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
logLevel = discoveryLogger.getLevel();
discoveryLogger.setLevel(Level.INFO); // changed from Level.DEBUG
}
@@ -86,7 +86,7 @@ public class TestMinEventDelayHandler {
public void teardown() throws Exception {
mgr = null;
defaultRandom= null;
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
discoveryLogger.setLevel(logLevel);
}
@@ -103,9 +103,9 @@ public class TestMinEventDelayHandler {
mgr.handleActivated();
TestHelper.assertNoEvents(listener);
final DummyTopologyView view1 = new DummyTopologyView().addInstance();
- final DummyTopologyView view2 = DummyTopologyView.clone(view1).addInstance(UUID.randomUUID().toString(),
+ final DummyTopologyView view2 = DummyTopologyView.clone(view1).addInstance(UUID.randomUUID().toString(),
(DefaultClusterView) view1.getLocalInstance().getClusterView(), false, false);
- final DummyTopologyView view3 = DummyTopologyView.clone(view1).addInstance(UUID.randomUUID().toString(),
+ final DummyTopologyView view3 = DummyTopologyView.clone(view1).addInstance(UUID.randomUUID().toString(),
(DefaultClusterView) view1.getLocalInstance().getClusterView(), false, false);
logger.info("testReactivate: calling handleNewView...");
mgr.handleNewView(view1);
@@ -125,7 +125,7 @@ public class TestMinEventDelayHandler {
assertEquals(0, mgr.waitForAsyncEvents(2000));
logger.info("testReactivate: asserting CHANGED event");
TestHelper.assertEvents(mgr, listener, EventHelper.newChangedEvent(view1, view2));
-
+
// now do the above again, but this time do a handleDeactivated before receiving another changed event
logger.info("testReactivate: calling handleChanging...");
mgr.handleChanging();
@@ -135,21 +135,21 @@ public class TestMinEventDelayHandler {
TestHelper.assertNoEvents(listener);
// make sure the MinEventDelayHandler finds a topology when coming back from the delaying, so:
sds.setTopoology(view3);
-
+
logger.info("testReactivate: doing handleDeactivated");
final AsyncEventSender asyncEventSender = mgr.getAsyncEventSender();
Field field = mgr.getClass().getDeclaredField("minEventDelayHandler");
field.setAccessible(true);
MinEventDelayHandler minEventDelayHandler = (MinEventDelayHandler) field.get(mgr);
assertNotNull(minEventDelayHandler);
-
+
// marking view3 as not current
view3.setNotCurrent();
sds.setTopoology(view3);
-
+
mgr.handleDeactivated();
TestHelper.assertNoEvents(listener);
-
+
logger.info("testReactivate: now waiting 5 sec to make sure the MinEventDelayHandler would be finished");
TestHelper.assertNoEvents(listener);
Thread.sleep(5000);
@@ -214,7 +214,7 @@ public class TestMinEventDelayHandler {
Thread.sleep(1000);
}
}
-
+
@Test
public void testLongMinDelay() throws Exception {
mgr.installMinEventDelayHandler(sds, scheduler, 5);
Modified: sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestViewStateManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestViewStateManager.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestViewStateManager.java (original)
+++ sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestViewStateManager.java Tue Nov 15 12:38:35 2016
@@ -31,8 +31,7 @@ import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
-import org.apache.sling.commons.testing.junit.categories.Slow;
+import org.apache.log4j.spi.RootLogger;
import org.apache.sling.discovery.ClusterView;
import org.apache.sling.discovery.DiscoveryService;
import org.apache.sling.discovery.InstanceDescription;
@@ -47,7 +46,6 @@ import org.apache.sling.discovery.common
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import org.junit.experimental.categories.Category;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -64,7 +62,8 @@ public class TestViewStateManager {
this.lock = lock;
this.semaphore = semaphore;
}
-
+
+ @Override
public void sync(BaseTopologyView view, Runnable callback) {
try {
lock.unlock();
@@ -97,22 +96,23 @@ public class TestViewStateManager {
@Before
public void setup() throws Exception {
mgr = new ViewStateManagerImpl(new ReentrantLock(), new ClusterSyncService() {
-
+
+ @Override
public void sync(BaseTopologyView view, Runnable callback) {
callback.run();
}
-
+
@Override
public void cancelSync() {
// nothing to cancel, we're auto-run
}
});
defaultRandom = new Random(1234123412); // I want randomness yes, but deterministic, for some methods at least
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
logLevel = discoveryLogger.getLevel();
discoveryLogger.setLevel(Level.INFO);
}
-
+
@After
public void teardown() throws Exception {
if (mgr != null) {
@@ -121,7 +121,7 @@ public class TestViewStateManager {
}
mgr = null;
defaultRandom= null;
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
discoveryLogger.setLevel(logLevel);
}
@@ -172,7 +172,7 @@ public class TestViewStateManager {
mgr.bind(listener); // we should be generous and allow duplicate registration
assertTrue(mgr.unbind(listener));
assertFalse(mgr.unbind(listener));
-
+
mgr.handleActivated();
assertFalse(mgr.unbind(listener));
mgr.bind(listener);
@@ -180,7 +180,7 @@ public class TestViewStateManager {
assertTrue(mgr.unbind(listener));
assertFalse(mgr.unbind(listener));
}
-
+
@Test
public void testBindActivateChangingChanged() throws Exception {
final DummyListener listener = new DummyListener();
@@ -195,7 +195,7 @@ public class TestViewStateManager {
assertEvents(listener, EventHelper.newInitEvent(view));
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testBindChangingActivateChanged() throws Exception {
final DummyListener listener = new DummyListener();
@@ -210,7 +210,7 @@ public class TestViewStateManager {
assertEvents(listener, EventHelper.newInitEvent(view));
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testBindChangingChangedActivate() throws Exception {
final DummyListener listener = new DummyListener();
@@ -225,7 +225,7 @@ public class TestViewStateManager {
assertEvents(listener, EventHelper.newInitEvent(view));
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testBindChangingChangedChangingActivate() throws Exception {
final DummyListener listener = new DummyListener();
@@ -245,7 +245,7 @@ public class TestViewStateManager {
assertEvents(listener, EventHelper.newInitEvent(view2));
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testBindChangedChangingActivate() throws Exception {
final DummyListener listener = new DummyListener();
@@ -263,18 +263,19 @@ public class TestViewStateManager {
assertEvents(listener, EventHelper.newInitEvent(view2));
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testCancelSync() throws Exception {
final List<Runnable> syncCallbacks = new LinkedList<Runnable>();
mgr = new ViewStateManagerImpl(new ReentrantLock(), new ClusterSyncService() {
-
+
+ @Override
public void sync(BaseTopologyView view, Runnable callback) {
synchronized(syncCallbacks) {
syncCallbacks.add(callback);
}
}
-
+
@Override
public void cancelSync() {
synchronized(syncCallbacks) {
@@ -295,7 +296,7 @@ public class TestViewStateManager {
}
String id1 = UUID.randomUUID().toString();
String id2 = UUID.randomUUID().toString();
- final BaseTopologyView view2 = TestHelper.newView(true, id1, id1, id1, id2);
+ final BaseTopologyView view2 = TestHelper.newView(true, id1, id1, id1, id2);
mgr.handleNewView(view2);
assertEquals(0, mgr.waitForAsyncEvents(1000));
TestHelper.assertNoEvents(listener);
@@ -307,7 +308,7 @@ public class TestViewStateManager {
assertEquals(0, mgr.waitForAsyncEvents(1000));
assertEvents(listener, EventHelper.newInitEvent(view2));
}
-
+
@Test
public void testActivateBindChangingChanged() throws Exception {
final DummyListener listener = new DummyListener();
@@ -332,7 +333,7 @@ public class TestViewStateManager {
mgr.bind(listener);
mgr.handleChanging();
DummyTopologyView oldView = new DummyTopologyView().addInstance();
- DefaultInstanceDescription localInstance =
+ DefaultInstanceDescription localInstance =
(DefaultInstanceDescription) oldView.getLocalInstance();
localInstance.setProperty("foo", "bar1");
mgr.handleNewView(oldView);
@@ -381,12 +382,12 @@ public class TestViewStateManager {
assertEvents(listener, EventHelper.newInitEvent(view));
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testBindActivateBindChangingChanged() throws Exception {
final DummyListener listener1 = new DummyListener();
final DummyListener listener2 = new DummyListener();
-
+
mgr.bind(listener1);
TestHelper.assertNoEvents(listener1);
mgr.handleActivated();
@@ -401,7 +402,7 @@ public class TestViewStateManager {
mgr.handleNewView(view);
assertEvents(listener1, EventHelper.newInitEvent(view));
assertEvents(listener2, EventHelper.newInitEvent(view));
-
+
randomEventLoop(defaultRandom, listener1, listener2);
}
@@ -409,7 +410,7 @@ public class TestViewStateManager {
public void testBindActivateChangingBindChanged() throws Exception {
final DummyListener listener1 = new DummyListener();
final DummyListener listener2 = new DummyListener();
-
+
mgr.bind(listener1);
TestHelper.assertNoEvents(listener1);
mgr.handleActivated();
@@ -426,7 +427,7 @@ public class TestViewStateManager {
randomEventLoop(defaultRandom, listener1, listener2);
}
-
+
@Test
public void testActivateBindChangingDuplicateHandleNewView() throws Exception {
final DummyListener listener = new DummyListener();
@@ -440,7 +441,7 @@ public class TestViewStateManager {
TestHelper.assertNoEvents(listener);
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testActivateBindChangingChangedBindDuplicateHandleNewView() throws Exception {
final DummyListener listener1 = new DummyListener();
@@ -450,7 +451,7 @@ public class TestViewStateManager {
final DummyTopologyView view = new DummyTopologyView().addInstance();
mgr.handleNewView(view);
assertEvents(listener1, EventHelper.newInitEvent(view));
-
+
final DummyListener listener2 = new DummyListener();
mgr.bind(listener2);
mgr.handleNewView(DummyTopologyView.clone(view));
@@ -458,7 +459,7 @@ public class TestViewStateManager {
assertEvents(listener2, EventHelper.newInitEvent(view));
randomEventLoop(defaultRandom, listener1, listener2);
}
-
+
@Test
public void testActivateChangedBindDuplicateHandleNewView() throws Exception {
final DummyListener listener = new DummyListener();
@@ -473,7 +474,7 @@ public class TestViewStateManager {
TestHelper.assertNoEvents(listener);
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testBindActivateChangedChanged() throws Exception {
final DummyListener listener = new DummyListener();
@@ -491,7 +492,7 @@ public class TestViewStateManager {
assertEvents(listener, EventHelper.newChangingEvent(view1), EventHelper.newChangedEvent(view1, view2));
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testBindActivateChangedDeactivateChangingActivateChanged() throws Exception {
final DummyListener listener = new DummyListener();
@@ -560,11 +561,11 @@ public class TestViewStateManager {
mgr.handleNewView(view2);
assertEvents(listener, EventHelper.newInitEvent(view2));
}
-
+
@Test
public void testClusterSyncService_noConcurrency() throws Exception {
- final org.apache.log4j.Logger commonsLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery.commons.providers");
- final org.apache.log4j.Level logLevel = commonsLogger.getLevel();
+ final org.apache.log4j.Logger commonsLogger = RootLogger.getLogger("org.apache.sling.discovery.commons.providers");
+// final org.apache.log4j.Level logLevel = commonsLogger.getLevel();
commonsLogger.setLevel(Level.INFO); // change here to DEBUG in case of issues with this test
final Semaphore serviceSemaphore = new Semaphore(0);
final ReentrantLock lock = new ReentrantLock();
@@ -584,10 +585,11 @@ public class TestViewStateManager {
.addInstance(slingId2, cluster, false, false);
async(new Runnable() {
+ @Override
public void run() {
mgr.handleNewView(view1);
}
-
+
});
Thread.sleep(1000);
TestHelper.assertNoEvents(listener);
@@ -600,10 +602,11 @@ public class TestViewStateManager {
view2.removeInstance(slingId2);
async(new Runnable() {
+ @Override
public void run() {
mgr.handleNewView(view2);
}
-
+
});
logger.debug("run: waiting for 1sec");
Thread.sleep(1000);
@@ -624,7 +627,7 @@ public class TestViewStateManager {
@Test
public void testOnlyDiffersInProperties() throws Exception {
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
discoveryLogger.setLevel(Level.INFO); // changed from Level.DEBUG
logger.info("testOnlyDiffersInProperties: start");
final String slingId1 = UUID.randomUUID().toString();
@@ -639,7 +642,7 @@ public class TestViewStateManager {
final DummyTopologyView view2 = DummyTopologyView.clone(view1).removeInstance(slingId2);
final DummyTopologyView view3 = DummyTopologyView.clone(view1).removeInstance(slingId2).removeInstance(slingId3);
DummyTopologyView view1Cloned = DummyTopologyView.clone(view1);
-
+
logger.info("testOnlyDiffersInProperties: handleNewView(view1)");
mgr.handleNewView(view1);
logger.info("testOnlyDiffersInProperties: handleActivated()");
@@ -671,7 +674,7 @@ public class TestViewStateManager {
i4_1.setProperty("a", "b");
logger.info("testOnlyDiffersInProperties: onlyDiffersInProperties(view4)");
assertTrue(mgr.onlyDiffersInProperties(view4));
-
+
DefaultInstanceDescription i5_1 = (DefaultInstanceDescription) view5.getInstance(slingId1);
i5_1.setProperty("a", "b");
logger.info("testOnlyDiffersInProperties: onlyDiffersInProperties(view5)");
@@ -701,7 +704,7 @@ public class TestViewStateManager {
view6.setId(originalId);
logger.info("testOnlyDiffersInProperties: onlyDiffersInProperties(view6) [5]");
assertTrue(mgr.onlyDiffersInProperties(view6));
-
+
// hack: we're modifying the view *in the ViewStateManagerImpl* here!!:
view4.setId(null);
Modified: sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/DescriptorHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/DescriptorHelper.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/DescriptorHelper.java (original)
+++ sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/DescriptorHelper.java Tue Nov 15 12:38:35 2016
@@ -30,24 +30,23 @@ import org.apache.jackrabbit.commons.Sim
import org.apache.jackrabbit.oak.util.GenericDescriptors;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
-import org.apache.sling.discovery.commons.providers.spi.base.DiscoveryLiteDescriptor;
public class DescriptorHelper {
public static void setDiscoveryLiteDescriptor(ResourceResolverFactory factory, DiscoveryLiteDescriptorBuilder builder) throws Exception {
setDescriptor(factory, DiscoveryLiteDescriptor.OAK_DISCOVERYLITE_CLUSTERVIEW, builder.asJson());
}
-
+
public static void setDescriptor(ResourceResolverFactory factory, String key,
String value) throws Exception {
- ResourceResolver resourceResolver = factory.getAdministrativeResourceResolver(null);
+ ResourceResolver resourceResolver = factory.getServiceResourceResolver(null);
try{
Session session = resourceResolver.adaptTo(Session.class);
if (session == null) {
return;
}
Repository repo = session.getRepository();
-
+
//<hack>
// Method setDescriptorMethod = repo.getClass().
// getDeclaredMethod("setDescriptor", String.class, String.class);
@@ -67,7 +66,7 @@ public class DescriptorHelper {
descriptors.put(key, valueFactory.createValue(value), true, true);
}
//</hack>
-
+
//<verify-hack>
assertEquals(value, repo.getDescriptor(key));
//</verify-hack>
Modified: sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java (original)
+++ sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java Tue Nov 15 12:38:35 2016
@@ -96,6 +96,7 @@ public class MockedResourceResolver impl
}
+ @Override
@SuppressWarnings("unchecked")
public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
if (type.equals(Session.class)) {
@@ -110,27 +111,33 @@ public class MockedResourceResolver impl
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Resource resolve(HttpServletRequest request, String absPath) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Resource resolve(String absPath) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
@Deprecated
public Resource resolve(HttpServletRequest request) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public String map(String resourcePath) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public String map(HttpServletRequest request, String resourcePath) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Resource getResource(String path) {
Session session;
try {
@@ -144,6 +151,7 @@ public class MockedResourceResolver impl
return new MockedResource(this, path, "nt:unstructured");
}
+ @Override
public Resource getResource(Resource base, String path) {
if (base.getPath().equals("/")) {
return getResource("/" + path);
@@ -152,20 +160,24 @@ public class MockedResourceResolver impl
}
}
+ @Override
public String[] getSearchPath() {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Iterator<Resource> listChildren(Resource parent) {
try {
Node node = parent.adaptTo(Node.class);
final NodeIterator nodes = node.getNodes();
return new Iterator<Resource>() {
+ @Override
public void remove() {
throw new UnsupportedOperationException();
}
+ @Override
public Resource next() {
Node next = nodes.nextNode();
try {
@@ -177,6 +189,7 @@ public class MockedResourceResolver impl
}
}
+ @Override
public boolean hasNext() {
return nodes.hasNext();
}
@@ -186,28 +199,34 @@ public class MockedResourceResolver impl
}
}
+ @Override
public Iterable<Resource> getChildren(Resource parent) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Iterator<Resource> findResources(String query, String language) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Iterator<Map<String, Object>> queryResources(String query,
String language) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public ResourceResolver clone(Map<String, Object> authenticationInfo)
throws LoginException {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public boolean isLive() {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public void close() {
Iterator<MockedResource> it = resources.iterator();
while (it.hasNext()) {
@@ -226,18 +245,22 @@ public class MockedResourceResolver impl
resources.add(mockedResource);
}
+ @Override
public String getUserID() {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Iterator<String> getAttributeNames() {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Object getAttribute(String name) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public void delete(Resource resource) throws PersistenceException {
if (resources.contains(resource)) {
resources.remove(resource);
@@ -252,6 +275,7 @@ public class MockedResourceResolver impl
}
}
+ @Override
public Resource create(Resource parent, String name,
Map<String, Object> properties) throws PersistenceException {
final Node parentNode = parent.adaptTo(Node.class);
@@ -286,6 +310,7 @@ public class MockedResourceResolver impl
}
}
+ @Override
public void revert() {
try {
this.session.refresh(false);
@@ -294,6 +319,7 @@ public class MockedResourceResolver impl
}
}
+ @Override
public void commit() throws PersistenceException {
try {
this.session.save();
@@ -302,37 +328,43 @@ public class MockedResourceResolver impl
}
}
+ @Override
public boolean hasChanges() {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public String getParentResourceType(Resource resource) {
// TODO Auto-generated method stub
return null;
}
+ @Override
public String getParentResourceType(String resourceType) {
// TODO Auto-generated method stub
return null;
}
+ @Override
public boolean isResourceType(Resource resource, String resourceType) {
// TODO Auto-generated method stub
return false;
}
+ @Override
public void refresh() {
// TODO Auto-generated method stub
}
@Override
- public Resource getParent(Resource child) {
- throw new UnsupportedOperationException("Not implemented");
+ public boolean hasChildren(Resource arg0) {
+ Iterable<Resource> iter = this.getChildren(arg0);
+ return iter.iterator().hasNext();
}
@Override
- public boolean hasChildren(Resource resource) {
+ public Resource getParent(Resource child) {
throw new UnsupportedOperationException("Not implemented");
}
Modified: sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/RepositoryTestHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/RepositoryTestHelper.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/RepositoryTestHelper.java (original)
+++ sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/RepositoryTestHelper.java Tue Nov 15 12:38:35 2016
@@ -64,10 +64,10 @@ import org.slf4j.LoggerFactory;
public class RepositoryTestHelper {
private final static Logger logger = LoggerFactory.getLogger(RepositoryTestHelper.class);
-
+
public static void dumpRepo(ResourceResolverFactory resourceResolverFactory) throws Exception {
Session session = resourceResolverFactory
- .getAdministrativeResourceResolver(null).adaptTo(Session.class);
+ .getServiceResourceResolver(null).adaptTo(Session.class);
logger.info("dumpRepo: ====== START =====");
logger.info("dumpRepo: repo = " + session.getRepository());
@@ -78,7 +78,7 @@ public class RepositoryTestHelper {
session.logout();
}
-
+
public static void dump(Node node) throws RepositoryException {
if (node.getPath().equals("/jcr:system")
|| node.getPath().equals("/rep:policy")) {
@@ -153,7 +153,7 @@ public class RepositoryTestHelper {
public static Repository createOakRepository() {
return createOakRepository(new MemoryNodeStore());
}
-
+
public static Repository createOakRepository(NodeStore nodeStore) {
DefaultWhiteboard whiteboard = new DefaultWhiteboard();
final Oak oak = new Oak(nodeStore)
@@ -191,7 +191,7 @@ public class RepositoryTestHelper {
// .withAsyncIndexing()
.with(whiteboard)
;
-
+
// if (commitRateLimiter != null) {
// oak.with(commitRateLimiter);
// }
@@ -229,14 +229,16 @@ public class RepositoryTestHelper {
context.checking(new Expectations() {
{
allowing(resourceResolverFactory)
- .getAdministrativeResourceResolver(null);
+ .getServiceResourceResolver(null);
will(new Action() {
+ @Override
public Object invoke(Invocation invocation)
throws Throwable {
return new MockedResourceResolver(repositoryOrNull);
}
+ @Override
public void describeTo(Description arg0) {
arg0.appendText("whateva - im going to create a new mockedresourceresolver");
}
Modified: sling/trunk/bundles/extensions/discovery/impl/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/pom.xml?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/pom.xml (original)
+++ sling/trunk/bundles/extensions/discovery/impl/pom.xml Tue Nov 15 12:38:35 2016
@@ -153,7 +153,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.discovery.commons</artifactId>
- <version>1.0.4</version>
+ <version>1.0.17-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- besides including discovery.commons' normal jar above,
@@ -162,7 +162,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.discovery.commons</artifactId>
- <version>1.0.4</version>
+ <version>1.0.17-SNAPSHOT</version>
<scope>test</scope>
<type>test-jar</type>
</dependency>
@@ -185,7 +185,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.api</artifactId>
- <version>2.4.0</version>
+ <version>2.5.0</version>
<scope>provided</scope>
</dependency>
<dependency>
Modified: sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/DiscoveryServiceImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/DiscoveryServiceImpl.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/DiscoveryServiceImpl.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/DiscoveryServiceImpl.java Tue Nov 15 12:38:35 2016
@@ -103,7 +103,7 @@ public class DiscoveryServiceImpl extend
logger.debug("sync: no syncToken applicable");
callback.run();
}
-
+
@Override
public void cancelSync() {
// cancelling not applicable
@@ -115,7 +115,7 @@ public class DiscoveryServiceImpl extend
@Reference(cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC, referenceInterface = TopologyEventListener.class)
private TopologyEventListener[] eventListeners = new TopologyEventListener[0];
-
+
/**
* All property providers.
*/
@@ -151,7 +151,7 @@ public class DiscoveryServiceImpl extend
@Reference
private Config config;
-
+
@Reference
private SyncTokenService syncTokenService;
@@ -162,15 +162,16 @@ public class DiscoveryServiceImpl extend
private ViewStateManager viewStateManager;
- private final ReentrantLock viewStateManagerLock = new ReentrantLock();
-
+ private final ReentrantLock viewStateManagerLock = new ReentrantLock();
+
private final List<TopologyEventListener> pendingListeners = new LinkedList<TopologyEventListener>();
private TopologyEventListener changePropagationListener = new TopologyEventListener() {
+ @Override
public void handleTopologyEvent(TopologyEvent event) {
HeartbeatHandler handler = heartbeatHandler;
- if (activated && handler != null
+ if (activated && handler != null
&& (event.getType() == Type.TOPOLOGY_CHANGED || event.getType() == Type.PROPERTIES_CHANGED)) {
logger.info("changePropagationListener.handleTopologyEvent: topology changed - propagate through connectors");
handler.triggerAsyncConnectorPing();
@@ -179,8 +180,8 @@ public class DiscoveryServiceImpl extend
};
/** for testing only **/
- public static BaseDiscoveryService testConstructor(ResourceResolverFactory resourceResolverFactory,
- AnnouncementRegistry announcementRegistry,
+ public static BaseDiscoveryService testConstructor(ResourceResolverFactory resourceResolverFactory,
+ AnnouncementRegistry announcementRegistry,
ConnectorRegistry connectorRegistry,
ClusterViewServiceImpl clusterViewService,
HeartbeatHandler heartbeatHandler,
@@ -225,11 +226,12 @@ public class DiscoveryServiceImpl extend
logger.warn("registerMBean: Unable to register DiscoveryServiceImpl MBean", t);
}
}
-
+
+ @Override
protected void handleIsolatedFromTopology() {
if (heartbeatHandler!=null) {
// SLING-5030 part 2: when we detect being isolated we should
- // step at the end of the leader-election queue and
+ // step at the end of the leader-election queue and
// that can be achieved by resetting the leaderElectionId
// (which will in turn take effect on the next round of
// voting, or also double-checked when the local instance votes)
@@ -244,7 +246,7 @@ public class DiscoveryServiceImpl extend
}
}
}
-
+
/**
* Activate this service
*/
@@ -287,7 +289,7 @@ public class DiscoveryServiceImpl extend
// the first TOPOLOGY_INIT and afterwards
DefaultClusterView isolatedCluster = new DefaultClusterView(isolatedClusterId);
Map<String, String> emptyProperties = new HashMap<String, String>();
- DefaultInstanceDescription isolatedInstance =
+ DefaultInstanceDescription isolatedInstance =
new DefaultInstanceDescription(isolatedCluster, true, true, slingId, emptyProperties);
Collection<InstanceDescription> col = new ArrayList<InstanceDescription>();
col.add(isolatedInstance);
@@ -327,7 +329,7 @@ public class DiscoveryServiceImpl extend
viewStateManager.bind(listener);
}
pendingListeners.clear();
-
+
viewStateManager.bind(changePropagationListener);
} finally {
if (viewStateManagerLock!=null) {
@@ -349,8 +351,8 @@ public class DiscoveryServiceImpl extend
}
}
}
-
- registerMBean(bundleContext);
+
+ registerMBean(bundleContext);
logger.debug("DiscoveryServiceImpl activated.");
}
@@ -367,7 +369,7 @@ public class DiscoveryServiceImpl extend
viewStateManager.unbind(changePropagationListener);
viewStateManager.handleDeactivated();
}
-
+
activated = false;
} finally {
if (viewStateManagerLock!=null) {
@@ -512,7 +514,7 @@ public class DiscoveryServiceImpl extend
ResourceResolver resourceResolver = null;
try {
resourceResolver = resourceResolverFactory
- .getAdministrativeResourceResolver(null);
+ .getServiceResourceResolver(null);
Resource myInstance = ResourceHelper
.getOrCreateResource(
@@ -642,6 +644,7 @@ public class DiscoveryServiceImpl extend
/**
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
+ @Override
public int compareTo(final ProviderInfo o) {
// Sort by rank in ascending order.
if (this.ranking < o.ranking) {
@@ -666,10 +669,10 @@ public class DiscoveryServiceImpl extend
return provider.hashCode();
}
}
-
- /**
+
+ /**
* only checks for local clusterView changes.
- * thus eg avoids doing synchronized with annotationregistry
+ * thus eg avoids doing synchronized with annotationregistry
**/
public void checkForLocalClusterViewChange() {
viewStateManagerLock.lock();
@@ -772,20 +775,22 @@ public class DiscoveryServiceImpl extend
activated = false;
}
}
-
+
+ @Override
protected ClusterViewService getClusterViewService() {
return clusterViewService;
}
-
+
public ClusterViewServiceImpl getClusterViewServiceImpl() {
return clusterViewService;
}
+ @Override
protected AnnouncementRegistry getAnnouncementRegistry() {
return announcementRegistry;
}
- /** for testing only
+ /** for testing only
* @return */
protected ViewStateManager getViewStateManager() {
return viewStateManager;
Modified: sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/TopologyWebConsolePlugin.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/TopologyWebConsolePlugin.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/TopologyWebConsolePlugin.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/TopologyWebConsolePlugin.java Tue Nov 15 12:38:35 2016
@@ -44,7 +44,6 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
import org.apache.felix.webconsole.AbstractWebConsolePlugin;
import org.apache.felix.webconsole.WebConsoleConstants;
@@ -175,6 +174,7 @@ public class TopologyWebConsolePlugin ex
tv.findInstances(new InstanceFilter() {
+ @Override
public boolean accept(InstanceDescription instance) {
String slingId = instance.getSlingId();
if (logger.isDebugEnabled()) {
@@ -483,7 +483,7 @@ public class TopologyWebConsolePlugin ex
pw.println("</tbody>");
pw.println("</table>");
}
-
+
private String beautifiedDueTime(long secondsDue) {
if (secondsDue<-1) {
return "overdue";
@@ -569,6 +569,7 @@ public class TopologyWebConsolePlugin ex
/**
* keep a truncated history of the log events for information purpose (to be shown in the webconsole)
*/
+ @Override
public void handleTopologyEvent(final TopologyEvent event) {
if (event.getType() == Type.PROPERTIES_CHANGED) {
this.currentView = event.getNewView();
@@ -600,7 +601,7 @@ public class TopologyWebConsolePlugin ex
sb.append(", ");
}
sb.append("on instance "
- + newInstanceDescription.getSlingId() + (newInstanceDescription.isLeader() ? " [isLeader]" : "")
+ + newInstanceDescription.getSlingId() + (newInstanceDescription.isLeader() ? " [isLeader]" : "")
+ ": " + diff);
}
}
@@ -669,7 +670,7 @@ public class TopologyWebConsolePlugin ex
}
}
}
-
+
addEventLog(
event.getType(),
"old view: " + shortViewInfo(event.getOldView())
@@ -688,6 +689,7 @@ public class TopologyWebConsolePlugin ex
Set<InstanceDescription> foundInstances = view
.findInstances(new InstanceFilter() {
+ @Override
public boolean accept(InstanceDescription instance) {
return instance.getSlingId().equals(slingId);
}
@@ -920,7 +922,7 @@ public class TopologyWebConsolePlugin ex
}
pw.println();
pw.println();
-
+
}
/**
Modified: sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/ClusterViewServiceImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/ClusterViewServiceImpl.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/ClusterViewServiceImpl.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/ClusterViewServiceImpl.java Tue Nov 15 12:38:35 2016
@@ -69,13 +69,14 @@ public class ClusterViewServiceImpl impl
return service;
}
+ @Override
public String getSlingId() {
if (settingsService==null) {
return null;
}
return settingsService.getSlingId();
}
-
+
public void invalidateEstablishedViewId(String establishedViewId) {
if (establishedViewId != null &&
(failedEstablishedViewId == null ||
@@ -85,6 +86,7 @@ public class ClusterViewServiceImpl impl
failedEstablishedViewId = establishedViewId;
}
+ @Override
public LocalClusterView getLocalClusterView() throws UndefinedClusterViewException {
if (resourceResolverFactory==null) {
logger.warn("getClusterView: no resourceResolverFactory set at the moment.");
@@ -94,7 +96,7 @@ public class ClusterViewServiceImpl impl
ResourceResolver resourceResolver = null;
try {
resourceResolver = resourceResolverFactory
- .getAdministrativeResourceResolver(null);
+ .getServiceResourceResolver(null);
View view = ViewHelper.getEstablishedView(resourceResolver, config);
if (view == null) {
@@ -102,11 +104,11 @@ public class ClusterViewServiceImpl impl
throw new UndefinedClusterViewException(Reason.NO_ESTABLISHED_VIEW,
"no established view at the moment");
}
-
+
if (failedEstablishedViewId != null
&& failedEstablishedViewId.equals(view.getResource().getName())) {
// SLING-5195 : the heartbeat-handler-self-check has declared the currently
- // established view as invalid - hence we should now treat this as
+ // established view as invalid - hence we should now treat this as
// undefined clusterview
logger.debug("getClusterView: current establishedView is marked as invalid: "+failedEstablishedViewId);
throw new UndefinedClusterViewException(Reason.NO_ESTABLISHED_VIEW,
@@ -115,7 +117,7 @@ public class ClusterViewServiceImpl impl
EstablishedClusterView clusterViewImpl = new EstablishedClusterView(
config, view, getSlingId());
-
+
InstanceDescription local = clusterViewImpl.getLocalInstance();
if (local != null) {
return clusterViewImpl;
@@ -124,7 +126,7 @@ public class ClusterViewServiceImpl impl
+ "This is normal at startup. At other times is pseudo-network-partitioning is an indicator for repository/network-delays or clocks-out-of-sync (SLING-3432). "
+ "(increasing the heartbeatTimeout can help as a workaround too) "
+ "The local instance will stay in TOPOLOGY_CHANGING or pre _INIT mode until a new vote was successful.");
- throw new UndefinedClusterViewException(Reason.ISOLATED_FROM_TOPOLOGY,
+ throw new UndefinedClusterViewException(Reason.ISOLATED_FROM_TOPOLOGY,
"established view does not include local instance - isolated");
}
} catch (UndefinedClusterViewException e) {
Modified: sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandler.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandler.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandler.java Tue Nov 15 12:38:35 2016
@@ -62,7 +62,7 @@ import org.slf4j.LoggerFactory;
@Component(immediate = true)
@Service(value = {VotingHandler.class})
public class VotingHandler implements EventHandler {
-
+
public static enum VotingDetail {
PROMOTED,
WINNING,
@@ -71,9 +71,10 @@ public class VotingHandler implements Ev
UNCHANGED,
TIMEDOUT
}
-
+
private final static Comparator<VotingView> VOTING_COMPARATOR = new Comparator<VotingView>() {
+ @Override
public int compare(VotingView o1, VotingView o2) {
if (o1 == o2) {
return 0;
@@ -88,7 +89,7 @@ public class VotingHandler implements Ev
return (o1.getVotingId().compareTo(o2.getVotingId()));
}
};
-
+
/** the name used for the period job with the scheduler **/
protected String NAME = "discovery.impl.analyzeVotings.runner.";
@@ -114,7 +115,7 @@ public class VotingHandler implements Ev
private volatile boolean activated;
private ComponentContext context;
-
+
private ServiceRegistration eventHandlerRegistration;
/** for testing only **/
@@ -137,7 +138,7 @@ public class VotingHandler implements Ev
activated = false;
logger.info("deactivate: deactivated slingId: {}, this: {}", slingId, this);
}
-
+
@Activate
protected void activate(final ComponentContext context) {
slingId = slingSettingsService.getSlingId();
@@ -145,8 +146,8 @@ public class VotingHandler implements Ev
+ "." + slingId);
this.context = context;
activated = true;
-
- // once activated, register the eventHandler so that we can
+
+ // once activated, register the eventHandler so that we can
// start receiving and processing votings...
registerEventHandler();
logger.info("activated: activated ("+slingId+")");
@@ -179,6 +180,7 @@ public class VotingHandler implements Ev
/**
* handle repository changes and react to ongoing votings
*/
+ @Override
public void handleEvent(final Event event) {
if (!activated) {
return;
@@ -198,7 +200,7 @@ public class VotingHandler implements Ev
ResourceResolver resourceResolver = null;
try {
resourceResolver = resolverFactory
- .getAdministrativeResourceResolver(null);
+ .getServiceResourceResolver(null);
} catch (LoginException e) {
logger.error(
"handleEvent: could not log in administratively: " + e, e);
@@ -252,14 +254,14 @@ public class VotingHandler implements Ev
}
// SLING-3406: committing resourceResolver/session here, while we're in the synchronized
resourceResolver.commit();
-
+
// for test verification
result.put(winningVote, VotingDetail.PROMOTED);
return result;
} else {
logger.info("analyzeVotings: there is a winning vote. No need to vote any further. Expecting it to get promoted to established: "
+ winningVote);
-
+
result.put(winningVote, VotingDetail.WINNING);
return result;
}
@@ -317,7 +319,7 @@ public class VotingHandler implements Ev
continue;
}
if (yesVote != null) {
- // as soon as I found the one I should vote yes for,
+ // as soon as I found the one I should vote yes for,
// vote no for the rest
if (!votedNo) {
logger.info("analyzeVotings: already voted yes, so voting no for: "+voting);
@@ -351,7 +353,7 @@ public class VotingHandler implements Ev
logger.debug("analyzeVotings: result: my yes vote was for: " + yesVote);
return result;
}
-
+
public void cleanupTimedoutVotings(final ResourceResolver resourceResolver) {
List<VotingView> timedoutVotings = VotingHelper
.listTimedoutVotings(resourceResolver,
@@ -410,7 +412,7 @@ public class VotingHandler implements Ev
previousViewsResource = ResourceHelper
.getOrCreateResource(
resourceResolver,
- config.getPreviousViewPath());
+ config.getPreviousViewPath());
}
// step 2: retire the existing established view.
@@ -427,7 +429,7 @@ public class VotingHandler implements Ev
logger.debug("promote: moving the old established view to previous views: "
+ retiredView.getPath());
}
- ResourceHelper.moveResource(retiredView,
+ ResourceHelper.moveResource(retiredView,
previousViewsResource.getPath()
+ "/" + retiredView.getName());
} else {
Modified: sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatHandler.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatHandler.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatHandler.java Tue Nov 15 12:38:35 2016
@@ -99,13 +99,13 @@ public class HeartbeatHandler extends Ba
/** whether or not to reset the leaderElectionId at next heartbeat time **/
private volatile boolean resetLeaderElectionId = false;
- /** SLING-5030 : upon resetLeaderElectionId() a newLeaderElectionId is calculated
+ /** SLING-5030 : upon resetLeaderElectionId() a newLeaderElectionId is calculated
* and passed on to the VotingHandler - but the actual storing under ./clusterInstances
* is only done on heartbeats - this field is used to temporarily store the new
* leaderElectionId that the next heartbeat then stores
*/
private volatile String newLeaderElectionId;
-
+
/** SLING-2892: remember first heartbeat written to repository by this instance **/
private long firstHeartbeatWritten = -1;
@@ -123,10 +123,10 @@ public class HeartbeatHandler extends Ba
/** for testing only **/
public static HeartbeatHandler testConstructor(
SlingSettingsService slingSettingsService,
- ResourceResolverFactory factory,
- AnnouncementRegistry announcementRegistry,
+ ResourceResolverFactory factory,
+ AnnouncementRegistry announcementRegistry,
ConnectorRegistry connectorRegistry,
- Config config,
+ Config config,
Scheduler scheduler,
VotingHandler votingHandler) {
HeartbeatHandler handler = new HeartbeatHandler();
@@ -139,37 +139,37 @@ public class HeartbeatHandler extends Ba
handler.votingHandler = votingHandler;
return handler;
}
-
+
@Override
protected AnnouncementRegistry getAnnouncementRegistry() {
return announcementRegistry;
}
-
+
@Override
protected BaseConfig getConnectorConfig() {
return config;
}
-
+
@Override
protected ConnectorRegistry getConnectorRegistry() {
return connectorRegistry;
}
-
+
@Override
protected ResourceResolverFactory getResourceResolverFactory() {
return resourceResolverFactory;
}
-
+
@Override
protected Scheduler getScheduler() {
return scheduler;
}
-
+
@Override
protected SlingSettingsService getSlingSettingsService() {
return slingSettingsService;
}
-
+
@Override
protected void doActivate() {
// on activate the resetLeaderElectionId is set to true to ensure that
@@ -186,7 +186,7 @@ public class HeartbeatHandler extends Ba
logger.info("doActivate: activated with runtimeId: {}, slingId: {}", runtimeId, slingId);
}
-
+
@Override
protected void deactivate() {
super.deactivate();
@@ -195,7 +195,7 @@ public class HeartbeatHandler extends Ba
periodicCheckJob = null;
}
}
-
+
/**
* The initialize method is called by the DiscoveryServiceImpl.activate
* as we require the discoveryService (and the discoveryService has
@@ -232,7 +232,7 @@ public class HeartbeatHandler extends Ba
}
// SLING-5195 - to account for repository delays, the writing of heartbeats and voting
- // should be done independently of getting the current clusterView and
+ // should be done independently of getting the current clusterView and
// potentially sending a topology event.
// so this second part is now done (additionally) in a 2nd runner here:
try {
@@ -263,7 +263,7 @@ public class HeartbeatHandler extends Ba
+ " => maxMillisSinceHb=" + maxMillisSinceHb + "). Flagging us as (still) changing");
// mark the current establishedView as faulty
invalidateCurrentEstablishedView();
-
+
// then tell the listeners immediately
// note that just calling handleTopologyChanging alone - without the above invalidate -
// won't be sufficient, because that would only affect the listeners, not the
@@ -278,7 +278,7 @@ public class HeartbeatHandler extends Ba
discoveryService.checkForLocalClusterViewChange();
logger.debug("checkForLocalClusterViewChange/.run: check for topology change done.");
}
-
+
});
} catch (Exception e) {
logger.error("activate: Could not start heartbeat runner: " + e, e);
@@ -291,7 +291,7 @@ public class HeartbeatHandler extends Ba
logger.error("getResourceResolver: resourceResolverFactory is null!");
return null;
}
- return resourceResolverFactory.getAdministrativeResourceResolver(null);
+ return resourceResolverFactory.getServiceResourceResolver(null);
}
/** Calcualte the local cluster instance path **/
@@ -300,7 +300,7 @@ public class HeartbeatHandler extends Ba
}
/**
- * Hook that will cause a reset of the leaderElectionId
+ * Hook that will cause a reset of the leaderElectionId
* on next invocation of issueClusterLocalHeartbeat.
* @return true if the leaderElectionId was reset - false if that was not
* necessary as that happened earlier already and it has not propagated
@@ -345,12 +345,14 @@ public class HeartbeatHandler extends Ba
* and then a remote heartbeat (to all the topology connectors
* which announce this part of the topology to others)
*/
+ @Override
protected void issueHeartbeat() {
updateProperties();
issueClusterLocalHeartbeat();
issueConnectorPings();
}
+ @Override
protected void updateProperties() {
if (discoveryServiceImpl == null) {
logger.debug("updateProperties: discoveryService is null");
@@ -358,7 +360,7 @@ public class HeartbeatHandler extends Ba
discoveryServiceImpl.updateProperties();
}
}
-
+
/** Issue a cluster local heartbeat (into the repository) **/
protected void issueClusterLocalHeartbeat() {
if (logger.isDebugEnabled()) {
@@ -454,7 +456,7 @@ public class HeartbeatHandler extends Ba
resourceMap.put(PROPERTY_ID_SLING_HOME_PATH, slingHomePath);
final String endpointsAsString = getEndpointsAsString();
resourceMap.put(PROPERTY_ID_ENDPOINTS, endpointsAsString);
- logger.info("issueClusterLocalHeartbeat: storing my runtimeId: {}, endpoints: {} and sling home path: {}",
+ logger.info("issueClusterLocalHeartbeat: storing my runtimeId: {}, endpoints: {} and sling home path: {}",
new Object[]{runtimeId, endpointsAsString, slingHomePath});
}
if (resetLeaderElectionId || !resourceMap.containsKey("leaderElectionId")) {
@@ -533,6 +535,7 @@ public class HeartbeatHandler extends Ba
/** Check whether the established view matches the reality, ie matches the
* heartbeats
*/
+ @Override
protected void doCheckView() {
super.doCheckView();
@@ -580,12 +583,12 @@ public class HeartbeatHandler extends Ba
if (winningVoting != null || (numOpenNonWinningVotes > 0)) {
// then there are votings pending and I shall wait for them to
// settle
-
+
// but first: make sure we sent the TOPOLOGY_CHANGING
logger.info("doCheckViewWith: there are pending votings, marking topology as changing...");
invalidateCurrentEstablishedView();
discoveryServiceImpl.handleTopologyChanging();
-
+
if (logger.isDebugEnabled()) {
logger.debug("doCheckViewWith: "
+ numOpenNonWinningVotes
@@ -629,7 +632,7 @@ public class HeartbeatHandler extends Ba
establishedViewMatches = mismatchDetails == null;
}
}
-
+
if (establishedViewMatches) {
// that's the normal case. the established view matches what we're
// seeing.
@@ -637,18 +640,18 @@ public class HeartbeatHandler extends Ba
logger.debug("doCheckViewWith: no pending nor winning votes. view is fine. we're all happy.");
return;
}
-
+
// immediately send a TOPOLOGY_CHANGING - could already be sent, but just to be sure
logger.info("doCheckViewWith: no matching established view, marking topology as changing");
invalidateCurrentEstablishedView();
discoveryServiceImpl.handleTopologyChanging();
-
+
List<VotingView> myYesVotes = VotingHelper.getYesVotingsOf(resourceResolver, config, slingId);
if (myYesVotes != null && myYesVotes.size() > 0) {
logger.info("doCheckViewWith: I have voted yes (" + myYesVotes.size() + "x)- the vote was not yet promoted but expecting it to be soon. Not voting again in the meantime. My yes vote was for: "+myYesVotes);
return;
}
-
+
if (logger.isDebugEnabled()) {
logger.debug("doCheckViewWith: no pending nor winning votes. But: view does not match established or no established yet. Initiating a new voting");
Iterator<String> it = liveInstances.iterator();
@@ -673,7 +676,7 @@ public class HeartbeatHandler extends Ba
VotingView.newVoting(resourceResolver, config, votingId, slingId, liveInstances);
}
-
+
/**
* Mark the current establishedView as invalid - requiring it to be
* replaced with a new one, be it by another instance or this one,
@@ -689,7 +692,7 @@ public class HeartbeatHandler extends Ba
failedEstablishedViewId = lastEstablishedViewId;
discoveryServiceImpl.getClusterViewServiceImpl().invalidateEstablishedViewId(lastEstablishedViewId);
}
-
+
/**
* Management function to trigger the otherwise algorithm-dependent
* start of a new voting.
@@ -720,5 +723,5 @@ public class HeartbeatHandler extends Ba
}
}
}
-
+
}
Modified: sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/DiscoveryServiceImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/DiscoveryServiceImplTest.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/DiscoveryServiceImplTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/DiscoveryServiceImplTest.java Tue Nov 15 12:38:35 2016
@@ -26,7 +26,6 @@ import org.apache.sling.discovery.base.i
import org.apache.sling.discovery.base.its.setup.VirtualInstance;
import org.apache.sling.discovery.base.its.setup.VirtualInstanceBuilder;
import org.apache.sling.discovery.commons.providers.base.DummyListener;
-import org.apache.sling.discovery.impl.DiscoveryServiceImpl;
import org.apache.sling.discovery.impl.common.heartbeat.HeartbeatHandler;
import org.apache.sling.discovery.impl.setup.FullJR2VirtualInstanceBuilder;
import org.junit.Test;
@@ -46,7 +45,7 @@ public class DiscoveryServiceImplTest ex
public void testLocalClusterSyncTokenIdChange() throws Exception {
logger.info("testLocalClusterSyncTokenIdChange: start");
logger.info("testLocalClusterSyncTokenIdChange: creating instance1...");
- FullJR2VirtualInstanceBuilder builder1 =
+ FullJR2VirtualInstanceBuilder builder1 =
(FullJR2VirtualInstanceBuilder) new FullJR2VirtualInstanceBuilder()
.setDebugName("instance1")
.newRepository("/var/testLocalClusterSyncTokenIdChange/", true)
@@ -55,7 +54,7 @@ public class DiscoveryServiceImplTest ex
.setMinEventDelay(0);
VirtualInstance instance1 = builder1.build();
logger.info("testLocalClusterSyncTokenIdChange: creating instance2...");
- FullJR2VirtualInstanceBuilder builder2 =
+ FullJR2VirtualInstanceBuilder builder2 =
(FullJR2VirtualInstanceBuilder) new FullJR2VirtualInstanceBuilder()
.setDebugName("instance2")
.useRepositoryOf(instance1)
@@ -63,15 +62,15 @@ public class DiscoveryServiceImplTest ex
.setConnectorPingTimeout(999)
.setMinEventDelay(0);
VirtualInstance instance2 = builder2.build();
-
+
logger.info("testLocalClusterSyncTokenIdChange: registering listener...");
DummyListener listener = new DummyListener();
DiscoveryServiceImpl discoveryService = (DiscoveryServiceImpl) instance1.getDiscoveryService();
discoveryService.bindTopologyEventListener(listener);
-
+
assertEquals(0, discoveryService.getViewStateManager().waitForAsyncEvents(2000));
assertEquals(0, listener.countEvents());
-
+
logger.info("testLocalClusterSyncTokenIdChange: doing some heartbeating...");
instance1.heartbeatsAndCheckView();
instance2.heartbeatsAndCheckView();
@@ -83,10 +82,10 @@ public class DiscoveryServiceImplTest ex
logger.info("testLocalClusterSyncTokenIdChange: expecting to have received the INIT...");
assertEquals(0, discoveryService.getViewStateManager().waitForAsyncEvents(2000));
assertEquals(1, listener.countEvents());
-
+
ResourceResolverFactory factory = instance1.getResourceResolverFactory();
- ResourceResolver resolver = factory.getAdministrativeResourceResolver(null);
-
+ ResourceResolver resolver = factory.getServiceResourceResolver(null);
+
instance1.heartbeatsAndCheckView();
instance2.heartbeatsAndCheckView();
Thread.sleep(1000);
@@ -94,14 +93,14 @@ public class DiscoveryServiceImplTest ex
logger.info("testLocalClusterSyncTokenIdChange: after another heartbeat nothing more should have been triggered...");
assertEquals(0, discoveryService.getViewStateManager().waitForAsyncEvents(2000));
assertEquals(1, listener.countEvents());
-
+
// simulate a change in the establishedView's viewId - which can be
// achieved by triggering a revoting - which should result with the
// same view cos the instances have not changed
HeartbeatHandler heartbeatHandler = (HeartbeatHandler) instance1.getViewChecker();
logger.info("testLocalClusterSyncTokenIdChange: forcing a new voting to start...");
heartbeatHandler.startNewVoting();
-
+
logger.info("testLocalClusterSyncTokenIdChange: doing some heartbeats to finish the voting...");
instance1.heartbeatsAndCheckView();
instance2.heartbeatsAndCheckView();
Modified: sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/RepositoryDelaysTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/RepositoryDelaysTest.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/RepositoryDelaysTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/RepositoryDelaysTest.java Tue Nov 15 12:38:35 2016
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertFal
import static org.junit.Assert.assertTrue;
import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
+import org.apache.log4j.spi.RootLogger;
import org.apache.sling.discovery.TopologyView;
import org.apache.sling.commons.testing.junit.categories.Slow;
import org.apache.sling.discovery.TopologyEvent.Type;
@@ -56,14 +56,14 @@ public class RepositoryDelaysTest {
@Before
public void setUp() throws Exception {
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
logLevel = discoveryLogger.getLevel();
- discoveryLogger.setLevel(Level.TRACE);
+ discoveryLogger.setLevel(Level.TRACE);
}
-
+
@After
public void teartDown() throws Throwable {
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
discoveryLogger.setLevel(logLevel);
if (instance1!=null) {
instance1.stopViewChecker();
@@ -76,7 +76,7 @@ public class RepositoryDelaysTest {
instance2 = null;
}
}
-
+
/**
* SLING-5195 : simulate slow session.saves that block
* the calling thread for non-trivial amounts of time,
@@ -102,7 +102,7 @@ public class RepositoryDelaysTest {
.setConnectorPingInterval(1)
.setConnectorPingTimeout(3)
.build();
-
+
instance1.setDelay("pre.commit", 12000);
instance1.startViewChecker(1);
instance2.startViewChecker(1);
@@ -113,34 +113,34 @@ public class RepositoryDelaysTest {
// should be init but alone
TopologyView t1 = instance1.getDiscoveryService().getTopology();
assertFalse(t1.isCurrent());
-
+
TopologyView t2 = instance2.getDiscoveryService().getTopology();
assertTrue(t2.isCurrent());
assertEquals(1, t2.getInstances().size());
-
+
instance1.setDelay("pre.commit", -1);
Thread.sleep(3000);
TopologyView t1b = instance1.getDiscoveryService().getTopology();
assertTrue(t1b.isCurrent());
assertEquals(2, t1b.getInstances().size());
-
+
TopologyView t2b = instance2.getDiscoveryService().getTopology();
assertTrue(t2b.isCurrent());
assertEquals(2, t2b.getInstances().size());
-
+
instance1.setDelay("pre.commit", 59876);
instance2.setDelay("pre.commit", 60000);
logger.info("<main> both instances marked as delaying 1min - but with new background checks we should go changing within 3sec");
Thread.sleep(8000);
-
+
TopologyView t1c = instance1.getDiscoveryService().getTopology();
assertFalse(t1c.isCurrent());
-
+
TopologyView t2c = instance2.getDiscoveryService().getTopology();
assertFalse(t2c.isCurrent());
}
-
+
/**
* Tests whether the not-current view returned by getTopology()
* matches what listeners get in TOPOLOGY_CHANGING - it should
@@ -148,7 +148,7 @@ public class RepositoryDelaysTest {
*/
@Test
public void testOldView() throws Throwable {
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
discoveryLogger.setLevel(Level.INFO); // info should do
FullJR2VirtualInstanceBuilder builder = newBuilder();
builder.setDebugName("firstInstanceA")
@@ -178,7 +178,7 @@ public class RepositoryDelaysTest {
t1 = instance1.getDiscoveryService().getTopology();
assertTrue(t1.isCurrent()); // current it should now be
assertEquals(1, t1.getInstances().size()); // and it must contain the local instance
-
+
logger.info("testOldView: creating instance2");
l1.addExpected(Type.TOPOLOGY_CHANGING);
FullJR2VirtualInstanceBuilder builder2 = newBuilder();
@@ -188,7 +188,7 @@ public class RepositoryDelaysTest {
.setMinEventDelay(3);
instance2 = builder2.fullBuild();
instance2.stopVoting();
-
+
logger.info("testOldView: instance2 created, now issuing one heartbeat with instance2 first, so that instance1 can take note of it");
instance2.heartbeatsAndCheckView();
logger.info("testOldView: now instance1 is also doing a heartbeat and should see that a new instance is there");
@@ -203,7 +203,7 @@ public class RepositoryDelaysTest {
t1 = instance1.getDiscoveryService().getTopology();
assertFalse(t1.isCurrent()); // current it should not be
assertEquals(1, t1.getInstances().size()); // but it should still contain the local instance from before
-
+
l1.addExpected(Type.TOPOLOGY_CHANGED);
logger.info("testOldView: now issuing 3 rounds of heartbeats/checks and expecting a TOPOLOGY_CHANGED then");
@@ -218,17 +218,17 @@ public class RepositoryDelaysTest {
instance2.heartbeatsAndCheckView();
instance1.heartbeatsAndCheckView();
Thread.sleep(1200);
-
+
assertEquals(3, l1.getEvents().size()); // INIT, CHANGING and CHANGED
assertEquals(0, l1.getRemainingExpectedCount()); // no remaining expected
assertEquals(0, l1.getUnexpectedCount()); // and no unexpected
t1 = instance1.getDiscoveryService().getTopology();
assertTrue(t1.isCurrent()); // and we should be current again
assertEquals(2, t1.getInstances().size()); // and contain both instances now
-
+
// timeout is set to 3sec, so we now do heartbeats for 4sec with only instance1
// to let instance2 crash
-
+
// force instance1 to no longer analyze the votings
// since stopVoting() only deactivates the listener, we also
// have to set votingHandler of heartbeatHandler to null
@@ -245,5 +245,5 @@ public class RepositoryDelaysTest {
assertFalse(t1.isCurrent()); // we should still be !current
assertEquals(2, t1.getInstances().size()); // and contain both instances
}
-
+
}