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/10/22 17:35:44 UTC

svn commit: r1710040 - in /sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/base: MinEventDelayHandler.java ViewStateManagerImpl.java

Author: stefanegli
Date: Thu Oct 22 15:35:44 2015
New Revision: 1710040

URL: http://svn.apache.org/viewvc?rev=1710040&view=rev
Log:
SLING-5173 : bugfix for leader changes: leader change was treated as a properties change - which was very bad - now it is properly treated as a TOPOLOGY_CHANGED. Note that leader change should not happen in an otherwise unchanged topology - but it can if one instance's discovery.oak bundle for example is restarted, thus getting a lower leaderElectionId. Thus discovery.commons must account for this

Modified:
    sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/base/MinEventDelayHandler.java
    sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/base/ViewStateManagerImpl.java

Modified: sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/base/MinEventDelayHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/base/MinEventDelayHandler.java?rev=1710040&r1=1710039&r2=1710040&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/base/MinEventDelayHandler.java (original)
+++ sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/base/MinEventDelayHandler.java Thu Oct 22 15:35:44 2015
@@ -87,7 +87,7 @@ class MinEventDelayHandler {
             return false;
         }
         
-        if (viewStateManager.isPropertiesDiff(newView)) {
+        if (viewStateManager.onlyDiffersInProperties(newView)) {
             logger.info("handlesNewView: only properties differ, hence no delaying applicable");
             return false;
         }

Modified: sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/base/ViewStateManagerImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/base/ViewStateManagerImpl.java?rev=1710040&r1=1710039&r2=1710040&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/base/ViewStateManagerImpl.java (original)
+++ sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/base/ViewStateManagerImpl.java Thu Oct 22 15:35:44 2015
@@ -454,7 +454,7 @@ public class ViewStateManagerImpl implem
                     logger.debug("handleNewViewNonDelayed: we were not in changing state and new view matches old, so - ignoring");
                     return false;
                 }
-                if (previousView==null || !isPropertiesDiff(newView)) {
+                if (previousView==null || !onlyDiffersInProperties(newView)) {
                     logger.debug("handleNewViewNonDelayed: implicitly triggering a handleChanging as we were not in changing state");
                     handleChanging();
                     logger.debug("handleNewViewNonDelayed: implicitly triggering of a handleChanging done");
@@ -475,7 +475,7 @@ public class ViewStateManagerImpl implem
             }
             
             // now check if the view indeed changed or if it was just the properties
-            if (!isChanging && isPropertiesDiff(newView)) {
+            if (!isChanging && onlyDiffersInProperties(newView)) {
                 // well then send a properties changed event only
                 // and that one does not go via consistencyservice
                 logger.info("handleNewViewNonDelayed: properties changed to: "+newView);
@@ -552,7 +552,7 @@ public class ViewStateManagerImpl implem
         }
     }
 
-    protected boolean isPropertiesDiff(BaseTopologyView newView) {
+    protected boolean onlyDiffersInProperties(BaseTopologyView newView) {
         if (previousView==null) {
             return false;
         }
@@ -571,13 +571,17 @@ public class ViewStateManagerImpl implem
         }
         
         for(InstanceDescription oldInstance : previousView.getInstances()) {
-            if (!newIds.contains(oldInstance.getSlingId())) {
+            InstanceDescription newInstance = newView.getInstance(oldInstance.getSlingId());
+            if (newInstance == null) {
+                return false;
+            }
+            if (oldInstance.isLeader() != newInstance.isLeader()) {
                 return false;
             }
         }
         return true;
     }
-
+    
     private void doHandleConsistent(BaseTopologyView newView) {
         logger.trace("doHandleConsistent: start");