Details
-
Bug
-
Status: Resolved
-
Urgent
-
Resolution: Fixed
-
None
-
Critical
Description
Gossiper#isEnabled() relies on the presence of scheduledGossipTask, which is not final nor volatile. As a consequence, when such method is called on a different thread, i.e. the gossip stage thread, it is sometimes detected as not enabled, causing particularly obscure failures.
This is shown by the following logs. First the gossiper is started:
1 TRACE [Thread-29] 2016-02-03 19:21:31,232 Gossiper.java (line 1310) gossip started with generation 1454527291
Then the same node misses a gossip message because the gossiper is seen as disabled:
1 TRACE [GossipStage:1] 2016-02-03 19:21:32,016 GossipDigestSynVerbHandler.java (line 44) Ignoring GossipDigestSynMessage because gossip is disabled