From e304a8d61d1df6385ff591bd9cac492c931dd24f Mon Sep 17 00:00:00 2001 From: Igor Zolotarev Date: Mon, 12 Sep 2022 20:22:09 +0300 Subject: [PATCH] Reset callbacks on hotreload --- CHANGELOG.md | 1 + metrics/init.lua | 2 ++ test/integration/cartridge_hotreload_test.lua | 20 +++++++++++++++++++ test/metrics_test.lua | 18 +++++++++++++++++ 4 files changed, 41 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bc073d6..63b76d07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - `tnt_synchro_queue_len` metric type +- Reset callbacks on hotreload ## [0.15.0] - 2022-08-09 ### Fixed diff --git a/metrics/init.lua b/metrics/init.lua index eba0a685..a23a7a58 100644 --- a/metrics/init.lua +++ b/metrics/init.lua @@ -16,6 +16,8 @@ local registry = rawget(_G, '__metrics_registry') if not registry then registry = Registry.new() end +registry.callbacks = {} + rawset(_G, '__metrics_registry', registry) local hotreload = package.loaded['cartridge.hotreload'] diff --git a/test/integration/cartridge_hotreload_test.lua b/test/integration/cartridge_hotreload_test.lua index 756f2453..cdabdd92 100644 --- a/test/integration/cartridge_hotreload_test.lua +++ b/test/integration/cartridge_hotreload_test.lua @@ -230,3 +230,23 @@ g.test_cartridge_hotreload_not_reset_collectors = function() value = 1, }) end + +g.test_cartridge_hotreload_reset_callbacks = function() + local main_server = g.cluster:server('main') + upload_config() + + local len_before_hotreload = main_server:exec(function() + local test_utils = require('test.utils') + local Registry = rawget(_G, '__metrics_registry') + return test_utils.len(Registry.callbacks) + end) + + reload_roles() + + local len_after_hotreload = main_server:exec(function() + local test_utils = require('test.utils') + local Registry = rawget(_G, '__metrics_registry') + return test_utils.len(Registry.callbacks) + end) + t.assert_equals(len_before_hotreload, len_after_hotreload) +end diff --git a/test/metrics_test.lua b/test/metrics_test.lua index 4a984ac2..e8f1969d 100755 --- a/test/metrics_test.lua +++ b/test/metrics_test.lua @@ -138,3 +138,21 @@ g.test_default_metrics_clear = function() metrics.invoke_callbacks() t.assert(#metrics.collect() > 0) end + +g.test_hotreload_remove_callbacks = function() + metrics.enable_default_metrics() + + local Registry = rawget(_G, '__metrics_registry') + local len_before_hotreload = utils.len(Registry.callbacks) + t.assert_gt(len_before_hotreload, 0) + + package.loaded['metrics'] = nil + + metrics = require('metrics') + metrics.enable_default_metrics() + + Registry = rawget(_G, '__metrics_registry') + local len_after_hotreload = utils.len(Registry.callbacks) + + t.assert_equals(len_before_hotreload, len_after_hotreload) +end