diff --git a/apps/emqx_gateway/src/coap/emqx_coap_impl.erl b/apps/emqx_gateway/src/coap/emqx_coap_impl.erl index 220c25367..9a4c902dc 100644 --- a/apps/emqx_gateway/src/coap/emqx_coap_impl.erl +++ b/apps/emqx_gateway/src/coap/emqx_coap_impl.erl @@ -83,7 +83,7 @@ on_gateway_update(Config, Gateway, GwState = #{ctx := Ctx}) -> logger:error("Failed to update ~ts; " "reason: {~0p, ~0p} stacktrace: ~0p", [GwName, Class, Reason, Stk]), - {error, {Class, Reason}} + {error, Reason} end. on_gateway_unload(_Gateway = #{ name := GwName, diff --git a/apps/emqx_gateway/src/emqx_gateway_api.erl b/apps/emqx_gateway/src/emqx_gateway_api.erl index d2fd86600..85aad78d2 100644 --- a/apps/emqx_gateway/src/emqx_gateway_api.erl +++ b/apps/emqx_gateway/src/emqx_gateway_api.erl @@ -97,7 +97,7 @@ gateway_insta(delete, #{bindings := #{name := Name0}}) -> ok -> {204}; {error, Reason} -> - return_http_error(400, Reason) + emqx_gateway_http:reason2resp(Reason) end end); gateway_insta(get, #{bindings := #{name := Name0}}) -> @@ -134,7 +134,7 @@ gateway_insta(put, #{body := GwConf0, {ok, Gateway} -> {200, Gateway}; {error, Reason} -> - return_http_error(500, Reason) + emqx_gateway_http:reason2resp(Reason) end end). diff --git a/apps/emqx_gateway/src/emqx_gateway_http.erl b/apps/emqx_gateway/src/emqx_gateway_http.erl index 228a51b28..b53ccd737 100644 --- a/apps/emqx_gateway/src/emqx_gateway_http.erl +++ b/apps/emqx_gateway/src/emqx_gateway_http.erl @@ -311,7 +311,12 @@ return_http_error(Code, Msg) -> -spec reason2msg({atom(), map()} | any()) -> error | string(). reason2msg({badconf, #{key := Key, value := Value, reason := Reason}}) -> - fmtstr("Bad config value '~s' for '~s', reason: ~s", [Value, Key, Reason]); + NValue = case emqx_json:safe_encode(Value) of + {ok, Str} -> Str; + {error, _} -> emqx_gateway_utils:stringfy(Value) + end, + fmtstr("Bad config value '~s' for '~s', reason: ~s", + [NValue, Key, Reason]); reason2msg({badres, #{resource := gateway, gateway := GwName, reason := not_found}}) -> diff --git a/apps/emqx_gateway/src/exproto/emqx_exproto_impl.erl b/apps/emqx_gateway/src/exproto/emqx_exproto_impl.erl index fac55e24d..2524c1b5d 100644 --- a/apps/emqx_gateway/src/exproto/emqx_exproto_impl.erl +++ b/apps/emqx_gateway/src/exproto/emqx_exproto_impl.erl @@ -57,18 +57,19 @@ on_gateway_load(_Gateway = #{ name := GwName, config := Config }, Ctx) -> %% XXX: How to monitor it ? - %% Start grpc client pool & client channel - PoolName = pool_name(GwName), - PoolSize = emqx_vm:schedulers() * 2, - {ok, PoolSup} = emqx_pool_sup:start_link( - PoolName, hash, PoolSize, - {emqx_exproto_gcli, start_link, []}), _ = start_grpc_client_channel(GwName, maps:get(handler, Config, undefined) ), %% XXX: How to monitor it ? _ = start_grpc_server(GwName, maps:get(server, Config, undefined)), + %% XXX: How to monitor it ? + PoolName = pool_name(GwName), + PoolSize = emqx_vm:schedulers() * 2, + {ok, PoolSup} = emqx_pool_sup:start_link( + PoolName, hash, PoolSize, + {emqx_exproto_gcli, start_link, []}), + NConfig = maps:without( [server, handler], Config#{pool_name => PoolName} @@ -103,7 +104,7 @@ on_gateway_update(Config, Gateway, GwState = #{ctx := Ctx}) -> logger:error("Failed to update ~ts; " "reason: {~0p, ~0p} stacktrace: ~0p", [GwName, Class, Reason, Stk]), - {error, {Class, Reason}} + {error, Reason} end. on_gateway_unload(_Gateway = #{ name := GwName, @@ -141,8 +142,11 @@ start_grpc_server(GwName, Options = #{bind := ListenOn}) -> console_print("Start ~ts gRPC server on ~p successfully.~n", [GwName, ListenOn]); {error, Reason} -> - ?ELOG("Failed to start ~ts gRPC server on ~p, reason: ~p", - [GwName, ListenOn, Reason]) + ?ELOG("Failed to start ~ts gRPC server on ~p, reason: ~0p", + [GwName, ListenOn, Reason]), + throw({badconf, #{key => server, + value => Options, + reason => illegal_grpc_server_confs}}) end. stop_grpc_server(GwName) -> diff --git a/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_impl.erl b/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_impl.erl index 873fbe2c3..0cfb512b5 100644 --- a/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_impl.erl +++ b/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_impl.erl @@ -87,7 +87,7 @@ on_gateway_update(Config, Gateway, GwState = #{ctx := Ctx}) -> logger:error("Failed to update ~ts; " "reason: {~0p, ~0p} stacktrace: ~0p", [GwName, Class, Reason, Stk]), - {error, {Class, Reason}} + {error, Reason} end. on_gateway_unload(_Gateway = #{ name := GwName, diff --git a/apps/emqx_gateway/src/mqttsn/emqx_sn_impl.erl b/apps/emqx_gateway/src/mqttsn/emqx_sn_impl.erl index 3579bf4bd..a99f81f0a 100644 --- a/apps/emqx_gateway/src/mqttsn/emqx_sn_impl.erl +++ b/apps/emqx_gateway/src/mqttsn/emqx_sn_impl.erl @@ -106,7 +106,7 @@ on_gateway_update(Config, Gateway, GwState = #{ctx := Ctx}) -> logger:error("Failed to update ~ts; " "reason: {~0p, ~0p} stacktrace: ~0p", [GwName, Class, Reason, Stk]), - {error, {Class, Reason}} + {error, Reason} end. on_gateway_unload(_Gateway = #{ name := GwName, diff --git a/apps/emqx_gateway/src/stomp/emqx_stomp_impl.erl b/apps/emqx_gateway/src/stomp/emqx_stomp_impl.erl index 8e9ae6d1f..47d1899c9 100644 --- a/apps/emqx_gateway/src/stomp/emqx_stomp_impl.erl +++ b/apps/emqx_gateway/src/stomp/emqx_stomp_impl.erl @@ -87,7 +87,7 @@ on_gateway_update(Config, Gateway, GwState = #{ctx := Ctx}) -> logger:error("Failed to update ~ts; " "reason: {~0p, ~0p} stacktrace: ~0p", [GwName, Class, Reason, Stk]), - {error, {Class, Reason}} + {error, Reason} end. on_gateway_unload(_Gateway = #{ name := GwName,