Browse Source

fix(fs-exp): reply with error when listing failed everywhere

Andrew Mayorov 3 years ago
parent
commit
258fabbf8b
1 changed files with 21 additions and 9 deletions
  1. 21 9
      apps/emqx_ft/src/emqx_ft_storage_exporter_fs.erl

+ 21 - 9
apps/emqx_ft/src/emqx_ft_storage_exporter_fs.erl

@@ -266,20 +266,32 @@ start_reader(Options, RelFilepath, CallerPid) ->
 %%
 
 -spec list(options()) ->
-    {ok, [exportinfo(), ...]} | {error, file_error()}.
+    {ok, [exportinfo(), ...]} | {error, [{node(), _Reason}]}.
 list(_Options) ->
     Nodes = mria_mnesia:running_nodes(),
-    Results = emqx_ft_storage_exporter_fs_proto_v1:list_exports(Nodes),
-    {GoodResults, BadResults} = lists:partition(
+    Replies = emqx_ft_storage_exporter_fs_proto_v1:list_exports(Nodes),
+    {Results, Errors} = lists:foldl(
         fun
-            ({_Node, {ok, {ok, _}}}) -> true;
-            (_) -> false
+            ({_Node, {ok, {ok, Files}}}, {Acc, Errors}) ->
+                {Files ++ Acc, Errors};
+            ({Node, {ok, {error, _} = Error}}, {Acc, Errors}) ->
+                {Acc, [{Node, Error} | Errors]};
+            ({Node, Error}, {Acc, Errors}) ->
+                {Acc, [{Node, Error} | Errors]}
         end,
-        lists:zip(Nodes, Results)
+        {[], []},
+        lists:zip(Nodes, Replies)
     ),
-    length(BadResults) > 0 andalso
-        ?SLOG(warning, #{msg => "list_remote_exports_failed", failures => BadResults}),
-    {ok, [File || {_Node, {ok, {ok, Files}}} <- GoodResults, File <- Files]}.
+    length(Errors) > 0 andalso
+        ?SLOG(warning, #{msg => "list_remote_exports_failed", errors => Errors}),
+    case Results of
+        [_ | _] ->
+            {ok, Results};
+        [] when Errors =:= [] ->
+            {ok, Results};
+        [] ->
+            {error, Errors}
+    end.
 
 %%