diff --git a/deps/rabbit/priv/schema/rabbit.schema b/deps/rabbit/priv/schema/rabbit.schema index 756cf03ce676..0f1888abfba3 100644 --- a/deps/rabbit/priv/schema/rabbit.schema +++ b/deps/rabbit/priv/schema/rabbit.schema @@ -1370,6 +1370,13 @@ fun(Conf) -> end end}. +%% Register node during cluster formation when backend supports registration. +%% + +{mapping, "cluster_formation.registration", "rabbit.cluster_formation.register", [ + {datatype, {enum, [true, false]}} +]}. + %% Cluster formation: lock acquisition retries as passed to https://erlang.org/doc/man/global.html#set_lock-3 %% %% Currently used in classic, k8s, and aws peer discovery backends. diff --git a/deps/rabbit/src/rabbit_peer_discovery.erl b/deps/rabbit/src/rabbit_peer_discovery.erl index 56400d3569e5..db97b142f587 100644 --- a/deps/rabbit/src/rabbit_peer_discovery.erl +++ b/deps/rabbit/src/rabbit_peer_discovery.erl @@ -46,6 +46,9 @@ %% a new cluster as a virgin node -define(DEFAULT_NODE_TYPE, disc). +%% register node by default +-define(DEFAULT_REGISTRATION, true). + %% default node prefix to attach to discovered hostnames -define(DEFAULT_PREFIX, "rabbit"). @@ -82,6 +85,16 @@ node_type() -> ?DEFAULT_NODE_TYPE end. +-spec registration() -> true | false. + +registration() -> + case application:get_env(rabbit, cluster_formation) of + {ok, Proplist} -> + proplists:get_value(registration, Proplist, ?DEFAULT_REGISTRATION); + undefined -> + ?DEFAULT_REGISTRATION + end. + -spec lock_acquisition_failure_mode() -> ignore | fail. lock_acquisition_failure_mode() -> @@ -968,18 +981,26 @@ error_description({invalid_cluster_node_type, BadType}) -> -spec maybe_register() -> ok. maybe_register() -> - Backend = persistent_term:get(?PT_PEER_DISC_BACKEND, backend()), - case Backend:supports_registration() of + case registration() of true -> - ?LOG_DEBUG( - "Peer discovery: registering this node", - #{domain => ?RMQLOG_DOMAIN_PEER_DISC}), - register(Backend), - _ = Backend:post_registration(), - ok; + Backend = persistent_term:get(?PT_PEER_DISC_BACKEND, backend()), + case Backend:supports_registration() of + true -> + ?LOG_DEBUG( + "Peer discovery: registering this node", + #{domain => ?RMQLOG_DOMAIN_PEER_DISC}), + register(Backend), + _ = Backend:post_registration(), + ok; + false -> + ?LOG_DEBUG( + "Peer discovery: registration unsupported, skipping register", + #{domain => ?RMQLOG_DOMAIN_PEER_DISC}), + ok + end. false -> ?LOG_DEBUG( - "Peer discovery: registration unsupported, skipping register", + "Peer discovery: registration disabled, skipping register", #{domain => ?RMQLOG_DOMAIN_PEER_DISC}), ok end. @@ -987,16 +1008,24 @@ maybe_register() -> -spec maybe_unregister() -> ok. maybe_unregister() -> - Backend = persistent_term:get(?PT_PEER_DISC_BACKEND), - case Backend:supports_registration() of + case registration() of true -> - ?LOG_DEBUG( - "Peer discovery: unregistering this node", - #{domain => ?RMQLOG_DOMAIN_PEER_DISC}), - unregister(Backend); + Backend = persistent_term:get(?PT_PEER_DISC_BACKEND), + case Backend:supports_registration() of + true -> + ?LOG_DEBUG( + "Peer discovery: unregistering this node", + #{domain => ?RMQLOG_DOMAIN_PEER_DISC}), + unregister(Backend); + false -> + ?LOG_DEBUG( + "Peer discovery: registration unsupported, skipping unregister", + #{domain => ?RMQLOG_DOMAIN_PEER_DISC}), + ok + end. false -> ?LOG_DEBUG( - "Peer discovery: registration unsupported, skipping unregister", + "Peer discovery: registration disabled, skipping unregister", #{domain => ?RMQLOG_DOMAIN_PEER_DISC}), ok end.