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");