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/21 13:39:26 UTC

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

Author: stefanegli
Date: Wed Oct 21 11:39:26 2015
New Revision: 1709801

URL: http://svn.apache.org/viewvc?rev=1709801&view=rev
Log:
SLING-5173 and SLING-4603 related : more syncToken log.info - plus always doing the syncToken thingy, independent of whether any instance left or joined the cluster as otherwise this thing wont work

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=1709801&r1=1709800&r2=1709801&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 Wed Oct 21 11:39:26 2015
@@ -128,17 +128,17 @@ class MinEventDelayHandler {
                     // check if the new topology is already ready
                     TopologyView t = discoveryService.getTopology();
                     if (!(t instanceof BaseTopologyView)) {
-                        logger.error("asyncDelay.run: topology not of type BaseTopologyView: "+t);
+                        logger.error("asyncDelay.run: done delaying. topology not of type BaseTopologyView: "+t);
                         // cannot continue in this case
                         return;
                     }
                     BaseTopologyView topology = (BaseTopologyView) t;
                     
                     if (topology.isCurrent()) {
-                        logger.debug("asyncDelay.run: got new view: ", topology);
+                        logger.info("asyncDelay.run: done delaying. got new view: ", topology.toShortString());
                         viewStateManager.handleNewViewNonDelayed(topology);
                     } else {
-                        logger.info("asyncDelay.run: new view (still/again) not current, delaying again");
+                        logger.info("asyncDelay.run: done delaying. new view (still/again) not current, delaying again");
                         triggerAsyncDelaying(topology);
                         // we're actually not interested in the result here
                         // if the async part failed, then we have to rely

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=1709801&r1=1709800&r2=1709801&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 Wed Oct 21 11:39:26 2015
@@ -33,8 +33,6 @@ import org.apache.sling.discovery.Instan
 import org.apache.sling.discovery.TopologyEvent;
 import org.apache.sling.discovery.TopologyEvent.Type;
 import org.apache.sling.discovery.TopologyEventListener;
-import org.apache.sling.discovery.commons.InstancesDiff;
-import org.apache.sling.discovery.commons.InstancesDiff.InstanceCollection;
 import org.apache.sling.discovery.commons.providers.BaseTopologyView;
 import org.apache.sling.discovery.commons.providers.EventHelper;
 import org.apache.sling.discovery.commons.providers.ViewStateManager;
@@ -484,37 +482,23 @@ public class ViewStateManagerImpl implem
             
             final boolean invokeConsistencyService;
             if (consistencyService==null) {
-                logger.debug("handleNewViewNonDelayed: no consistencyService set - continuing directly.");
+                logger.info("handleNewViewNonDelayed: no consistencyService set - continuing directly.");
                 invokeConsistencyService = false;
-            } else if (previousView==null) {
-                // when there was no previous view, we cannot determine if
-                // any instance left
-                // so for safety reason: always invoke the consistencyservice
-                logger.debug("handleNewViewNonDelayed: no previousView set - invoking consistencyService");
-                invokeConsistencyService = true;
             } else {
-                final InstancesDiff diff = new InstancesDiff(previousView, newView);
-                InstanceCollection removed = diff.removed();
-//                Collection<InstanceDescription> c = removed.get();
-//                Iterator<InstanceDescription> it = c.iterator();
-//                while(it.hasNext()) {
-//                    logger.info("handleNewViewNonDelayed: removed: "+it.next());
-//                }
-                InstanceCollection inClusterView = removed.
-                        isInClusterView(newView.getLocalInstance().getClusterView());
-//                c = removed.get();
-//                it = c.iterator();
-//                while(it.hasNext()) {
-//                    logger.info("handleNewViewNonDelayed: inClusterView: "+it.next());
-//                }
-                final boolean anyInstanceLeftLocalCluster = inClusterView.
-                        get().size()>0;
-                if (anyInstanceLeftLocalCluster) {
-                    logger.debug("handleNewViewNonDelayed: anyInstanceLeftLocalCluster=true, hence invoking consistencyService next");
-                } else {
-                    logger.debug("handleNewViewNonDelayed: anyInstanceLeftLocalCluster=false - continuing directly.");
-                }
-                invokeConsistencyService = anyInstanceLeftLocalCluster;
+                // there used to be a distinction between:
+                // * if no previousView is set, then we should invoke the consistencyService
+                // * if one was set, then we only invoke it if any instance left the cluster
+                // this algorithm would not work though, as the newly joining instance
+                // would always have (previousView==null) - thus would always do the syncToken
+                // thingy - while the existing instances would think: ah, no instance left,
+                // so it is not so urgent to do the syncToken.
+                // at which point the joining instance would wait forever for a syncToken 
+                // to arrive.
+                //
+                // which is a long way of saying: if the consistencyService is configured,
+                // then we always use it, hence:
+                logger.info("handleNewViewNonDelayed: consistencyService set - invoking consistencyService");
+                invokeConsistencyService = true;
             }
                         
             if (invokeConsistencyService) {
@@ -522,7 +506,7 @@ public class ViewStateManagerImpl implem
                 // then:
                 // run the set consistencyService
                 final int lastModCnt = modCnt;
-                logger.debug("handleNewViewNonDelayed: invoking consistencyService (modCnt={})", modCnt);
+                logger.info("handleNewViewNonDelayed: invoking consistencyService (modCnt={})", modCnt);
                 consistencyService.sync(newView,
                         new Runnable() {
                     
@@ -551,6 +535,7 @@ public class ViewStateManagerImpl implem
                 // or using it is not applicable at this stage - so continue
                 // with sending the TOPOLOGY_CHANGED (or TOPOLOGY_INIT if there
                 // are any newly bound topology listeners) directly
+                logger.info("handleNewViewNonDelayed: not invoking consistencyService, considering consistent now");
                 doHandleConsistent(newView);
             }
             logger.debug("handleNewViewNonDelayed: end");