diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2014-05-29 12:13:27 +0100 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2014-05-29 12:13:27 +0100 |
| commit | c40e02dcf6be936bc746902efe2a74006a77fea5 (patch) | |
| tree | 42267ae3287a88fe4b097b48c8559f16b7de9476 /src/gm.erl | |
| parent | 045bad63a17da8334a8b9dd5b97cf26231a8d3c3 (diff) | |
| download | rabbitmq-server-git-c40e02dcf6be936bc746902efe2a74006a77fea5.tar.gz | |
Don't prioritise DOWNs from the left. Also explain why we prioritise in various ways.
Diffstat (limited to 'src/gm.erl')
| -rw-r--r-- | src/gm.erl | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/gm.erl b/src/gm.erl index fb59b9cb0b..7a2f5835b0 100644 --- a/src/gm.erl +++ b/src/gm.erl @@ -732,8 +732,21 @@ code_change(_OldVsn, State, _Extra) -> prioritise_info(flush, _Len, _State) -> 1; +%% DOWN messages should not overtake initial catchups; if they do we +%% will receive a DOWN we do not know what to do with. prioritise_info({'DOWN', _MRef, process, _Pid, _Reason}, _Len, - #state { members_state = MS }) when MS /= undefined -> + #state { members_state = undefined }) -> + 0; +%% We should not prioritise DOWN messages from our left since +%% otherwise the DOWN can overtake any last activity from the left, +%% causing that activity to be lost. +prioritise_info({'DOWN', _MRef, process, LeftPid, _Reason}, _Len, + #state { left = {{_LeftVer, LeftPid}, _MRef2} }) -> + 0; +%% But prioritise all other DOWNs - we want to make sure we are not +%% sending activity into the void for too long because our right is +%% down but we don't know it. +prioritise_info({'DOWN', MRef, process, Pid, _Reason}, _Len, _State) -> 1; prioritise_info(_, _Len, _State) -> 0. |
