From 7cba5d9eecffca4a4773f254287e42587c427520 Mon Sep 17 00:00:00 2001 From: Igor Zolotarev Date: Fri, 21 Jan 2022 17:56:37 +0300 Subject: [PATCH 1/5] Don't reset collectors when Cartridge roles hot reload --- CHANGELOG.md | 3 ++ metrics/init.lua | 5 +++ test/helper.lua | 3 +- test/integration/cartridge_hotreload_test.lua | 44 ++++++++++++++++--- 4 files changed, 49 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4499e9f9..5f0d0e06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed +- Don't reset collectors when Cartridge roles hot reload + ### Deprecated - Metrics: diff --git a/metrics/init.lua b/metrics/init.lua index 0953d660..509ebc29 100644 --- a/metrics/init.lua +++ b/metrics/init.lua @@ -17,6 +17,11 @@ if not registry then end rawset(_G, '__metrics_registry', registry) +local hotreload = package.loaded['cartridge.hotreload'] +if hotreload ~= nil then + hotreload.whitelist_globals({'__metrics_registry'}) +end + local function collectors() return registry.collectors end diff --git a/test/helper.lua b/test/helper.lua index e3326d66..f2dc7c84 100644 --- a/test/helper.lua +++ b/test/helper.lua @@ -24,7 +24,7 @@ function helpers.entrypoint(name) return path end -function helpers.init_cluster() +function helpers.init_cluster(env) local cluster = helpers.Cluster:new({ datadir = fio.tempdir(), server_command = helpers.entrypoint('srv_basic'), @@ -38,6 +38,7 @@ function helpers.init_cluster() }, }, }, + env = env, }) cluster:start() return cluster diff --git a/test/integration/cartridge_hotreload_test.lua b/test/integration/cartridge_hotreload_test.lua index bc915a8d..201197ed 100644 --- a/test/integration/cartridge_hotreload_test.lua +++ b/test/integration/cartridge_hotreload_test.lua @@ -3,11 +3,12 @@ local t = require('luatest') local g = t.group() local helpers = require('test.helper') +local utils = require('test.utils') g.before_all(function() t.skip_if(type(helpers) ~= 'table', 'Skip cartridge test') - helpers.skip_cartridge_version_less('2.3.0') - g.cluster = helpers.init_cluster() + -- helpers.skip_cartridge_version_less('2.3.0') + g.cluster = helpers.init_cluster({TARANTOOL_ROLES_RELOAD_ALLOWED = 'true'}) end) g.after_all(function() @@ -57,9 +58,9 @@ end local function reload_roles() local main_server = g.cluster:server('main') - main_server.net_box:eval([[ - require('cartridge.roles').reload() - ]]) + t.assert(main_server.net_box:eval([[ + return require('cartridge.roles').reload() + ]])) end g.test_cartridge_hotreload_set_export = function() @@ -198,3 +199,36 @@ g.test_cartridge_hotreload_labels_from_config_and_set_labels = function() t.assert_equals(obs.label_pairs.alias, 'main') end end + +g.test_cartridge_hotreload_not_reset_collectors = function() + local main_server = g.cluster:server('main') + + main_server:exec(function() + local metrics = require('cartridge').service_get('metrics') + metrics.counter('hotreload_checker'):inc(1) + end) + + upload_config() + local resp = main_server:http_request('get', '/new-metrics') + t.assert_equals(resp.status, 200) + + local obs = utils.find_obs('hotreload_checker', {alias = 'main', app_name = 'myapp'}, resp.json) + t.assert_covers(obs, { + label_pairs = {alias = 'main', app_name = 'myapp'}, + metric_name = 'hotreload_checker', + value = 1, + }) + + reload_roles() + + main_server = g.cluster:server('main') + resp = main_server:http_request('get', '/new-metrics', {raise = false}) + t.assert_equals(resp.status, 200) + + obs = utils.find_obs('hotreload_checker', {alias = 'main', app_name = 'myapp'}, resp.json) + t.assert_covers(obs, { + label_pairs = {alias = 'main', app_name = 'myapp'}, + metric_name = 'hotreload_checker', + value = 1, + }) +end From 297eaae48de47d73c69ef414032b5ec786a75a2d Mon Sep 17 00:00:00 2001 From: Igor Zolotarev Date: Fri, 21 Jan 2022 18:30:54 +0300 Subject: [PATCH 2/5] Fix test --- test/integration/cartridge_hotreload_test.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/cartridge_hotreload_test.lua b/test/integration/cartridge_hotreload_test.lua index 201197ed..cfde35c7 100644 --- a/test/integration/cartridge_hotreload_test.lua +++ b/test/integration/cartridge_hotreload_test.lua @@ -7,7 +7,7 @@ local utils = require('test.utils') g.before_all(function() t.skip_if(type(helpers) ~= 'table', 'Skip cartridge test') - -- helpers.skip_cartridge_version_less('2.3.0') + helpers.skip_cartridge_version_less('2.3.0') g.cluster = helpers.init_cluster({TARANTOOL_ROLES_RELOAD_ALLOWED = 'true'}) end) From 81ef82a0a9ba88cbf88ac0a8fcd050dd71860ed5 Mon Sep 17 00:00:00 2001 From: Igor Zolotarev Date: Fri, 21 Jan 2022 18:46:30 +0300 Subject: [PATCH 3/5] Counter -> gauge --- test/integration/cartridge_hotreload_test.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/cartridge_hotreload_test.lua b/test/integration/cartridge_hotreload_test.lua index cfde35c7..9bde646f 100644 --- a/test/integration/cartridge_hotreload_test.lua +++ b/test/integration/cartridge_hotreload_test.lua @@ -205,7 +205,7 @@ g.test_cartridge_hotreload_not_reset_collectors = function() main_server:exec(function() local metrics = require('cartridge').service_get('metrics') - metrics.counter('hotreload_checker'):inc(1) + metrics.gauge('hotreload_checker'):set(1) end) upload_config() From ff2dbab1f0b233213c802d4b7b2b11b38e9c8d0d Mon Sep 17 00:00:00 2001 From: Igor Zolotarev Date: Fri, 21 Jan 2022 19:16:17 +0300 Subject: [PATCH 4/5] Fix test (1) --- test/integration/cartridge_hotreload_test.lua | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/test/integration/cartridge_hotreload_test.lua b/test/integration/cartridge_hotreload_test.lua index 9bde646f..e86670c3 100644 --- a/test/integration/cartridge_hotreload_test.lua +++ b/test/integration/cartridge_hotreload_test.lua @@ -202,19 +202,18 @@ end g.test_cartridge_hotreload_not_reset_collectors = function() local main_server = g.cluster:server('main') + upload_config() main_server:exec(function() local metrics = require('cartridge').service_get('metrics') metrics.gauge('hotreload_checker'):set(1) end) - upload_config() local resp = main_server:http_request('get', '/new-metrics') t.assert_equals(resp.status, 200) - local obs = utils.find_obs('hotreload_checker', {alias = 'main', app_name = 'myapp'}, resp.json) - t.assert_covers(obs, { - label_pairs = {alias = 'main', app_name = 'myapp'}, + local obs = utils.find_metric('hotreload_checker', resp.json) + t.assert_covers(obs[1], { metric_name = 'hotreload_checker', value = 1, }) @@ -225,9 +224,8 @@ g.test_cartridge_hotreload_not_reset_collectors = function() resp = main_server:http_request('get', '/new-metrics', {raise = false}) t.assert_equals(resp.status, 200) - obs = utils.find_obs('hotreload_checker', {alias = 'main', app_name = 'myapp'}, resp.json) - t.assert_covers(obs, { - label_pairs = {alias = 'main', app_name = 'myapp'}, + obs = utils.find_metric('hotreload_checker', resp.json) + t.assert_covers(obs[1], { metric_name = 'hotreload_checker', value = 1, }) From b9546bbfc41ab5f1e4a72f1736a8b4ddf4e475e9 Mon Sep 17 00:00:00 2001 From: Igor Zolotarev Date: Tue, 25 Jan 2022 01:16:15 +0300 Subject: [PATCH 5/5] Raise=false --- test/integration/cartridge_hotreload_test.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/cartridge_hotreload_test.lua b/test/integration/cartridge_hotreload_test.lua index e86670c3..756f2453 100644 --- a/test/integration/cartridge_hotreload_test.lua +++ b/test/integration/cartridge_hotreload_test.lua @@ -209,7 +209,7 @@ g.test_cartridge_hotreload_not_reset_collectors = function() metrics.gauge('hotreload_checker'):set(1) end) - local resp = main_server:http_request('get', '/new-metrics') + local resp = main_server:http_request('get', '/new-metrics', {raise = false}) t.assert_equals(resp.status, 200) local obs = utils.find_metric('hotreload_checker', resp.json)