summaryrefslogtreecommitdiffstats
path: root/library/cpp/lwtrace
diff options
context:
space:
mode:
authorDaniil Cherednik <[email protected]>2023-06-15 18:24:59 +0300
committerDaniil Cherednik <[email protected]>2023-06-15 18:26:33 +0300
commit068d4453cf9fc68c875eee73f5c637bb076f6a71 (patch)
treeda3e83fdb9488ea08faa39d8b41916744f9acad7 /library/cpp/lwtrace
parent7e7de263d4acbc6eacf92b618bcb5f9049bccc9b (diff)
Create stable-23-2 branch
x-stable-origin-commit: 3fd4d58117c143ed9e6b21813ccd9e507d2cd4d3
Diffstat (limited to 'library/cpp/lwtrace')
-rw-r--r--library/cpp/lwtrace/control.cpp9
-rw-r--r--library/cpp/lwtrace/trace_ut.cpp46
2 files changed, 47 insertions, 8 deletions
diff --git a/library/cpp/lwtrace/control.cpp b/library/cpp/lwtrace/control.cpp
index d9404ff269a..b0d40f70633 100644
--- a/library/cpp/lwtrace/control.cpp
+++ b/library/cpp/lwtrace/control.cpp
@@ -73,11 +73,18 @@ TTraceDeserializeStatus TManager::HandleTraceResponse(
LWTRACK(DeserializationError, orbit, probe->Event.Name, probe->Event.GetProvider());
result.AddFailedEventName(v.GetName());
} else {
+ // in case of fork join probes would be like "start 0 fork 1 ....... join 10 forked 5 forked 6"
ui64 timestamp = EpochNanosecondsToCycles(v.GetTimestampNanosec());
+ if (timestamp > prev) {
+ timestamp = prev + (timestamp-prev)*timeScale + timeOffset;
+ } else {
+ timestamp += timeOffset;
+ }
+
orbit.AddProbe(
probe,
params,
- prev + (timestamp-prev)*timeScale + timeOffset);
+ timestamp);
probe->Event.Signature.DestroyParams(params);
prev = timestamp;
}
diff --git a/library/cpp/lwtrace/trace_ut.cpp b/library/cpp/lwtrace/trace_ut.cpp
index afb2f4e53f7..9a29923e28c 100644
--- a/library/cpp/lwtrace/trace_ut.cpp
+++ b/library/cpp/lwtrace/trace_ut.cpp
@@ -717,27 +717,59 @@ Y_UNIT_TEST_SUITE(LWTraceTrace) {
TManager manager(*Singleton<TProbeRegistry>(), false);
TOrbit orbit;
+ TOrbit child;
+
TTraceRequest req;
req.SetIsTraced(true);
- manager.HandleTraceRequest(req, orbit);
+ bool traced = manager.HandleTraceRequest(req, orbit);
+ UNIT_ASSERT(traced);
LWTRACK(NoParam, orbit);
+
+ orbit.Fork(child);
+
LWTRACK(IntParam, orbit, 1);
- LWTRACK(StringParam, orbit, "str");
+ LWTRACK(IntParam, child, 2);
+
+ LWTRACK(StringParam, orbit, "str1");
+ LWTRACK(StringParam, child, "str2");
+
LWTRACK(EnumParams, orbit, ValueA, EEnumClass::ValueC);
LWTRACK(InstantParam, orbit, TInstant::Seconds(42));
LWTRACK(DurationParam, orbit, TDuration::MilliSeconds(146));
LWTRACK(ProtoEnum, orbit, OT_EQ);
LWTRACK(IntIntParams, orbit, 1, 2);
- TTraceResponse resp;
- auto& r = *resp.MutableTrace();
- orbit.Serialize(0, r);
+ orbit.Join(child);
+
+ TTraceResponse resp1;
+ auto& r1 = *resp1.MutableTrace();
+ orbit.Serialize(0, r1);
+
+ UNIT_ASSERT_VALUES_EQUAL(r1.EventsSize(), 12);
+
+ TOrbit other;
+ traced = manager.HandleTraceRequest(req, other);
+ UNIT_ASSERT(traced);
- TOrbit orbit1;
UNIT_ASSERT_VALUES_EQUAL(
- manager.HandleTraceResponse(resp, manager.GetProbesMap(), orbit1).IsSuccess,
+ manager.HandleTraceResponse(resp1, manager.GetProbesMap(), other).IsSuccess,
true);
+
+ TTraceResponse resp2;
+ auto& r2 = *resp2.MutableTrace();
+ other.Serialize(0, r2);
+ UNIT_ASSERT_VALUES_EQUAL(r2.EventsSize(), 12);
+
+ TString proto1;
+ bool parsed = NProtoBuf::TextFormat::PrintToString(resp1, &proto1);
+ UNIT_ASSERT(parsed);
+
+ TString proto2;
+ parsed = NProtoBuf::TextFormat::PrintToString(resp2, &proto2);
+ UNIT_ASSERT(parsed);
+
+ UNIT_ASSERT_VALUES_EQUAL(proto1, proto2);
}
Y_UNIT_TEST(TrackForkJoin) {