diff options
| author | iajwjw <[email protected]> | 2025-11-28 12:04:02 +0300 |
|---|---|---|
| committer | iajwjw <[email protected]> | 2025-11-28 12:20:14 +0300 |
| commit | 838ceb716a0f2ccd1d2f2760df260879a5d4b45a (patch) | |
| tree | c6477505e7aabca90ddb32f26ab729301572abc9 /library/cpp/lwtrace | |
| parent | bae0787a658047e633def6584ce1f284837c70cb (diff) | |
added for each shuttle function to lwtrace orbit
Хочется извлечь spanId из орбиты - для этого удобнее всего пройтись по всем шаттлам орбиты и собрать их spanId.
Уже реализована функция `void ForEachShuttle(ui64 traceIdx, TFunc&& func)`, но она требует `traceIdx`, который не всегда можно легко достать. Поэтому добавляю отдельную функцию для итерации по всем шаттлам орбиты.
ПР в котором используется новая функциональность: https://github.com/ydb-platform/nbs/pull/4730
commit_hash:ec94a22da98b998f53f7456d5bcf116a7b5b88e6
Diffstat (limited to 'library/cpp/lwtrace')
| -rw-r--r-- | library/cpp/lwtrace/shuttle.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/library/cpp/lwtrace/shuttle.h b/library/cpp/lwtrace/shuttle.h index 686f63ac85f..6950b3877a4 100644 --- a/library/cpp/lwtrace/shuttle.h +++ b/library/cpp/lwtrace/shuttle.h @@ -265,6 +265,20 @@ namespace NLWTrace { }); } + template <class TFunc> + void ForEachShuttle(TFunc&& func) + { + NotConcurrent( + [&](TShuttlePtr& head) + { + TShuttlePtr* ref = &head; + while (IShuttle* s = ref->Get()) { + func(s); + ref = &s->GetNext(); + } + }); + } + void Serialize(ui64 traceIdx, TShuttleTrace& msg) { ForEachShuttle(traceIdx, [&] (NLWTrace::IShuttle* shuttle) { shuttle->Serialize(msg); |
