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 2013/04/23 14:25:46 UTC

svn commit: r1470917 - in /sling/trunk/contrib/extensions/discovery/impl/src: main/java/org/apache/sling/discovery/impl/topology/TopologyViewImpl.java test/java/org/apache/sling/discovery/impl/topology/TopologyViewImplTest.java

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