Explorar o código

fix(dsrepl): properly handle transaction abort during forget site

Andrew Mayorov hai 1 ano
pai
achega
c355c9ad50

+ 5 - 5
apps/emqx_durable_storage/src/emqx_ds_replication_layer_meta.erl

@@ -694,12 +694,12 @@ ensure_site() ->
 
 
 forget_node(Node) ->
 forget_node(Node) ->
     Sites = node_sites(Node),
     Sites = node_sites(Node),
-    Results = transaction(fun lists:map/2, [fun ?MODULE:forget_site_trans/1, Sites]),
-    case [Reason || {error, Reason} <- Results] of
-        [] ->
+    Result = transaction(fun lists:map/2, [fun ?MODULE:forget_site_trans/1, Sites]),
+    case Result of
+        Ok when is_list(Ok) ->
             ok;
             ok;
-        Errors ->
-            logger:error("Failed to forget leaving node ~p: ~p", [Node, Errors])
+        {error, Reason} ->
+            logger:error("Failed to forget leaving node ~p: ~p", [Node, Reason])
     end.
     end.
 
 
 %% @doc Returns sorted list of sites shards are replicated across.
 %% @doc Returns sorted list of sites shards are replicated across.