in cpp/writer/TraceLifecycleVisitor.cpp [54:117]
void TraceLifecycleVisitor::visit(const StandardEntry& entry) {
auto type = static_cast<EntryType>(entry.type);
switch (type) {
case EntryType::TRACE_END: {
int64_t trace_id = entry.extra;
if (trace_id != expected_trace_) {
return;
}
// write before we clean up state
if (hasDelegate()) {
delegates_.back()->visit(entry);
}
onTraceEnd(trace_id);
break;
}
case EntryType::TRACE_TIMEOUT:
case EntryType::TRACE_ABORT: {
int64_t trace_id = entry.extra;
if (trace_id != expected_trace_) {
return;
}
auto reason = type == EntryType::TRACE_TIMEOUT
? AbortReason::TIMEOUT
: AbortReason::CONTROLLER_INITIATED;
// write before we clean up state
if (hasDelegate()) {
delegates_.back()->visit(entry);
}
onTraceAbort(trace_id, reason);
break;
}
case EntryType::TRACE_BACKWARDS:
case EntryType::TRACE_START: {
int64_t trace_id = entry.extra;
if (trace_id != expected_trace_) {
return;
}
onTraceStart(trace_id, entry.matchid);
if (hasDelegate()) {
delegates_.back()->visit(entry);
}
if (type == EntryType::TRACE_BACKWARDS) {
trace_backward_callback_(*this);
}
break;
}
case EntryType::LOGGER_PRIORITY: {
if (expected_trace_ == entry.extra) {
thread_priority_ = std::make_unique<ScopedThreadPriority>(entry.callid);
}
if (hasDelegate()) {
delegates_.back()->visit(entry);
}
break;
}
default: {
if (hasDelegate()) {
delegates_.back()->visit(entry);
}
}
}
}