Author: stefanegli
Date: Tue Mar  4 08:23:07 2014
New Revision: 1573931

URL: http://svn.apache.org/r1573931
Log:
SLING-3406 : refreshing session at beginning of analyzeVotings to avoid 
concurrency problems

Modified:
    
sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandler.java

Modified: 
sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandler.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandler.java?rev=1573931&r1=1573930&r2=1573931&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandler.java
 (original)
+++ 
sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandler.java
 Tue Mar  4 08:23:07 2014
@@ -111,6 +111,9 @@ public class VotingHandler implements Ev
             return;
         }
         try {
+            if (logger.isDebugEnabled()) {
+                logger.debug("handleEvent: path = "+resourcePath+", event = 
"+event);
+            }
             analyzeVotings(resourceResolver);
         } catch (PersistenceException e) {
             logger.error(
@@ -130,6 +133,8 @@ public class VotingHandler implements Ev
      * by the HearbeatHandler.doCheckView and the VotingHandler.handleEvent.
      */
     public synchronized void analyzeVotings(final ResourceResolver 
resourceResolver) throws PersistenceException {
+        // SLING-3406: refreshing resourceResolver/session here to get the 
latest state from the repository
+        resourceResolver.refresh();
         VotingView winningVote = VotingHelper.getWinningVoting(
                 resourceResolver, config);
         if (winningVote != null) {
@@ -139,6 +144,8 @@ public class VotingHandler implements Ev
                                + winningVote);
                }
                 promote(resourceResolver, winningVote.getResource());
+                // SLING-3406: committing resourceResolver/session here, while 
we're in the synchronized
+                resourceResolver.commit();
             } else {
                if (logger.isDebugEnabled()) {
                        logger.debug("analyzeVotings: there is a winning vote. 
No need to vote any further. Expecting it to get promoted to established: "


Reply via email to