From 901573c6a588dcdc1900184fe77d55a83398c569 Mon Sep 17 00:00:00 2001 From: tigercl Date: Sat, 22 Aug 2020 09:59:55 +0800 Subject: [PATCH] fix(topic-metrics): fix the issue that the corresponding data is not properly cleaned up when unregistering (#3679) --- src/emqx_mod_topic_metrics.erl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/emqx_mod_topic_metrics.erl b/src/emqx_mod_topic_metrics.erl index b5b4c24e6..813d8d059 100644 --- a/src/emqx_mod_topic_metrics.erl +++ b/src/emqx_mod_topic_metrics.erl @@ -247,7 +247,10 @@ handle_call({unregister, Topic}, _From, State = #state{speeds = Speeds}) -> {reply, ok, State}; true -> ok = delete_counters(Topic), - {reply, ok, State#state{speeds = maps:remove(Topic, Speeds)}} + NSpeeds = lists:foldl(fun(Metric, Acc) -> + maps:remove({Topic, Metric}, Acc) + end, Speeds, ?TOPIC_METRICS), + {reply, ok, State#state{speeds = NSpeeds}} end; handle_call({get_rate, Topic, Metric}, _From, State = #state{speeds = Speeds}) -> @@ -271,7 +274,7 @@ handle_info(ticking, State = #state{speeds = Speeds}) -> NSpeeds = maps:map( fun({Topic, Metric}, Speed) -> case val(Topic, Metric) of - {error, topic_not_found} -> maps:remove(Topic, Speeds); + {error, topic_not_found} -> maps:remove({Topic, Metric}, Speeds); Val -> calculate_speed(Val, Speed) end end, Speeds),