in genie-common-internal/src/main/java/com/netflix/genie/common/internal/tracing/brave/impl/EnvVarBraveTracePropagatorImpl.java [201:246]
private Map<String, String> inject(final TraceContext traceContext, final boolean isForAgent) {
try {
final Map<String, String> propagationContext = new HashMap<>();
propagationContext.put(
isForAgent ? GENIE_AGENT_B3_TRACE_ID_LOW_KEY : GENIE_JOB_B3_TRACE_ID_LOW_KEY,
Long.toString(traceContext.traceId())
);
propagationContext.put(
isForAgent ? GENIE_AGENT_B3_SPAN_ID_KEY : GENIE_JOB_B3_SPAN_ID_KEY,
Long.toString(traceContext.spanId())
);
propagationContext.put(
isForAgent ? GENIE_AGENT_B3_SAMPLED_KEY : GENIE_JOB_B3_SAMPLED_KEY,
traceContext.sampled().toString()
);
// only propagate high bits of trace id if they're non-zero
final long traceIdHigh = traceContext.traceIdHigh();
if (traceIdHigh != NO_TRACE_ID_HIGH) {
propagationContext.put(
isForAgent ? GENIE_AGENT_B3_TRACE_ID_HIGH_KEY : GENIE_JOB_B3_TRACE_ID_HIGH_KEY,
Long.toString(traceIdHigh)
);
}
final Long parentSpanId = traceContext.parentId();
if (parentSpanId != null) {
propagationContext.put(
isForAgent ? GENIE_AGENT_B3_PARENT_SPAN_ID_KEY : GENIE_JOB_B3_PARENT_SPAN_ID_KEY,
Long.toString(parentSpanId)
);
}
return propagationContext;
} catch (final Throwable t) {
LOG.warn(
"Unable to inject trace context for propagation to {} due to {}",
isForAgent ? "agent" : "job",
t.getMessage(),
t
);
// Since we don't know what has been injected and what hasn't for now just punt and return
// empty so that downstream starts fresh
return new HashMap<>();
}
}