Cartridge role reload resets metrics data
DifferentialOrange opened this issue · 4 comments
DifferentialOrange commented
metrics
package should support role reload, while it resets all observations and collectors.
Steps to reproduce
-
Create template application
cartridge create --name test-app
-
Change
init.lua
local ok, err = cartridge.cfg({ roles_reload_allowed = true, roles = { 'cartridge.roles.vshard-storage', 'cartridge.roles.vshard-router', 'cartridge.roles.metrics', 'app.roles.custom', }, })
-
Start an application
cartridge build cartridge start -d cartridge replicasets setup --bootstrap-vshard
-
Connect to instance
cartridge enter router
-
Execute reload
test-reload.router> metrics = require('metrics') --- ... test-reload.router> metrics.counter('c'):inc() --- ... test-reload.router> metrics.collect() --- - - label_pairs: alias: router timestamp: 1640183661554368 value: 1 metric_name: c ... test-reload.router> require("cartridge.roles").reload() --- - true ... test-reload.router> metrics = require('metrics') --- ... test-reload.router> metrics.collect() --- - [] ... test-reload.router> metrics.collectors() --- - [] ...
Totktonada commented
Why do you think that this is a problem?
DifferentialOrange commented
Why do you think that this is a problem?
I've discussed it with @yngvar-antonsson and he said this behavior is unexpected.
yngvar-antonsson commented
Reload of metrics package (without Cartridge) doesn't reset collectors, so cartridge hot reload doesn't have to reset them too.
DifferentialOrange commented
I think
package.loaded['cartridge.hotreload']
if hotreload ~= nil then
hotreload.whitelist_globals({'__metrics_registry'})`
end
is the simplest and satisfying solution.