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 2015/11/05 15:27:43 UTC
svn commit: r1712784 - in /sling/trunk/bundles/extensions/discovery/impl/src:
main/java/org/apache/sling/discovery/impl/common/resource/
test/java/org/apache/sling/discovery/impl/
test/java/org/apache/sling/discovery/impl/cluster/
Author: stefanegli
Date: Thu Nov 5 14:27:43 2015
New Revision: 1712784
URL: http://svn.apache.org/viewvc?rev=1712784&view=rev
Log:
SLING-5258 : ensure a new establishedView (with different syncTokenId) always triggers a TOPOLOGY_CHANGED - the EstablishedClsuterView therefore now properly sets the syncTokenId using the votingId - that will, thanks to SLING-5256 then achieves the desired result
Added:
sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/DiscoveryServiceImplTest.java
- copied, changed from r1712529, sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/DiscoveryServiceImplTest.java
Removed:
sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/DiscoveryServiceImplTest.java
Modified:
sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/resource/EstablishedClusterView.java
Modified: sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/resource/EstablishedClusterView.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/resource/EstablishedClusterView.java?rev=1712784&r1=1712783&r2=1712784&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/resource/EstablishedClusterView.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/resource/EstablishedClusterView.java Thu Nov 5 14:27:43 2015
@@ -50,7 +50,7 @@ public class EstablishedClusterView exte
/** Construct a new established cluster view **/
public EstablishedClusterView(final Config config, final View view,
final String localId) {
- super(view.getViewId(), null /* localClusterSyncTokenId not supported */);
+ super(view.getViewId(), view.getResource().getName());
final Resource viewRes = view.getResource();
if (viewRes == null) {
Copied: sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/DiscoveryServiceImplTest.java (from r1712529, sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/DiscoveryServiceImplTest.java)
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/DiscoveryServiceImplTest.java?p2=sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/DiscoveryServiceImplTest.java&p1=sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/DiscoveryServiceImplTest.java&r1=1712529&r2=1712784&rev=1712784&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/DiscoveryServiceImplTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/DiscoveryServiceImplTest.java Thu Nov 5 14:27:43 2015
@@ -16,17 +16,102 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.sling.discovery.impl.cluster;
+package org.apache.sling.discovery.impl;
+import static org.junit.Assert.assertEquals;
+
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.discovery.base.its.AbstractDiscoveryServiceTest;
+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;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class DiscoveryServiceImplTest extends AbstractDiscoveryServiceTest {
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
@Override
public VirtualInstanceBuilder newBuilder() {
return new FullJR2VirtualInstanceBuilder();
}
+ @Test
+ public void testLocalClusterSyncTokenIdChange() throws Exception {
+ logger.info("testLocalClusterSyncTokenIdChange: start");
+ logger.info("testLocalClusterSyncTokenIdChange: creating instance1...");
+ FullJR2VirtualInstanceBuilder builder1 =
+ (FullJR2VirtualInstanceBuilder) new FullJR2VirtualInstanceBuilder()
+ .setDebugName("instance1")
+ .newRepository("/var/testLocalClusterSyncTokenIdChange/", true)
+ .setConnectorPingInterval(999)
+ .setConnectorPingTimeout(999)
+ .setMinEventDelay(0);
+ VirtualInstance instance1 = builder1.build();
+ logger.info("testLocalClusterSyncTokenIdChange: creating instance2...");
+ FullJR2VirtualInstanceBuilder builder2 =
+ (FullJR2VirtualInstanceBuilder) new FullJR2VirtualInstanceBuilder()
+ .setDebugName("instance2")
+ .useRepositoryOf(instance1)
+ .setConnectorPingInterval(999)
+ .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();
+ Thread.sleep(1000);
+ instance1.heartbeatsAndCheckView();
+ instance2.heartbeatsAndCheckView();
+ Thread.sleep(1000);
+
+ 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);
+
+ instance1.heartbeatsAndCheckView();
+ instance2.heartbeatsAndCheckView();
+ Thread.sleep(1000);
+
+ 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();
+ Thread.sleep(1000);
+ instance1.heartbeatsAndCheckView();
+ instance2.heartbeatsAndCheckView();
+ Thread.sleep(1000);
+
+ logger.info("testLocalClusterSyncTokenIdChange: now we should have gotten a CHANGING/CHANGED pair additionally...");
+ assertEquals(0, discoveryService.getViewStateManager().waitForAsyncEvents(2000));
+ assertEquals(3, listener.countEvents());
+ }
}