summaryrefslogtreecommitdiff
path: root/src/delegate.erl
diff options
context:
space:
mode:
authorJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2015-03-04 15:28:39 +0100
committerJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2015-03-04 15:43:07 +0100
commit9fcb31f348590a74fd526333cf881cfbe27241e6 (patch)
treede07b1c09b207555a571d28590b522783a9ed8a8 /src/delegate.erl
parent945b04fdeb7a3a3113b8cb88ea8777d4b807b65a (diff)
downloadrabbitmq-server-git-9fcb31f348590a74fd526333cf881cfbe27241e6.tar.gz
Workaround "global" hang
In rabbit_node_monitor:disconnect/1, we change the "dist_auto_connect" kernel parameter to force a disconnection and give some time to all components to handle the subsequent "nodedown" event. "global" doesn't handle this situation very well. With an unfortunate sequence of messages and bad timings, this can trigger an inconsistency in its internal state. When this happens, global:sync() never returns. See bug 26556, comment #5 for a detailed description. The workaround consists of a process who parses the "global" internal state if global:sync/0 didn't return in 15 seconds. If the state contains in-progress synchronisation older than 10 seconds, the spawned process sends fake nodedown/nodeup events to "global" on both inconsistent nodes so they restart their synchronisation. This workaround will be removed once the real bugs are fixed and "dist_auto_connect" is left untouched.
Diffstat (limited to 'src/delegate.erl')
0 files changed, 0 insertions, 0 deletions