chore(dsraft): make shard info pterms saner and more visible

This commit is contained in:
Andrew Mayorov 2024-08-02 09:52:55 +02:00
parent 5b15886836
commit 4971fd3eaf
No known key found for this signature in database
GPG Key ID: 2837C62ACFBFED5D
1 changed files with 22 additions and 5 deletions

View File

@ -55,6 +55,8 @@
-define(MEMBERSHIP_CHANGE_TIMEOUT, 30_000). -define(MEMBERSHIP_CHANGE_TIMEOUT, 30_000).
-define(PTERM(DB, SHARD, KEY), {?MODULE, DB, SHARD, KEY}).
%% %%
start_link(DB, Shard, Opts) -> start_link(DB, Shard, Opts) ->
@ -164,7 +166,7 @@ local_site() ->
-spec shard_info(emqx_ds:db(), emqx_ds_replication_layer:shard_id(), _Info) -> _Value. -spec shard_info(emqx_ds:db(), emqx_ds_replication_layer:shard_id(), _Info) -> _Value.
shard_info(DB, Shard, ready) -> shard_info(DB, Shard, ready) ->
persistent_term:get({?MODULE, DB, Shard}, false). get_shard_info(DB, Shard, ready, false).
%% %%
@ -372,8 +374,8 @@ handle_cast(_Msg, State) ->
{noreply, State}. {noreply, State}.
terminate(_Reason, {DB, Shard}) -> terminate(_Reason, {DB, Shard}) ->
%% FIXME %% NOTE: Mark as not ready right away.
persistent_term:erase({?MODULE, DB, Shard}), ok = erase_shard_info(DB, Shard),
%% NOTE: Timeouts are ignored, it's a best effort attempt. %% NOTE: Timeouts are ignored, it's a best effort attempt.
catch prep_stop_server(DB, Shard), catch prep_stop_server(DB, Shard),
LocalServer = get_local_server(DB, Shard), LocalServer = get_local_server(DB, Shard),
@ -457,8 +459,7 @@ trigger_election(Server) ->
end. end.
announce_shard_ready(DB, Shard) -> announce_shard_ready(DB, Shard) ->
%% FIXME set_shard_info(DB, Shard, ready, true).
persistent_term:put({?MODULE, DB, Shard}, true).
server_uid(_DB, Shard) -> server_uid(_DB, Shard) ->
%% NOTE %% NOTE
@ -472,6 +473,22 @@ server_uid(_DB, Shard) ->
%% %%
get_shard_info(DB, Shard, K, Default) ->
persistent_term:get(?PTERM(DB, Shard, K), Default).
set_shard_info(DB, Shard, K, V) ->
persistent_term:put(?PTERM(DB, Shard, K), V).
erase_shard_info(DB, Shard) ->
lists:foreach(fun(K) -> erase_shard_info(DB, Shard, K) end, [
ready
]).
erase_shard_info(DB, Shard, K) ->
persistent_term:erase(?PTERM(DB, Shard, K)).
%%
prep_stop_server(DB, Shard) -> prep_stop_server(DB, Shard) ->
prep_stop_server(DB, Shard, 5_000). prep_stop_server(DB, Shard, 5_000).