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: "