Skip to content

Commit ed76c2c

Browse files
lutterclaude
andcommitted
graph: Replace std::sync::RwLock with parking_lot::RwLock in MetricsRegistry
Replace std::sync::RwLock with parking_lot::RwLock for the global metrics caches in MetricsRegistry. This reduces lock contention when registering or looking up global metrics. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 4ada602 commit ed76c2c

1 file changed

Lines changed: 11 additions & 20 deletions

File tree

graph/src/components/metrics/registry.rs

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use std::collections::HashMap;
2-
use std::sync::{Arc, RwLock};
2+
use std::sync::Arc;
3+
4+
use crate::parking_lot::RwLock;
35

46
use prometheus::{labels, Histogram, IntCounterVec};
57
use prometheus::{IntCounter, IntGauge};
@@ -109,14 +111,13 @@ impl MetricsRegistry {
109111
};
110112
let counters = CounterVec::new(opts, variable_labels)?;
111113
let id = counters.desc().first().unwrap().id;
112-
let maybe_counter = self.global_counter_vecs.read().unwrap().get(&id).cloned();
114+
let maybe_counter = self.global_counter_vecs.read().get(&id).cloned();
113115
if let Some(counters) = maybe_counter {
114116
Ok(counters)
115117
} else {
116118
self.register(name, Box::new(counters.clone()));
117119
self.global_counter_vecs
118120
.write()
119-
.unwrap()
120121
.insert(id, counters.clone());
121122
Ok(counters)
122123
}
@@ -161,15 +162,12 @@ impl MetricsRegistry {
161162
) -> Result<Counter, PrometheusError> {
162163
let counter = counter_with_labels(name, help, const_labels)?;
163164
let id = counter.desc().first().unwrap().id;
164-
let maybe_counter = self.global_counters.read().unwrap().get(&id).cloned();
165+
let maybe_counter = self.global_counters.read().get(&id).cloned();
165166
if let Some(counter) = maybe_counter {
166167
Ok(counter)
167168
} else {
168169
self.register(name, Box::new(counter.clone()));
169-
self.global_counters
170-
.write()
171-
.unwrap()
172-
.insert(id, counter.clone());
170+
self.global_counters.write().insert(id, counter.clone());
173171
Ok(counter)
174172
}
175173
}
@@ -210,15 +208,12 @@ impl MetricsRegistry {
210208
) -> Result<Gauge, PrometheusError> {
211209
let gauge = gauge_with_labels(name, help, const_labels)?;
212210
let id = gauge.desc().first().unwrap().id;
213-
let maybe_gauge = self.global_gauges.read().unwrap().get(&id).cloned();
211+
let maybe_gauge = self.global_gauges.read().get(&id).cloned();
214212
if let Some(gauge) = maybe_gauge {
215213
Ok(gauge)
216214
} else {
217215
self.register(name, Box::new(gauge.clone()));
218-
self.global_gauges
219-
.write()
220-
.unwrap()
221-
.insert(id, gauge.clone());
216+
self.global_gauges.write().insert(id, gauge.clone());
222217
Ok(gauge)
223218
}
224219
}
@@ -232,15 +227,12 @@ impl MetricsRegistry {
232227
let opts = Opts::new(name, help);
233228
let gauges = GaugeVec::new(opts, variable_labels)?;
234229
let id = gauges.desc().first().unwrap().id;
235-
let maybe_gauge = self.global_gauge_vecs.read().unwrap().get(&id).cloned();
230+
let maybe_gauge = self.global_gauge_vecs.read().get(&id).cloned();
236231
if let Some(gauges) = maybe_gauge {
237232
Ok(gauges)
238233
} else {
239234
self.register(name, Box::new(gauges.clone()));
240-
self.global_gauge_vecs
241-
.write()
242-
.unwrap()
243-
.insert(id, gauges.clone());
235+
self.global_gauge_vecs.write().insert(id, gauges.clone());
244236
Ok(gauges)
245237
}
246238
}
@@ -254,14 +246,13 @@ impl MetricsRegistry {
254246
let opts = HistogramOpts::new(name, help);
255247
let histograms = HistogramVec::new(opts, variable_labels)?;
256248
let id = histograms.desc().first().unwrap().id;
257-
let maybe_histogram = self.global_histogram_vecs.read().unwrap().get(&id).cloned();
249+
let maybe_histogram = self.global_histogram_vecs.read().get(&id).cloned();
258250
if let Some(histograms) = maybe_histogram {
259251
Ok(histograms)
260252
} else {
261253
self.register(name, Box::new(histograms.clone()));
262254
self.global_histogram_vecs
263255
.write()
264-
.unwrap()
265256
.insert(id, histograms.clone());
266257
Ok(histograms)
267258
}

0 commit comments

Comments
 (0)