diff options
author | Daniil Cherednik <[email protected]> | 2023-06-15 18:24:59 +0300 |
---|---|---|
committer | Daniil Cherednik <[email protected]> | 2023-06-15 18:26:33 +0300 |
commit | 068d4453cf9fc68c875eee73f5c637bb076f6a71 (patch) | |
tree | da3e83fdb9488ea08faa39d8b41916744f9acad7 /library/cpp/lwtrace | |
parent | 7e7de263d4acbc6eacf92b618bcb5f9049bccc9b (diff) |
Create stable-23-2 branch
x-stable-origin-commit: 3fd4d58117c143ed9e6b21813ccd9e507d2cd4d3
Diffstat (limited to 'library/cpp/lwtrace')
-rw-r--r-- | library/cpp/lwtrace/control.cpp | 9 | ||||
-rw-r--r-- | library/cpp/lwtrace/trace_ut.cpp | 46 |
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) { |