diff options
| author | kjnilsson <knilsson@pivotal.io> | 2019-03-20 11:05:26 +0000 |
|---|---|---|
| committer | kjnilsson <knilsson@pivotal.io> | 2019-03-20 11:05:26 +0000 |
| commit | 58ca7b99a1092c5b6d73a9263712391eef1b5955 (patch) | |
| tree | 2ed21dd7761d917c050f9b5aa21ce269331dd78f | |
| parent | 626033a8c415be7ffc8360eac985f97d054935b3 (diff) | |
| download | rabbitmq-server-git-58ca7b99a1092c5b6d73a9263712391eef1b5955.tar.gz | |
Quorum queue: make leader repair more defensive
By moving it into the process spawned every tick interval to update
metrics and repair the leader record.
Fixes sporadic test failures in rabbit_fifi_int_SUITE.
| -rw-r--r-- | src/rabbit_quorum_queue.erl | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/rabbit_quorum_queue.erl b/src/rabbit_quorum_queue.erl index dbe45f1a11..260e36d510 100644 --- a/src/rabbit_quorum_queue.erl +++ b/src/rabbit_quorum_queue.erl @@ -246,6 +246,7 @@ rpc_delete_metrics(QName) -> handle_tick(QName, {Name, MR, MU, M, C, MsgBytesReady, MsgBytesUnack}) -> %% this makes calls to remote processes so cannot be run inside the %% ra server + Self = self(), _ = spawn(fun() -> R = reductions(Name), rabbit_core_metrics:queue_stats(QName, MR, MU, M, R), @@ -264,12 +265,12 @@ handle_tick(QName, {Name, MR, MU, M, C, MsgBytesReady, MsgBytesUnack}) -> {messages, M}, {messages_ready, MR}, {messages_unacknowledged, MU}, - {reductions, R}]) + {reductions, R}]), + ok = repair_leader_record(QName, Self) end), - ok = repair_leader_record(QName), ok. -repair_leader_record(QName) -> +repair_leader_record(QName, Self) -> {ok, Q} = rabbit_amqqueue:lookup(QName), Node = node(), case amqqueue:get_pid(Q) of @@ -279,7 +280,7 @@ repair_leader_record(QName) -> _ -> rabbit_log:debug("~s: repairing leader record", [rabbit_misc:rs(QName)]), - {_, Name} = erlang:process_info(self(), registered_name), + {_, Name} = erlang:process_info(Self, registered_name), become_leader(QName, Name) end, ok. |
