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/04/16 12:27:11 UTC

svn commit: r1674038 - in /sling/trunk/bundles/extensions/discovery/impl/src: main/java/org/apache/sling/discovery/impl/topology/ test/java/org/apache/sling/discovery/impl/topology/

Author: stefanegli
Date: Thu Apr 16 10:27:10 2015
New Revision: 1674038

URL: http://svn.apache.org/r1674038
Log:
SLING-4621 : assure a (manually forced) leader change within an otherwise unchanged clusterView is reported correctly - ie when doing a compareTopology it should return TOPOLOGY_CHANGED, not null

Modified:
    sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/TopologyViewImpl.java
    sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/TopologyTestHelper.java
    sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/TopologyViewImplTest.java

Modified: sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/TopologyViewImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/TopologyViewImpl.java?rev=1674038&r1=1674037&r2=1674038&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/TopologyViewImpl.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/TopologyViewImpl.java Thu Apr 16 10:27:10 2015
@@ -94,6 +94,10 @@ public class TopologyViewImpl implements
             	logger.debug("compareTopology: cluster view id does not match");
                 return Type.TOPOLOGY_CHANGED;
             }
+            if (!instance.isLeader()==matchingInstance.isLeader()) {
+                logger.debug("compareTopology: leaders differ");
+                return Type.TOPOLOGY_CHANGED;
+            }
             if (!instance.getProperties().equals(
                     matchingInstance.getProperties())) {
                 propertiesChanged = true;

Modified: sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/TopologyTestHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/TopologyTestHelper.java?rev=1674038&r1=1674037&r2=1674038&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/TopologyTestHelper.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/TopologyTestHelper.java Thu Apr 16 10:27:10 2015
@@ -146,4 +146,15 @@ public class TopologyTestHelper {
         return instance;
     }
 
+    public static TopologyViewImpl cloneTopologyView(TopologyViewImpl view,
+            String newLeader) throws NoSuchFieldException {
+        final TopologyViewImpl clone = cloneTopologyView(view);
+        final DefaultClusterViewImpl cluster = (DefaultClusterViewImpl) clone.getClusterViews().iterator().next();
+        for (Iterator it = cluster.getInstances().iterator(); it.hasNext();) {
+            DefaultInstanceDescriptionImpl id = (DefaultInstanceDescriptionImpl) it.next();
+            PrivateAccessor.setField(id, "isLeader", id.getSlingId().equals(newLeader));
+        }
+        return clone;
+    }
+
 }

Modified: sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/TopologyViewImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/TopologyViewImplTest.java?rev=1674038&r1=1674037&r2=1674038&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/TopologyViewImplTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/TopologyViewImplTest.java Thu Apr 16 10:27:10 2015
@@ -19,6 +19,8 @@
 package org.apache.sling.discovery.impl.topology;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.fail;
@@ -40,6 +42,38 @@ import org.junit.Test;
 public class TopologyViewImplTest {
 
     @Test
+    public void testForcedLeaderChangeCompare() throws Exception {
+        // create view 1 with first instance the leader
+        final String slingId1 = UUID.randomUUID().toString();
+        final TopologyViewImpl view1 = TopologyTestHelper.createTopologyView(UUID
+                .randomUUID().toString(), slingId1);
+        final DefaultInstanceDescriptionImpl id2 = TopologyTestHelper.addInstanceDescription(view1, TopologyTestHelper
+                .createInstanceDescription(view1.getClusterViews().iterator()
+                        .next()));
+        final String slingId2 = id2.getSlingId();
+        final DefaultInstanceDescriptionImpl id3 = TopologyTestHelper.addInstanceDescription(view1, TopologyTestHelper
+                .createInstanceDescription(view1.getClusterViews().iterator()
+                        .next()));
+        final String slingId3 = id3.getSlingId();
+        
+        // now create view 2 with exactly the same instances as above, but the second instance the leader
+        TopologyViewImpl view2 = TopologyTestHelper.cloneTopologyView(view1, slingId2);
+        // make sure we've chosen a new leader:
+        assertNotEquals(view1.getClusterViews().iterator().next().getLeader().getSlingId(),
+                view2.getClusterViews().iterator().next().getLeader().getSlingId());
+        // and now test the compare method which should catch the leader change
+        assertTrue(view1.compareTopology(view2)==Type.TOPOLOGY_CHANGED);
+        
+        // same thing now with view3 which takes slingId3 as the leader
+        TopologyViewImpl view3 = TopologyTestHelper.cloneTopologyView(view1, slingId3);
+        // make sure we've chosen a new leader:
+        assertNotEquals(view1.getClusterViews().iterator().next().getLeader().getSlingId(),
+                view3.getClusterViews().iterator().next().getLeader().getSlingId());
+        // and now test the compare method which should catch the leader change
+        assertTrue(view1.compareTopology(view3)==Type.TOPOLOGY_CHANGED);
+    }
+    
+    @Test
     public void testCompare() throws Exception {
 
         TopologyViewImpl newView = TopologyTestHelper.createTopologyView(UUID