From 1110b5d8f5768e314ffcb1570b7d8beb48028f60 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Fri, 7 Jul 2023 13:31:57 +0200 Subject: [PATCH] fix(emqx_retainer): return 404 in delete if topic not found --- apps/emqx_retainer/src/emqx_retainer.app.src | 2 +- apps/emqx_retainer/src/emqx_retainer_api.erl | 13 +++++++++++-- apps/emqx_retainer/test/emqx_retainer_api_SUITE.erl | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/apps/emqx_retainer/src/emqx_retainer.app.src b/apps/emqx_retainer/src/emqx_retainer.app.src index d13359509..f117fda05 100644 --- a/apps/emqx_retainer/src/emqx_retainer.app.src +++ b/apps/emqx_retainer/src/emqx_retainer.app.src @@ -2,7 +2,7 @@ {application, emqx_retainer, [ {description, "EMQX Retainer"}, % strict semver, bump manually! - {vsn, "5.0.14"}, + {vsn, "5.0.15"}, {modules, []}, {registered, [emqx_retainer_sup]}, {applications, [kernel, stdlib, emqx, emqx_ctl]}, diff --git a/apps/emqx_retainer/src/emqx_retainer_api.erl b/apps/emqx_retainer/src/emqx_retainer_api.erl index 7b1337140..3274f0e4c 100644 --- a/apps/emqx_retainer/src/emqx_retainer_api.erl +++ b/apps/emqx_retainer/src/emqx_retainer_api.erl @@ -102,6 +102,7 @@ schema(?PREFIX ++ "/message/:topic") -> parameters => parameters(), responses => #{ 204 => <<>>, + 404 => error_codes(['NOT_FOUND'], ?DESC(message_not_exist)), 400 => error_codes( ['BAD_REQUEST'], ?DESC(unsupported_backend) @@ -187,8 +188,16 @@ with_topic(get, #{bindings := Bindings}) -> end; with_topic(delete, #{bindings := Bindings}) -> Topic = maps:get(topic, Bindings), - emqx_retainer_mnesia:delete_message(undefined, Topic), - {204}. + case emqx_retainer_mnesia:page_read(undefined, Topic, 1, 1) of + {ok, []} -> + {404, #{ + code => <<"NOT_FOUND">>, + message => <<"Viewed message doesn't exist">> + }}; + {ok, _} -> + emqx_retainer_mnesia:delete_message(undefined, Topic), + {204} + end. format_message(#message{ id = ID, diff --git a/apps/emqx_retainer/test/emqx_retainer_api_SUITE.erl b/apps/emqx_retainer/test/emqx_retainer_api_SUITE.erl index 61eee0510..d00ade556 100644 --- a/apps/emqx_retainer/test/emqx_retainer_api_SUITE.erl +++ b/apps/emqx_retainer/test/emqx_retainer_api_SUITE.erl @@ -218,6 +218,7 @@ t_lookup_and_delete(_) -> {ok, []} = request_api(delete, API), {error, {"HTTP/1.1", 404, "Not Found"}} = request_api(get, API), + {error, {"HTTP/1.1", 404, "Not Found"}} = request_api(delete, API), ok = emqtt:disconnect(C1).