12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #include "log_shuttle.h"
- #include "probes.h"
- namespace NLWTrace {
- LWTRACE_USING(LWTRACE_INTERNAL_PROVIDER);
- #ifdef LWTRACE_DISABLE
- template <class TDepot>
- bool TLogShuttle<TDepot>::DoFork(TShuttlePtr& child) {
- Y_UNUSED(child);
- return false;
- }
- template <class TDepot>
- bool TLogShuttle<TDepot>::DoJoin(const TShuttlePtr& child) {
- Y_UNUSED(child);
- return false;
- }
- #else
- template <class TDepot>
- bool TLogShuttle<TDepot>::DoFork(TShuttlePtr& child) {
- if (child = Executor->RentShuttle()) {
- child->SetParentSpanId(GetSpanId());
- Executor->Cast(child)->SetIgnore(true);
- TParams params;
- params.Param[0].CopyConstruct<ui64>(child->GetSpanId());
- bool result = DoAddProbe(&LWTRACE_GET_NAME(Fork).Probe, params, 0);
- TUserSignature<ui64>::DestroyParams(params);
- return result;
- }
- AtomicIncrement(ForkFailed);
- return false;
- }
- template <class TDepot>
- bool TLogShuttle<TDepot>::DoJoin(const TShuttlePtr& shuttle) {
- auto* child = Executor->Cast(shuttle);
- TParams params;
- params.Param[0].CopyConstruct<ui64>(child->GetSpanId());
- params.Param[1].CopyConstruct<ui64>(child->TrackLog.Items.size());
- bool result = DoAddProbe(&LWTRACE_GET_NAME(Join).Probe, params, 0);
- TUserSignature<ui64, ui64>::DestroyParams(params);
- if (result) {
- with_lock (Lock) {
- ssize_t n = MaxTrackLength - TrackLog.Items.size();
- for (auto& item: child->TrackLog.Items) {
- if (n-- <= 0) {
- TrackLog.Truncated = true;
- break;
- }
- TrackLog.Items.emplace_back(item);
- }
- }
- }
- AtomicAdd(ForkFailed, AtomicGet(child->ForkFailed));
- Executor->ParkShuttle(child);
- return result;
- }
- #endif
- template class TLogShuttle<TDurationDepot>;
- template class TLogShuttle<TCyclicDepot>;
- }
|