fix: uninstall telemetry handler on resource stop, use unique id
This commit is contained in:
parent
24eda247ae
commit
1ad3b5df17
|
@ -33,7 +33,7 @@ on_start(InstId, Config) ->
|
|||
authentication := Auth,
|
||||
ssl := SSL
|
||||
} = Config,
|
||||
_ = maybe_install_wolff_telemetry_handlers(),
|
||||
_ = maybe_install_wolff_telemetry_handlers(InstId),
|
||||
%% it's a bug if producer config is not found
|
||||
%% the caller should not try to start a producer if
|
||||
%% there is no producer config
|
||||
|
@ -89,7 +89,7 @@ on_start(InstId, Config) ->
|
|||
throw(failed_to_start_kafka_producer)
|
||||
end.
|
||||
|
||||
on_stop(_InstId, #{client_id := ClientID, producers := Producers}) ->
|
||||
on_stop(InstanceID, #{client_id := ClientID, producers := Producers}) ->
|
||||
with_log_at_error(
|
||||
fun() -> wolff:stop_and_delete_supervised_producers(Producers) end,
|
||||
#{
|
||||
|
@ -103,6 +103,13 @@ on_stop(_InstId, #{client_id := ClientID, producers := Producers}) ->
|
|||
msg => "failed_to_delete_kafka_client",
|
||||
client_id => ClientID
|
||||
}
|
||||
),
|
||||
with_log_at_error(
|
||||
fun() -> uninstall_telemetry_handlers(InstanceID) end,
|
||||
#{
|
||||
msg => "failed_to_uninstall_telemetry_handlers",
|
||||
client_id => ClientID
|
||||
}
|
||||
).
|
||||
|
||||
%% @doc The callback API for rule-engine (or bridge without rules)
|
||||
|
@ -337,12 +344,20 @@ handle_telemetry_event(_EventId, _Metrics, _MetaData, _HandlerConfig) ->
|
|||
%% Event that we do not handle
|
||||
ok.
|
||||
|
||||
maybe_install_wolff_telemetry_handlers() ->
|
||||
-spec telemetry_handler_id(emqx_resource:resource_id()) -> binary().
|
||||
telemetry_handler_id(InstanceID) ->
|
||||
<<"emqx-bridge-kafka-producer-", InstanceID/binary, "-telemetry-handler">>.
|
||||
|
||||
uninstall_telemetry_handlers(InstanceID) ->
|
||||
HandlerID = telemetry_handler_id(InstanceID),
|
||||
telemetry:detach(HandlerID).
|
||||
|
||||
maybe_install_wolff_telemetry_handlers(InstanceID) ->
|
||||
%% Attach event handlers for Kafka telemetry events. If a handler with the
|
||||
%% handler id already exists, the attach_many function does nothing
|
||||
telemetry:attach_many(
|
||||
%% unique handler id
|
||||
<<"emqx-bridge-kafka-producer-telemetry-handler">>,
|
||||
telemetry_handler_id(InstanceID),
|
||||
%% Note: we don't handle `[wolff, success]' because,
|
||||
%% currently, we already increment the success counter for
|
||||
%% this resource at `emqx_rule_runtime:handle_action' when
|
||||
|
@ -358,6 +373,6 @@ maybe_install_wolff_telemetry_handlers() ->
|
|||
[wolff, retried_failed],
|
||||
[wolff, retried_success]
|
||||
],
|
||||
fun emqx_bridge_impl_kafka_producer:handle_telemetry_event/4,
|
||||
fun ?MODULE:handle_telemetry_event/4,
|
||||
[]
|
||||
).
|
||||
|
|
Loading…
Reference in New Issue