Skip to content

Commit 33c8913

Browse files
committed
cancels context propagation
1 parent 95d5a01 commit 33c8913

File tree

6 files changed

+46
-1
lines changed

6 files changed

+46
-1
lines changed

BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ cc_library(
4242
"src/datadog/string_util.cpp",
4343
"src/datadog/tag_propagation.cpp",
4444
"src/datadog/tags.cpp",
45+
"src/datadog/trace_source.cpp",
4546
"src/datadog/telemetry_metrics.cpp",
4647
"src/datadog/threaded_event_scheduler.cpp",
4748
"src/datadog/tracer_config.cpp",
@@ -117,6 +118,7 @@ cc_library(
117118
"include/datadog/tracer_config.h",
118119
"include/datadog/tracer_signature.h",
119120
"include/datadog/trace_id.h",
121+
"include/datadog/trace_source.h",
120122
"include/datadog/trace_sampler_config.h",
121123
"include/datadog/trace_segment.h",
122124
"include/datadog/version.h",

include/datadog/dict_writer.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ class DictWriter {
2121
// implementation may, but is not required to, overwrite any previous value at
2222
// `key`.
2323
virtual void set(StringView key, StringView value) = 0;
24+
25+
// Removes the entry associated with the given key.
26+
virtual void erase(StringView){};
2427
};
2528

2629
} // namespace tracing

src/datadog/tags.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ extern const std::string apm_enabled; // _dd.apm.enabled
4646

4747
// Return whether the specified `tag_name` is reserved for use internal to this
4848
// library.
49-
constexpr inline bool is_internal(StringView tag_name) {
49+
inline bool is_internal(StringView tag_name) {
5050
return starts_with(tag_name, "_dd.");
5151
}
5252

src/datadog/trace_segment.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,18 @@ bool TraceSegment::inject(DictWriter& writer, const SpanData& span,
359359
// - sampling priority is DROP
360360
if (!tracing_enabled_) {
361361
if (ts_tag_found == local_root_tags.cend() && sampling_priority <= 0) {
362+
writer.erase("x-datadog-trace-id");
363+
writer.erase("x-datadog-parent-id");
364+
writer.erase("x-datadog-sampling-priority");
365+
writer.erase("x-datadog-origin");
366+
writer.erase("x-datadog-trace-id");
367+
writer.erase("x-datadog-tags");
368+
writer.erase("x-b3-traceid");
369+
writer.erase("x-b3-spanid");
370+
writer.erase("x-b3-sampled");
371+
writer.erase("x-datadog-origin");
372+
writer.erase("traceparent");
373+
writer.erase("tracestate");
362374
return false;
363375
}
364376
}

test/mocks/dict_writers.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,6 @@ struct MockDictWriter : public DictWriter {
1414
void set(StringView key, StringView value) override {
1515
items.insert_or_assign(std::string(key), std::string(value));
1616
}
17+
18+
void erase(StringView key) override { items.erase(std::string(key)); }
1719
};

test/test_span.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,32 @@ TEST_SPAN("injection") {
485485
};
486486
Tracer tracer{*finalized_config, std::make_shared<Generator>(42)};
487487

488+
SECTION("APM Disabled cancel context propagation") {
489+
config.tracing_enabled = false;
490+
auto finalized_config = finalize_config(config);
491+
492+
Tracer apm_disabled_tracer{*finalized_config,
493+
std::make_shared<Generator>(42)};
494+
495+
auto apm_span = tracer.create_span();
496+
MockDictWriter writer;
497+
apm_span.inject(writer);
498+
499+
REQUIRE(writer.items.empty() == false);
500+
501+
// Consume the span that MUST be kept for service liveness.
502+
{
503+
apm_disabled_tracer.create_span();
504+
}
505+
506+
auto span = apm_disabled_tracer.create_span();
507+
508+
// reuse the same writer. Since span generated from apm_disabled_tracer is
509+
// not marked by a product injection should be cancelled.
510+
span.inject(writer);
511+
CHECK(writer.items.empty());
512+
}
513+
488514
SECTION("trace ID, parent ID ,and sampling priority") {
489515
auto span = tracer.create_span();
490516
REQUIRE(span.trace_id() == 42);

0 commit comments

Comments
 (0)