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

This commit is contained in:
Andrew Mayorov 2023-03-29 14:38:41 +03:00 committed by Ilya Averyanov
parent 11edfc1c6a
commit 258fabbf8b
1 changed files with 21 additions and 9 deletions

View File

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