Author: stefanegli
Date: Tue Apr 23 12:25:45 2013
New Revision: 1470917
URL: http://svn.apache.org/r1470917
Log:
SLING-2827 : fixed erroneous PROPERTIES_CHANGED being sent even though an
instance 'down the line' changed
Modified:
sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/TopologyViewImpl.java
sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/TopologyViewImplTest.java
Modified:
sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/TopologyViewImpl.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/TopologyViewImpl.java?rev=1470917&r1=1470916&r2=1470917&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/TopologyViewImpl.java
(original)
+++
sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/TopologyViewImpl.java
Tue Apr 23 12:25:45 2013
@@ -70,6 +70,7 @@ public class TopologyViewImpl implements
if (this.instances.size() != other.instances.size()) {
return Type.TOPOLOGY_CHANGED;
}
+ boolean propertiesChanged = false;
for (Iterator<InstanceDescription> it = instances.iterator(); it
.hasNext();) {
InstanceDescription instance = it.next();
@@ -92,10 +93,14 @@ public class TopologyViewImpl implements
}
if (!instance.getProperties().equals(
matchingInstance.getProperties())) {
- return Type.PROPERTIES_CHANGED;
+ propertiesChanged = true;
}
}
- return null;
+ if (propertiesChanged) {
+ return Type.PROPERTIES_CHANGED;
+ } else {
+ return null;
+ }
}
@Override
Modified:
sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/TopologyViewImplTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/TopologyViewImplTest.java?rev=1470917&r1=1470916&r2=1470917&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/TopologyViewImplTest.java
(original)
+++
sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/TopologyViewImplTest.java
Tue Apr 23 12:25:45 2013
@@ -23,13 +23,17 @@ import static org.junit.Assert.assertNot
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
+import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
+import junitx.util.PrivateAccessor;
+
import org.apache.sling.discovery.InstanceDescription;
import org.apache.sling.discovery.InstanceFilter;
import org.apache.sling.discovery.TopologyEvent.Type;
+import org.apache.sling.discovery.impl.common.DefaultClusterViewImpl;
import org.apache.sling.discovery.impl.common.DefaultInstanceDescriptionImpl;
import org.junit.Test;
@@ -92,6 +96,19 @@ public class TopologyViewImplTest {
p.remove("a");
p.put("a", "B");
assertNull(newView.compareTopology(oldView));
+
+ // now change the properties of the first instance but modify the
second instance' cluster
+ Iterator<InstanceDescription> it = newView.getInstances().iterator();
+ DefaultInstanceDescriptionImpl firstInstance =
(DefaultInstanceDescriptionImpl) it.next();
+ assertNotNull(firstInstance);
+ DefaultInstanceDescriptionImpl secondInstance =
(DefaultInstanceDescriptionImpl) it.next();
+ assertNotNull(secondInstance);
+ TopologyTestHelper.getWriteableProperties(
+ firstInstance).put("c", "d");
+ DefaultClusterViewImpl cluster = new
DefaultClusterViewImpl(UUID.randomUUID().toString());
+ PrivateAccessor.setField(secondInstance, "clusterView", null);
+ cluster.addInstanceDescription(secondInstance);
+ assertEquals(Type.TOPOLOGY_CHANGED, newView.compareTopology(oldView));
}
@Test