Skip to content

Commit c0060ec

Browse files
committed
net: change metrics registration logic
1 parent efa342a commit c0060ec

3 files changed

Lines changed: 39 additions & 10 deletions

File tree

src/v/net/server.cc

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,11 @@ server::~server() = default;
4949

5050
void server::start() {
5151
if (!cfg.disable_metrics) {
52-
setup_metrics();
53-
_probe->setup_metrics(_metrics, cfg.name.c_str());
52+
setup_internal_metrics();
5453
}
5554

5655
if (!cfg.disable_public_metrics) {
5756
setup_public_metrics();
58-
_probe->setup_public_metrics(_public_metrics, cfg.name.c_str());
5957
}
6058

6159
if (cfg.connection_rate_bindings) {
@@ -320,6 +318,10 @@ ss::future<> server::stop() {
320318
if (_as.abort_requested()) {
321319
return ss::now();
322320
}
321+
322+
_metrics.clear();
323+
_public_metrics.clear();
324+
323325
// if shutdown_input wasn't called fallback to previous behavior i.e. stop()
324326
// waits for shutdown
325327
return wait_for_shutdown();
@@ -329,7 +331,10 @@ void server::set_memory_capacity(uint64_t new_capacity) {
329331
_memory.set_capacity(new_capacity);
330332
}
331333

332-
void server::setup_metrics() {
334+
void server::setup_internal_metrics() {
335+
if (_metrics_setup) {
336+
return;
337+
}
333338
namespace sm = ss::metrics;
334339
_metrics.add_group(
335340
prometheus_sanitize::metrics_name(cfg.name),
@@ -348,9 +353,14 @@ void server::setup_metrics() {
348353
"dispatch_handler_latency",
349354
[this] { return _hist.internal_histogram_logform(); },
350355
sm::description(ssx::sformat("{}: Latency ", cfg.name)))});
356+
_probe->setup_metrics(_metrics, cfg.name.c_str());
357+
_metrics_setup = true;
351358
}
352359

353360
void server::setup_public_metrics() {
361+
if (_public_metrics_setup) {
362+
return;
363+
}
354364
namespace sm = ss::metrics;
355365

356366
std::string_view server_name(cfg.name);
@@ -369,6 +379,8 @@ void server::setup_public_metrics() {
369379
{server_label(server_name)},
370380
[this] { return _hist.public_histogram_logform(); })
371381
.aggregate({sm::shard_label})});
382+
_probe->setup_public_metrics(_public_metrics, cfg.name.c_str());
383+
_public_metrics_setup = true;
372384
}
373385

374386
fmt::iterator server_configuration::format_to(fmt::iterator it) const {

src/v/net/server.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,10 @@ class server {
149149
bool abort_requested() const { return _as.abort_requested(); }
150150
void set_memory_capacity(uint64_t new_capacity);
151151

152+
protected:
153+
void setup_internal_metrics();
154+
void setup_public_metrics();
155+
152156
private:
153157
struct listener {
154158
ss::sstring name;
@@ -180,6 +184,8 @@ class server {
180184
std::unique_ptr<server_probe> _probe;
181185
metrics::internal_metric_groups _metrics;
182186
metrics::public_metric_groups _public_metrics;
187+
bool _metrics_setup{false};
188+
bool _public_metrics_setup{false};
183189

184190
std::optional<config_connection_rate_bindings> connection_rate_bindings;
185191
std::optional<connection_rate<>> _connection_rates;

src/v/rpc/rpc_server.h

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,21 @@ class rpc_server : public net::server {
3535
rpc_server(const rpc_server&) = delete;
3636
rpc_server& operator=(const rpc_server&) = delete;
3737

38-
void set_all_services_added() { _all_services_added = true; }
38+
void set_all_services_added() {
39+
_all_services_added = true;
40+
if (!config::shard_local_cfg().disable_metrics()) {
41+
for (auto& s : _services) {
42+
s->setup_metrics();
43+
}
44+
}
45+
}
3946

4047
// Adds the given services to the protocol.
4148
// May be called whether or not the server has already been started.
4249
void add_services(std::vector<std::unique_ptr<service>> services) {
4350
vassert(
4451
!_all_services_added,
4552
"Adding service after all services already added");
46-
if (!config::shard_local_cfg().disable_metrics()) {
47-
for (auto& s : services) {
48-
s->setup_metrics();
49-
}
50-
}
5153
std::move(
5254
services.begin(), services.end(), std::back_inserter(_services));
5355
}
@@ -63,6 +65,15 @@ class rpc_server : public net::server {
6365
_services.push_back(std::make_unique<T>(std::forward<Args>(args)...));
6466
}
6567

68+
void setup_metrics() {
69+
if (!config::shard_local_cfg().disable_metrics()) {
70+
net::server::setup_internal_metrics();
71+
}
72+
if (!config::shard_local_cfg().disable_public_metrics()) {
73+
net::server::setup_public_metrics();
74+
}
75+
}
76+
6677
private:
6778
ss::future<>
6879
dispatch_method_once(header, ss::lw_shared_ptr<net::connection>);

0 commit comments

Comments
 (0)