Kaynağa Gözat

feat(dsrepl): use more straightforward way to drop ra shards

Andrew Mayorov 1 yıl önce
ebeveyn
işleme
611b3f0e07

+ 1 - 0
apps/emqx_durable_storage/src/emqx_ds.erl

@@ -295,6 +295,7 @@ drop_db(DB) ->
         undefined ->
             ok;
         Module ->
+            _ = persistent_term:erase(?persistent_term(DB)),
             Module:drop_db(DB)
     end.
 

+ 7 - 11
apps/emqx_durable_storage/src/emqx_ds_replication_layer.erl

@@ -196,11 +196,11 @@ drop_generation(DB, {Shard, GenId}) ->
 
 -spec drop_db(emqx_ds:db()) -> ok | {error, _}.
 drop_db(DB) ->
-    Nodes = list_nodes(),
-    _ = emqx_ds_proto_v4:drop_db(Nodes, DB),
-    _ = emqx_ds_replication_layer_meta:drop_db(DB),
-    emqx_ds_builtin_sup:stop_db(DB),
-    ok.
+    foreach_shard(DB, fun(Shard) ->
+        {ok, _} = ra_drop_shard(DB, Shard)
+    end),
+    _ = emqx_ds_proto_v4:drop_db(list_nodes(), DB),
+    emqx_ds_replication_layer_meta:drop_db(DB).
 
 -spec store_batch(emqx_ds:db(), [emqx_types:message(), ...], emqx_ds:message_store_opts()) ->
     emqx_ds:store_batch_result().
@@ -357,8 +357,7 @@ do_drop_db_v1(DB) ->
     emqx_ds_builtin_sup:stop_db(DB),
     lists:foreach(
         fun(Shard) ->
-            emqx_ds_storage_layer:drop_shard({DB, Shard}),
-            ra_drop_shard(DB, Shard)
+            emqx_ds_storage_layer:drop_shard({DB, Shard})
         end,
         MyShards
     ).
@@ -492,8 +491,6 @@ do_get_delete_streams_v4(DB, Shard, TopicFilter, StartTime) ->
 list_nodes() ->
     mria:running_nodes().
 
-%%
-
 %% TODO
 %% Too large for normal operation, need better backpressure mechanism.
 -define(RA_TIMEOUT, 60 * 1000).
@@ -592,8 +589,7 @@ ra_list_generations_with_lifetimes(DB, Shard) ->
     ).
 
 ra_drop_shard(DB, Shard) ->
-    LocalServer = emqx_ds_replication_layer_shard:server(DB, Shard, local),
-    ra:force_delete_server(_System = default, LocalServer).
+    ra:delete_cluster(emqx_ds_replication_layer_shard:shard_servers(DB, Shard), ?RA_TIMEOUT).
 
 %%
 

+ 7 - 1
apps/emqx_durable_storage/src/emqx_ds_replication_layer_shard.erl

@@ -17,8 +17,14 @@
 -module(emqx_ds_replication_layer_shard).
 
 -export([start_link/3]).
--export([shard_servers/2]).
 
+%% Static server configuration
+-export([
+    shard_servers/2,
+    local_server/2
+]).
+
+%% Dynamic server location API
 -export([
     servers/3,
     server/3