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