aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/monlib/metrics/metric_registry.cpp
diff options
context:
space:
mode:
authork-vukolov <k-vukolov@yandex-team.ru>2022-03-29 16:44:31 +0300
committerk-vukolov <k-vukolov@yandex-team.ru>2022-03-29 16:44:31 +0300
commit8346d1d110370353c7585db281fb3016b988791e (patch)
treea3fd235b0f65b3d5b1fd8af2d64d41f644d3b705 /library/cpp/monlib/metrics/metric_registry.cpp
parentf5e0c92bca2eea631a3261806192e1144bd9ab77 (diff)
downloadydb-8346d1d110370353c7585db281fb3016b988791e.tar.gz
Copy metrics while accept
ref:e23a9eb7d1d1bc875bdf136ed30b9605db304bb8
Diffstat (limited to 'library/cpp/monlib/metrics/metric_registry.cpp')
-rw-r--r--library/cpp/monlib/metrics/metric_registry.cpp19
1 files changed, 13 insertions, 6 deletions
diff --git a/library/cpp/monlib/metrics/metric_registry.cpp b/library/cpp/monlib/metrics/metric_registry.cpp
index 3d7ffd40cf..2c64a23ead 100644
--- a/library/cpp/monlib/metrics/metric_registry.cpp
+++ b/library/cpp/monlib/metrics/metric_registry.cpp
@@ -180,7 +180,7 @@ namespace NMonitoring {
}
{
- IMetricPtr metric = MakeHolder<TMetric>(std::forward<Args>(args)...);
+ IMetricPtr metric = MakeIntrusive<TMetric>(std::forward<Args>(args)...);
TWriteGuard g{*Lock_};
// decltype(Metrics_)::iterator breaks build on windows
@@ -215,17 +215,24 @@ namespace NMonitoring {
consumer->OnLabelsEnd();
}
+ TVector<std::pair<ILabelsPtr, IMetricPtr>> tmpMetrics;
+
{
TReadGuard g{*Lock_};
+ tmpMetrics.reserve(Metrics_.size());
for (const auto& it: Metrics_) {
- ILabels* labels = it.first.Get();
- IMetric* metric = it.second.Get();
- ConsumeMetric(time, consumer, metric, [&]() {
- ConsumeLabels(consumer, *labels);
- });
+ tmpMetrics.push_back(it);
}
}
+ for (const auto& it: tmpMetrics) {
+ ILabels* labels = it.first.Get();
+ IMetric* metric = it.second.Get();
+ ConsumeMetric(time, consumer, metric, [&]() {
+ ConsumeLabels(consumer, *labels);
+ });
+ }
+
consumer->OnStreamEnd();
}