From 2ace9bb893d75325cbf970ebb31b1d4dc878712d Mon Sep 17 00:00:00 2001 From: Andrew Mayorov Date: Sun, 7 Apr 2024 22:50:36 +0200 Subject: [PATCH] chore(dsrepl): sprinkle few comments and typespecs for exports --- .../src/emqx_ds_replication_layer_shard.erl | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/apps/emqx_durable_storage/src/emqx_ds_replication_layer_shard.erl b/apps/emqx_durable_storage/src/emqx_ds_replication_layer_shard.erl index c2828f31f..8f87b69b4 100644 --- a/apps/emqx_durable_storage/src/emqx_ds_replication_layer_shard.erl +++ b/apps/emqx_durable_storage/src/emqx_ds_replication_layer_shard.erl @@ -139,6 +139,11 @@ local_site() -> %% +%% @doc Add a local server to the shard cluster. +%% It's recommended to have the local server running before calling this function. +%% This function is idempotent. +-spec add_local_server(emqx_ds:db(), emqx_ds_replication_layer:shard_id()) -> + ok | emqx_ds:error(_Reason). add_local_server(DB, Shard) -> %% NOTE %% Adding local server as "promotable" member to the cluster, which means @@ -170,6 +175,11 @@ add_local_server(DB, Shard) -> {error, recoverable, Reason} end. +%% @doc Remove a local server from the shard cluster and clean up on-disk data. +%% It's required to have the local server running before calling this function. +%% This function is idempotent. +-spec drop_local_server(emqx_ds:db(), emqx_ds_replication_layer:shard_id()) -> + ok | emqx_ds:error(_Reason). drop_local_server(DB, Shard) -> LocalServer = local_server(DB, Shard), case remove_server(DB, Shard, LocalServer) of @@ -179,6 +189,12 @@ drop_local_server(DB, Shard) -> Error end. +%% @doc Remove a (remote) server from the shard cluster. +%% The server might not be running when calling this function, e.g. the node +%% might be offline. Because of this, on-disk data will not be cleaned up. +%% This function is idempotent. +-spec remove_server(emqx_ds:db(), emqx_ds_replication_layer:shard_id(), server()) -> + ok | emqx_ds:error(_Reason). remove_server(DB, Shard, Server) -> ShardServers = shard_servers(DB, Shard), case ra:remove_member(ShardServers, Server, ?MEMBERSHIP_CHANGE_TIMEOUT) of @@ -190,6 +206,10 @@ remove_server(DB, Shard, Server) -> {error, recoverable, Reason} end. +-spec server_info + (readiness, server()) -> ready | {unready, _Status, _Membership} | unknown; + (leader, server()) -> server() | unknown; + (uid, server()) -> _UID :: binary() | unknown. server_info(readiness, Server) -> %% NOTE %% Server is ready if it's either the leader or a follower with voter "membership"