From 258fabbf8b3b37fa2643af2ed978f6a0f37ab322 Mon Sep 17 00:00:00 2001 From: Andrew Mayorov Date: Wed, 29 Mar 2023 14:38:41 +0300 Subject: [PATCH] fix(fs-exp): reply with error when listing failed everywhere --- .../src/emqx_ft_storage_exporter_fs.erl | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/apps/emqx_ft/src/emqx_ft_storage_exporter_fs.erl b/apps/emqx_ft/src/emqx_ft_storage_exporter_fs.erl index 7cf0ef6d5..647d84124 100644 --- a/apps/emqx_ft/src/emqx_ft_storage_exporter_fs.erl +++ b/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. %%