diff options
| author | Michael Klishin <michael@clojurewerkz.org> | 2019-04-01 16:36:49 +0300 |
|---|---|---|
| committer | Michael Klishin <michael@clojurewerkz.org> | 2019-04-01 16:36:49 +0300 |
| commit | a1ab9545f3644e6e14d36ff3a4223963c634fa8a (patch) | |
| tree | 2f69546686838223a7bd74836ce5fd097f261bd9 /src | |
| parent | 2997bc4f072cf4755a2069bab5a0b246c726a70c (diff) | |
| download | rabbitmq-server-git-a1ab9545f3644e6e14d36ff3a4223963c634fa8a.tar.gz | |
Quorum queue; make membership changes [more] idempotent
Per discussion with @kjnilsson.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_quorum_queue.erl | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/src/rabbit_quorum_queue.erl b/src/rabbit_quorum_queue.erl index 76cd194d91..cbd9980491 100644 --- a/src/rabbit_quorum_queue.erl +++ b/src/rabbit_quorum_queue.erl @@ -673,7 +673,8 @@ add_member(VHost, Name, Node) -> true -> case lists:member(Node, QNodes) of true -> - {error, already_a_member}; + %% idempotent by design + ok; false -> add_member(Q, Node) end @@ -719,16 +720,12 @@ delete_member(VHost, Name, Node) -> {error, classic_queue_not_supported}; {ok, Q} when ?amqqueue_is_quorum(Q) -> QNodes = amqqueue:get_quorum_nodes(Q), - case lists:member(Node, rabbit_mnesia:cluster_nodes(running)) of + case lists:member(Node, QNodes) of false -> - {error, node_not_running}; + %% idempotent by design + ok; true -> - case lists:member(Node, QNodes) of - false -> - {error, not_a_member}; - true -> - delete_member(Q, Node) - end + delete_member(Q, Node) end; {error, not_found} = E -> E @@ -743,7 +740,7 @@ delete_member(Q, Node) when ?amqqueue_is_quorum(Q) -> %% deleting the last member is not allowed {error, last_node}; _ -> - case ra:leave_and_delete_server(ServerId) of + case ra:leave_and_delete_server(amqqueue:get_pid(Q), ServerId) of ok -> Fun = fun(Q1) -> amqqueue:set_quorum_nodes( |
