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/11/04 17:29:28 UTC

svn commit: r1712584 - in /sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl: cluster/voting/VotingView.java common/heartbeat/HeartbeatHandler.java

Author: stefanegli
Date: Wed Nov  4 16:29:22 2015
New Revision: 1712584

URL: http://svn.apache.org/viewvc?rev=1712584&view=rev
Log:
SLING-5243 : adding a retry-loop for the newly-introduced exception handling around establishedView.matches. Reason for this: looks like during testing you can run into a race-condition where the establishedView is just being created and only half visible - in that case this matches() throws an Exception even though the view will just be there - so doing a 5x500ms retry loop should handle this case. And since this is probably only a testing artifact, it shouldn't have any influence on real usage

Modified:
    sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/voting/VotingView.java
    sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatHandler.java

Modified: sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/voting/VotingView.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/voting/VotingView.java?rev=1712584&r1=1712583&r2=1712584&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/voting/VotingView.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/voting/VotingView.java Wed Nov  4 16:29:22 2015
@@ -128,7 +128,7 @@ public class VotingView extends View {
             resourceResolver.create(membersResource, memberId, properties);
         }
         resourceResolver.commit();
-        logger.info("newVoting: new voting started: newViewId="+newViewId+", resource="+votingResource+", #members: "+liveInstances.size()+", members: "+liveInstances);
+        logger.info("newVoting: new voting started: newViewId="+newViewId+", initiatorId="+initiatorId+", resource="+votingResource+", #members: "+liveInstances.size()+", members: "+liveInstances);
         return new VotingView(votingResource);
     }
 

Modified: sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatHandler.java?rev=1712584&r1=1712583&r2=1712584&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatHandler.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatHandler.java Wed Nov  4 16:29:22 2015
@@ -598,13 +598,29 @@ public class HeartbeatHandler extends Ba
                 establishedViewMatches = false;
             } else {
                 String mismatchDetails;
-                try{
-                    mismatchDetails = establishedView.matches(liveInstances);
-                } catch(Exception e) {
-                    logger.error("doCheckViewWith: could not compare established view with live ones: "+e, e);
-                    invalidateCurrentEstablishedView();
-                    discoveryServiceImpl.handleTopologyChanging();
-                    return;
+                int retries = 0;
+                while(true) { // a small retry-loop
+                    try{
+                        mismatchDetails = establishedView.matches(liveInstances);
+                        break;
+                    } catch(Exception e) {
+                        logger.error("doCheckViewWith: could not compare established view with live ones: "+e, e);
+                        if (retries++<5) {
+                            // retry
+                            try {
+                                Thread.sleep(500);
+                            } catch (InterruptedException e1) {
+                                logger.info("doCheckViewWith: got interrupted");
+                            }
+                            logger.info("doCheckViewWith: retrying [retries="+retries+"]");
+                            continue;
+                        }
+                        // after 5 retires however
+                        logger.info("doCheckViewWith: invalidating view due to not being able to compare");
+                        invalidateCurrentEstablishedView();
+                        discoveryServiceImpl.handleTopologyChanging();
+                        return;
+                    }
                 }
                 if (mismatchDetails != null) {
                     logger.info("doCheckView: established view does not match. (details: " + mismatchDetails + ")");