fix(telemetry): use thread_local PRNG for span IDs and update class diagram

Replace per-call std::random_device with thread_local std::mt19937 in
txSpan() for span ID generation. random_device is ~423x slower due to
/dev/urandom syscalls on each construction; mt19937 is seeded once per
thread and reused for all subsequent span IDs.

Update the SpanGuard class ASCII diagram to include txSpan factory
methods that were added in the hash-derived trace ID commit.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Pratik Mankawde
2026-04-27 14:34:47 +01:00
parent 7e93e75d8e
commit ff27e62e1f
2 changed files with 20 additions and 18 deletions

View File

@@ -250,9 +250,9 @@ SpanGuard::txSpan(
otel_trace::TraceId traceId(opentelemetry::nostd::span<std::uint8_t const, 16>(hashData, 16));
std::uint8_t spanIdBytes[8];
std::random_device rd;
thread_local std::mt19937 prng{std::random_device{}()};
for (auto& b : spanIdBytes)
b = static_cast<std::uint8_t>(rd());
b = static_cast<std::uint8_t>(prng());
otel_trace::SpanId spanId(opentelemetry::nostd::span<std::uint8_t const, 8>(spanIdBytes, 8));
otel_trace::SpanContext syntheticCtx(