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