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