From fa16a331137a68ff7dd8f7600bbca2ccd7ddef3f Mon Sep 17 00:00:00 2001 From: Chris Goller Date: Wed, 20 Nov 2019 09:39:27 -0600 Subject: [PATCH 1/2] Add jaeger-debug-id as a tag If the trace was started with a debugID, adding jaeger-debug-id as tag ensures that the trace will be sampled in the "debug" mode. Additionally, the root span will have this ID as a searchable tag. Resolves: #136 Signed-off-by: Chris Goller --- src/jaegertracing/Tracer.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/jaegertracing/Tracer.cpp b/src/jaegertracing/Tracer.cpp index 331d44b0..1fb6087a 100644 --- a/src/jaegertracing/Tracer.cpp +++ b/src/jaegertracing/Tracer.cpp @@ -14,6 +14,7 @@ * limitations under the License. */ +#include "jaegertracing/Tag.h" #include "jaegertracing/Tracer.h" #include "jaegertracing/Reference.h" #include "jaegertracing/TraceID.h" @@ -85,6 +86,7 @@ Tracer::StartSpanWithOptions(string_view operationName, flags |= (static_cast(SpanContext::Flag::kSampled) | static_cast(SpanContext::Flag::kDebug)); + samplerTags.push_back(Tag(kJaegerDebugHeader, parent->debugID())); } else { const auto samplingStatus = From 7d815276ed2ba925c2de926c61de83e3a9090f5f Mon Sep 17 00:00:00 2001 From: Chris Goller Date: Fri, 22 Nov 2019 23:28:22 -0600 Subject: [PATCH 2/2] Add test for jaeger-debug-id correlation tag creation Signed-off-by: Chris Goller --- src/jaegertracing/TracerTest.cpp | 44 +++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/src/jaegertracing/TracerTest.cpp b/src/jaegertracing/TracerTest.cpp index 07291052..4a5a0057 100644 --- a/src/jaegertracing/TracerTest.cpp +++ b/src/jaegertracing/TracerTest.cpp @@ -118,7 +118,7 @@ absTimeDiff(const typename ClockType::time_point& lhs, TEST(Tracer, testTracer) { { - + const auto handle = testutils::TracerUtil::installGlobalTracer(); const auto tracer = std::static_pointer_cast(opentracing::Tracer::Global()); @@ -269,6 +269,48 @@ TEST(Tracer, testTracer) //std::this_thread::sleep_for(std::chrono::milliseconds(10000)); } +TEST(Tracer, testDebugSpan) +{ + const auto handle = testutils::TracerUtil::installGlobalTracer(); + const auto tracer = + std::static_pointer_cast(opentracing::Tracer::Global()); + + // we force span sampling and require debug-id as the extracted + // jaeger-debug-id correlation value. + std::string correlationID = "debug-id"; + + StrMap headers ={ + {kJaegerDebugHeader, correlationID}, + }; + + WriterMock headerWriter(headers); + ReaderMock headerReader(headers); + + const FakeSpanContext fakeCtx; + tracer->Inject(fakeCtx, headerWriter); + auto ext = tracer->Extract(headerReader); + + const SpanContext* ctx = dynamic_cast(ext->release()); + opentracing::StartSpanOptions opts; + opts.references.emplace_back(opentracing::SpanReferenceType::ChildOfRef, ctx); + + auto otspan = tracer->StartSpanWithOptions("name", opts); + // downcast to jaegertracing span implementation so we can inspect tags + const std::unique_ptr span(dynamic_cast(otspan.release())); + + const auto& spanTags = span->tags(); + auto spanItr = + std::find_if(std::begin(spanTags), std::end(spanTags), [](const Tag& tag) { + return tag.key() == kJaegerDebugHeader; + }); + ASSERT_NE(std::end(spanTags), spanItr); + ASSERT_TRUE(spanItr->value().is()); + ASSERT_EQ(spanItr->value().get(), correlationID); + + tracer->Close(); + opentracing::Tracer::InitGlobal(opentracing::MakeNoopTracer()); +} + TEST(Tracer, testConstructorFailure) { Config config;