diff options
author | k-vukolov <k-vukolov@yandex-team.ru> | 2022-03-29 16:44:31 +0300 |
---|---|---|
committer | k-vukolov <k-vukolov@yandex-team.ru> | 2022-03-29 16:44:31 +0300 |
commit | 8346d1d110370353c7585db281fb3016b988791e (patch) | |
tree | a3fd235b0f65b3d5b1fd8af2d64d41f644d3b705 /library/cpp/monlib/metrics/metric_registry.cpp | |
parent | f5e0c92bca2eea631a3261806192e1144bd9ab77 (diff) | |
download | ydb-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.cpp | 19 |
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(); } |