feat(dsrepl): also reflect pending transitions in ds status

This commit is contained in:
Andrew Mayorov 2024-05-16 18:56:21 +02:00
parent 26c4a4f597
commit 0119728d45
No known key found for this signature in database
GPG Key ID: 2837C62ACFBFED5D
1 changed files with 43 additions and 6 deletions

View File

@ -195,22 +195,51 @@ print_status() ->
end,
eval_qlc(mnesia:table(?NODE_TAB))
),
Shards = eval_qlc(mnesia:table(?SHARD_TAB)),
io:format(
"~nSHARDS:~n~s~s~n",
[string:pad("Id", 30), "Replicas"]
[string:pad("Shard", 30), "Replicas"]
),
lists:foreach(
fun(#?SHARD_TAB{shard = {DB, Shard}, replica_set = RS}) ->
ShardStr = io_lib:format("~p/~s", [DB, Shard]),
fun(#?SHARD_TAB{shard = DBShard, replica_set = RS}) ->
ShardStr = format_shard(DBShard),
ReplicasStr = string:join([format_replica(R) || R <- RS], " "),
io:format(
"~s~s~n",
[string:pad(ShardStr, 30), ReplicasStr]
)
end,
eval_qlc(mnesia:table(?SHARD_TAB))
Shards
),
PendingTransitions = lists:filtermap(
fun(Record = #?SHARD_TAB{shard = DBShard}) ->
case compute_transitions(Record) of
[] -> false;
Transitions -> {true, {DBShard, Transitions}}
end
end,
Shards
),
PendingTransitions /= [] andalso
io:format(
"~nREPLICA TRANSITIONS:~n~s~s~n",
[string:pad("Shard", 30), "Transitions"]
),
lists:foreach(
fun({DBShard, Transitions}) ->
ShardStr = format_shard(DBShard),
TransStr = string:join(lists:map(fun format_transition/1, Transitions), " "),
io:format(
"~s~s~n",
[string:pad(ShardStr, 30), TransStr]
)
end,
PendingTransitions
).
format_shard({DB, Shard}) ->
io_lib:format("~p/~s", [DB, Shard]).
format_replica(Site) ->
Marker =
case mria:cluster_status(?MODULE:node(Site)) of
@ -220,6 +249,11 @@ format_replica(Site) ->
end,
io_lib:format("~s ~s", [Marker, Site]).
format_transition({add, Site}) ->
io_lib:format("+~s", [Site]);
format_transition({del, Site}) ->
io_lib:format("-~s", [Site]).
-spec this_site() -> site().
this_site() ->
persistent_term:get(?emqx_ds_builtin_site).
@ -353,8 +387,8 @@ db_sites(DB) ->
[transition()] | undefined.
replica_set_transitions(DB, Shard) ->
case mnesia:dirty_read(?SHARD_TAB, {DB, Shard}) of
[#?SHARD_TAB{target_set = TargetSet, replica_set = ReplicaSet}] ->
compute_transitions(TargetSet, ReplicaSet);
[Record] ->
compute_transitions(Record);
[] ->
undefined
end.
@ -706,6 +740,9 @@ compute_allocation(Shards, Sites, Opts) ->
),
Allocation.
compute_transitions(#?SHARD_TAB{target_set = TargetSet, replica_set = ReplicaSet}) ->
compute_transitions(TargetSet, ReplicaSet).
compute_transitions(undefined, _ReplicaSet) ->
[];
compute_transitions(TargetSet, ReplicaSet) ->