You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Stefan Egli (JIRA)" <ji...@apache.org> on 2015/09/15 16:47:45 UTC
[jira] [Commented] (SLING-5027) vote loop until vote is promoted
[ https://issues.apache.org/jira/browse/SLING-5027?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14745550#comment-14745550 ]
Stefan Egli commented on SLING-5027:
------------------------------------
Marked as a regression of SLING-3434
> vote loop until vote is promoted
> --------------------------------
>
> Key: SLING-5027
> URL: https://issues.apache.org/jira/browse/SLING-5027
> Project: Sling
> Issue Type: Bug
> Components: Extensions
> Affects Versions: Discovery Impl 1.1.0
> Reporter: Stefan Egli
> Assignee: Stefan Egli
> Fix For: Discovery Impl 1.1.8
>
>
> {{VotingHandler.analyzeVotings}} has the risk of running into a busy vote loop during the duration of an {{/ongoingVotings}}:
> * {{analyzeVotings}} is invoked either when something changes in {{/var/discovery/impl/ongoingVotings}} or as part of a heartbeat
> * as part of this, it figures out the ongoingVotings, decides on which it has to vote (should there be more than 1, and it doesn't vote if it was the initiator) then potentially does a {{vote(,true)}} on it
> * in {{vote()}} it not only sets the {{vote}} property accordingly (true or false) - it additionally, since [SLING-3434|https://issues.apache.org/jira/browse/SLING-3434?focusedCommentId=14297078&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14297078], also sets the {{votedAt}} property (timestamp)
> * since the above is a change in {{/ongoingVotings}}, this will trigger an observation event - which again triggers the {{analyzeVotings}} to be called, which will again find an ongoing vote, vote upon, trigger an observation event etc. Resulting in an endless loop that involves repository and an observation handler
> * now the above loop only occurs since the introduction of the {{votedAt}} property - as that is changing on each iteration. Without that, voting again with the same boolean would not result in an observation event and the loop would not happen at all.
> * in any case, the loop lasts at maximum until the initiator finally got all the votes and can promote the vote to an {{/establishedView}}. This should typically be a fast operation - but if the cluster is under heavy load and experiences delays for some reason, this busy loop can last a little while.
> So this loop is a regression introduced with SLING-3434.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)