Don't prioritise DOWNs from the left. Also explain why we prioritise in various ways.

This commit is contained in:
Simon MacMullen 2014-05-29 12:13:27 +01:00
parent 045bad63a1
commit c40e02dcf6
1 changed files with 14 additions and 1 deletions

View File

@ -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.