From baeee42f04e1aced0f4ec35802981540e8bf8239 Mon Sep 17 00:00:00 2001 From: Ehsan Saei <71217171+esigo@users.noreply.github.com> Date: Sat, 4 Dec 2021 10:01:58 +0100 Subject: [PATCH] Fix otlp generates null span ids (#1113) --- CHANGELOG.md | 2 ++ exporters/otlp/src/otlp_recordable.cc | 7 +++++-- exporters/otlp/test/otlp_recordable_test.cc | 8 ++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f07512ab34..56f43265cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ Increment the: ## [Unreleased] +* [EXPORTER] Fix otlp generates null span ids ([#1106](https://github.com/open-telemetry/opentelemetry-cpp/pull/1106)) + ## [1.1.0] 2021-11-19 * [BUILD] build release tarball when nlohmann-json not installed ([#1074](https://github.com/open-telemetry/opentelemetry-cpp/pull/1074)) diff --git a/exporters/otlp/src/otlp_recordable.cc b/exporters/otlp/src/otlp_recordable.cc index c3adef0243..0e6aa8f8a1 100644 --- a/exporters/otlp/src/otlp_recordable.cc +++ b/exporters/otlp/src/otlp_recordable.cc @@ -20,8 +20,11 @@ void OtlpRecordable::SetIdentity(const opentelemetry::trace::SpanContext &span_c trace::TraceId::kSize); span_.set_span_id(reinterpret_cast(span_context.span_id().Id().data()), trace::SpanId::kSize); - span_.set_parent_span_id(reinterpret_cast(parent_span_id.Id().data()), - trace::SpanId::kSize); + if (parent_span_id.IsValid()) + { + span_.set_parent_span_id(reinterpret_cast(parent_span_id.Id().data()), + trace::SpanId::kSize); + } span_.set_trace_state(span_context.trace_state()->ToHeader()); } diff --git a/exporters/otlp/test/otlp_recordable_test.cc b/exporters/otlp/test/otlp_recordable_test.cc index b6e50836e6..1c5b8a6895 100644 --- a/exporters/otlp/test/otlp_recordable_test.cc +++ b/exporters/otlp/test/otlp_recordable_test.cc @@ -39,6 +39,14 @@ TEST(OtlpRecordable, SetIdentity) EXPECT_EQ(rec.span().parent_span_id(), std::string(reinterpret_cast(parent_span_id.Id().data()), trace::SpanId::kSize)); + + OtlpRecordable rec_invalid_parent; + + constexpr uint8_t invalid_parent_span_id_buf[] = {0, 0, 0, 0, 0, 0, 0, 0}; + trace_api::SpanId invalid_parent_span_id{invalid_parent_span_id_buf}; + rec_invalid_parent.SetIdentity(span_context, invalid_parent_span_id); + + EXPECT_EQ(rec_invalid_parent.span().parent_span_id(), std::string{}); } TEST(OtlpRecordable, SetName)