diff --git a/apps/emqx_management/src/emqx_mgmt_api_trace.erl b/apps/emqx_management/src/emqx_mgmt_api_trace.erl index 4bdf225fd..17895786b 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_trace.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_trace.erl @@ -84,11 +84,16 @@ schema("/trace") -> 200 => hoconsc:ref(trace), 400 => emqx_dashboard_swagger:error_codes( [ - 'ALREADY_EXISTS', - 'DUPLICATE_CONDITION', 'INVALID_PARAMS' ], - <<"trace name already exists">> + <<"invalid trace params">> + ), + 409 => emqx_dashboard_swagger:error_codes( + [ + 'ALREADY_EXISTS', + 'DUPLICATE_CONDITION' + ], + <<"trace already exists">> ) } }, @@ -392,12 +397,12 @@ trace(post, #{body := Param}) -> {ok, Trace0} -> {200, format_trace(Trace0)}; {error, {already_existed, Name}} -> - {400, #{ + {409, #{ code => 'ALREADY_EXISTS', message => ?TO_BIN([Name, " Already Exists"]) }}; {error, {duplicate_condition, Name}} -> - {400, #{ + {409, #{ code => 'DUPLICATE_CONDITION', message => ?TO_BIN([Name, " Duplication Condition"]) }}; diff --git a/apps/emqx_management/test/emqx_mgmt_api_trace_SUITE.erl b/apps/emqx_management/test/emqx_mgmt_api_trace_SUITE.erl index 68c998c47..d73cb79fd 100644 --- a/apps/emqx_management/test/emqx_mgmt_api_trace_SUITE.erl +++ b/apps/emqx_management/test/emqx_mgmt_api_trace_SUITE.erl @@ -149,7 +149,7 @@ t_create_failed(_Config) -> {ok, Create} = request_api(post, api_path("trace"), Header, [GoodName | Trace]), ?assertMatch(#{<<"name">> := <<"test-name-0">>}, json(Create)), ?assertMatch( - {error, {"HTTP/1.1", 400, _}, _}, + {error, {"HTTP/1.1", 409, _}, _}, request_api(post, api_path("trace"), Header, [GoodName | Trace]) ), @@ -171,6 +171,16 @@ t_create_failed(_Config) -> {error, {"HTTP/1.1", 400, _}, _}, request_api(post, api_path("trace"), Header, [GoodName1 | Trace]) ), + %% clear + ?assertMatch({ok, _}, request_api(delete, api_path("trace"), Header, [])), + {ok, Create} = request_api(post, api_path("trace"), Header, [GoodName | Trace]), + %% new name but same trace + GoodName2 = {<<"name">>, <<"test-name-1">>}, + ?assertMatch( + {error, {"HTTP/1.1", 409, _}, _}, + request_api(post, api_path("trace"), Header, [GoodName2 | Trace]) + ), + unload(), emqx_trace:clear(), ok. diff --git a/changes/v5.0.12-en.md b/changes/v5.0.12-en.md index d206774f4..97992568f 100644 --- a/changes/v5.0.12-en.md +++ b/changes/v5.0.12-en.md @@ -49,4 +49,6 @@ Please note, the request body of `/bridges` API to configure MQTT brdige is chan - Fix shadowing `'client.authenticate'` callbacks by `emqx_authenticator`. Now `emqx_authenticator` passes execution to the further callbacks if none of the authenticators matches [#9496](https://github.com/emqx/emqx/pull/9496). -- Return `400` if query param `node` is not a known in `/trace/:id/download?node={node}` [#9478](https://github.com/emqx/emqx/pull/9478). +- Return `400` if query param `node` is not a known node in `/trace/:id/download?node={node}` [#9478](https://github.com/emqx/emqx/pull/9478). + +- `POST /traces` to return `409` in case of duplicate [#9494](https://github.com/emqx/emqx/pull/9494). diff --git a/changes/v5.0.12-zh.md b/changes/v5.0.12-zh.md index 919d76784..a0d67424e 100644 --- a/changes/v5.0.12-zh.md +++ b/changes/v5.0.12-zh.md @@ -47,4 +47,6 @@ v5.0.11 或更早版本创建的配置文件,在新版本中会被自动转换 - 通过 `emqx_authenticator` 修复隐藏 `'client.authenticate'` 回调。 现在 `emqx_authenticator` 如果没有任何验证器匹配,则将执行传递给进一步的回调 [#9496](https://github.com/emqx/emqx/pull/9496)。 -- 如果在调用 `/trace/:id/download?node={node}` 时,`node` 不存在,则会返回 `400` [#9478](https://github.com/emqx/emqx/pull/9478). +- 如果在调用 `/trace/:id/download?node={node}` 时,`node` 不存在,则会返回 `400` [#9478](https://github.com/emqx/emqx/pull/9478)。 + +- 当重复调用 `POST /traces` 时,将会返回 `409` ,而不再是 `400` [#9494](https://github.com/emqx/emqx/pull/9494)。