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 2013/07/05 16:38:11 UTC

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

Author: stefanegli
Date: Fri Jul  5 14:38:11 2013
New Revision: 1500024

URL: http://svn.apache.org/r1500024
Log:
SLING-2945 : handling another race condition of vote deletion while evaluating it

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/View.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=1500024&r1=1500023&r2=1500024&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 Fri Jul  5 14:38:11 2013
@@ -284,30 +284,37 @@ public class VotingView extends View {
             // the vote is being created. wait.
             return false;
         }
-        final Iterable<Resource> children = members.getChildren();
-        final Iterator<Resource> it = children.iterator();
-        boolean isWinning = false;
-        while (it.hasNext()) {
-            Resource aMemberRes = it.next();
-            try{
-                ValueMap properties = aMemberRes.adaptTo(ValueMap.class);
-                Boolean initiator = properties.get("initiator", Boolean.class);
-                Boolean vote = properties.get("vote", Boolean.class);
-                if (initiator != null && initiator) {
-                    isWinning = true;
-                    continue;
-                }
-                if (vote != null && vote) {
-                    isWinning = true;
-                    continue;
-                }
-                return false;
-            } catch(RuntimeException re) {
-                logger.info("isWinning: Could not check vote due to "+re);
-                return false;
-            }
+        try{
+	        final Iterable<Resource> children = members.getChildren();
+	        final Iterator<Resource> it = children.iterator();
+	        boolean isWinning = false;
+	        while (it.hasNext()) {
+	            Resource aMemberRes = it.next();
+	            try{
+	                ValueMap properties = aMemberRes.adaptTo(ValueMap.class);
+	                Boolean initiator = properties.get("initiator", Boolean.class);
+	                Boolean vote = properties.get("vote", Boolean.class);
+	                if (initiator != null && initiator) {
+	                    isWinning = true;
+	                    continue;
+	                }
+	                if (vote != null && vote) {
+	                    isWinning = true;
+	                    continue;
+	                }
+	                return false;
+	            } catch(RuntimeException re) {
+	                logger.info("isWinning: Could not check vote due to "+re);
+	                return false;
+	            }
+	        }
+	        return isWinning;
+        } catch(RuntimeException re) {
+        	// SLING-2945: gracefully handle case where members node is
+        	//             deleted by another instance
+        	logger.info("isWinning: could not check vote due to "+re);
+        	return false;
         }
-        return isWinning;
     }
 
     /**

Modified: sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/View.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/View.java?rev=1500024&r1=1500023&r2=1500024&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/View.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/View.java Fri Jul  5 14:38:11 2013
@@ -113,6 +113,7 @@ public class View {
         	// SLING-2945 : the members resource could have been deleted
         	//              by another party simultaneously
         	//              so treat this situation nicely
+        	logger.info("matches: cannot compare due to "+re);
         	return false;
         }
         // now the ViewCopy set must be empty to represent a match