summaryrefslogtreecommitdiffstats
path: root/library/cpp/lwtrace
diff options
context:
space:
mode:
authoriajwjw <[email protected]>2025-11-28 12:04:02 +0300
committeriajwjw <[email protected]>2025-11-28 12:20:14 +0300
commit838ceb716a0f2ccd1d2f2760df260879a5d4b45a (patch)
treec6477505e7aabca90ddb32f26ab729301572abc9 /library/cpp/lwtrace
parentbae0787a658047e633def6584ce1f284837c70cb (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.h14
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);