Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ddtrace/tracer: ensure access to trace tags is concurrency-safe (#1948) #1951

Merged
merged 1 commit into from
May 1, 2023

Conversation

katiehockman
Copy link
Contributor

@katiehockman katiehockman commented May 1, 2023

This is a cherry-pick of PR #1948

What does this PR do?

This commit adds a few methods to trace to allow safe access to the tags and propagatingTags members of trace to the marshaling code.

Fixes #1944

Motivation

Spancontext marshaling was accessing tracer internal structures without a lock, resulting in a data race and panic.

Describe how to test/QA your changes

Reviewer's Checklist

  • Changed code has unit tests for its functionality.
  • If this interacts with the agent in a new way, a system test has been added.

Sorry, something went wrong.

Verified

This commit was signed with the committer’s verified signature.
rarguelloF Rodrigo Argüello
Spancontext marshaling was accessing tracer internal structures without a
lock, resulting in a data race and panic.

This commit adds a few methods to trace to allow safe access to the tags
and propagatingTags members of trace to the marshaling code.

Fixes #1944
@katiehockman katiehockman marked this pull request as ready for review May 1, 2023 18:03
@katiehockman katiehockman requested a review from a team May 1, 2023 18:03
@ajgajg1134 ajgajg1134 added this to the v1.50.1 milestone May 1, 2023
@katiehockman katiehockman requested a review from knusbaum May 1, 2023 18:05
@pr-commenter
Copy link

pr-commenter bot commented May 1, 2023

Benchmarks

Comparing candidate commit c7b717e in PR branch hotfix-v1.50.1 with baseline commit 2e31956 in branch release-v1.50.x.

Found 1 performance improvements and 0 performance regressions! Performance is the same for 17 metrics, 0 unstable metrics.

scenario:BenchmarkConcurrentTracing-24

  • 🟩 execution_time [-0.152ms; -0.122ms] or [-11.477%; -9.183%]

@katiehockman
Copy link
Contributor Author

katiehockman commented May 1, 2023

The test failure is fine and is not related to this cherry-pick. It's happening because the bug fixed in #1933 isn't on this release branch (it's on main) and the test which verified the behavior was enabled once that fix was merged to main.

========================================================================= short test summary info ==========================================================================
FAILED test_headers_tracestate_dd.py::test_headers_tracestate_dd_propagate_propagatedtags_change_sampling_reset_dm[golang-library_env0] - AssertionError: assert '_dd.p.d...
=========================================================== 1 failed, 116 passed, 39 skipped in 86.75s (0:01:26) ===========================================================
Output of local run with this cherry-pick commit test_128_bit_traceids.py::test_datadog_128_bit_propagation[golang-library_env0] test_128_bit_traceids.py::test_datadog_128_bit_propagation_tid_chars[golang-library_env0] test_128_bit_traceids.py::test_datadog_128_bit_generation_disabled[golang-library_env0] test_128_bit_traceids.py::test_b3multi_128_bit_propagation[golang-library_env0] test_128_bit_traceids.py::test_b3single_128_bit_propagation_and_generation[golang-library_env0] test_128_bit_traceids.py::test_b3multi_128_bit_generation_enabled[golang-library_env0] test_128_bit_traceids.py::test_w3c_128_bit_propagation_tid_inconsistent[golang-library_env0] test_headers_b3.py::test_headers_b3_extract_invalid[golang-library_env0] test_128_bit_traceids.py::test_w3c_128_bit_propagation_tid_malformed_optional_tag[golang-library_env0] test_128_bit_traceids.py::test_w3c_128_bit_generation_enabled[golang-library_env0] [gw7] [ 0%] SKIPPED test_128_bit_traceids.py::test_w3c_128_bit_propagation_tid_malformed_optional_tag[golang-library_env0] test_128_bit_traceids.py::test_w3c_128_bit_propagation_and_generation[golang-library_env0] [gw6] [ 1%] SKIPPED test_128_bit_traceids.py::test_w3c_128_bit_propagation_tid_inconsistent[golang-library_env0] test_128_bit_traceids.py::test_w3c_128_bit_propagation_tid_inconsistent_optional_tag[golang-library_env0] [gw6] [ 1%] SKIPPED test_128_bit_traceids.py::test_w3c_128_bit_propagation_tid_inconsistent_optional_tag[golang-library_env0] [gw4] [ 2%] SKIPPED test_128_bit_traceids.py::test_b3multi_128_bit_propagation[golang-library_env0] test_128_bit_traceids.py::test_b3multi_128_bit_propagation_and_generation[golang-library_env0] test_128_bit_traceids.py::test_w3c_128_bit_propagation_tid_malformed[golang-library_env0] [gw5] [ 3%] SKIPPED test_128_bit_traceids.py::test_b3multi_128_bit_generation_enabled[golang-library_env0] [gw1] [ 3%] SKIPPED test_128_bit_traceids.py::test_datadog_128_bit_propagation_tid_chars[golang-library_env0] test_128_bit_traceids.py::test_w3c_128_bit_propagation[golang-library_env0] test_128_bit_traceids.py::test_datadog_128_bit_propagation_tid_malformed_optional_tag[golang-library_env0] [gw6] [ 4%] SKIPPED test_128_bit_traceids.py::test_w3c_128_bit_propagation_tid_malformed[golang-library_env0] test_headers_b3.py::test_headers_b3_inject_valid[golang-library_env1] [gw1] [ 5%] SKIPPED test_128_bit_traceids.py::test_datadog_128_bit_propagation_tid_malformed_optional_tag[golang-library_env0] test_128_bit_traceids.py::test_datadog_128_bit_propagation_and_generation[golang-library_env0] [gw5] [ 5%] SKIPPED test_128_bit_traceids.py::test_w3c_128_bit_propagation[golang-library_env0] test_128_bit_traceids.py::test_w3c_128_bit_propagation_tid_consistent[golang-library_env0] [gw9] [ 6%] SKIPPED test_128_bit_traceids.py::test_w3c_128_bit_generation_enabled[golang-library_env0] test_headers_b3.py::test_headers_b3_extract_valid[golang-library_env0] [gw6] [ 7%] PASSED test_headers_b3.py::test_headers_b3_inject_valid[golang-library_env1] [gw2] [ 7%] PASSED test_128_bit_traceids.py::test_datadog_128_bit_generation_disabled[golang-library_env0] test_128_bit_traceids.py::test_datadog_128_bit_generation_enabled[golang-library_env0] [gw2] [ 8%] SKIPPED test_128_bit_traceids.py::test_datadog_128_bit_generation_enabled[golang-library_env0] test_128_bit_traceids.py::test_b3single_128_bit_propagation[golang-library_env0] [gw2] [ 8%] SKIPPED test_128_bit_traceids.py::test_b3single_128_bit_propagation[golang-library_env0] test_headers_b3multi.py::test_headers_b3multi_inject_valid[golang-library_env1] test_headers_b3.py::test_headers_b3multi_propagate_valid[golang-library_env0] [gw7] [ 9%] PASSED test_128_bit_traceids.py::test_w3c_128_bit_propagation_and_generation[golang-library_env0] [gw3] [ 10%] PASSED test_128_bit_traceids.py::test_b3single_128_bit_propagation_and_generation[golang-library_env0] [gw0] [ 10%] PASSED test_128_bit_traceids.py::test_datadog_128_bit_propagation[golang-library_env0] [gw4] [ 11%] PASSED test_128_bit_traceids.py::test_b3multi_128_bit_propagation_and_generation[golang-library_env0] [gw5] [ 12%] PASSED test_128_bit_traceids.py::test_w3c_128_bit_propagation_tid_consistent[golang-library_env0] [gw8] [ 12%] PASSED test_headers_b3.py::test_headers_b3_extract_invalid[golang-library_env0] [gw9] [ 13%] PASSED test_headers_b3.py::test_headers_b3_extract_valid[golang-library_env0] [gw1] [ 14%] PASSED test_128_bit_traceids.py::test_datadog_128_bit_propagation_and_generation[golang-library_env0] test_128_bit_traceids.py::test_w3c_128_bit_generation_disabled[golang-library_env0] test_128_bit_traceids.py::test_b3multi_128_bit_generation_disabled[golang-library_env0] test_128_bit_traceids.py::test_datadog_128_bit_propagation_tid_long[golang-library_env0] [gw0] [ 14%] SKIPPED test_128_bit_traceids.py::test_datadog_128_bit_propagation_tid_long[golang-library_env0] test_128_bit_traceids.py::test_datadog_128_bit_propagation_tid_short[golang-library_env0] [gw0] [ 15%] SKIPPED test_128_bit_traceids.py::test_datadog_128_bit_propagation_tid_short[golang-library_env0] test_headers_datadog.py::test_distributed_headers_extract_datadog_invalid_D002[golang] test_128_bit_traceids.py::test_b3single_128_bit_generation_disabled[golang-library_env0] test_headers_b3.py::test_headers_b3_extract_invalid[golang-library_env1] test_headers_b3multi.py::test_headers_b3multi_extract_invalid[golang-library_env1] test_headers_b3.py::test_headers_b3_extract_valid[golang-library_env1] test_headers_b3multi.py::test_headers_b3multi_extract_valid[golang-library_env0] [gw2] [ 16%] PASSED test_headers_b3multi.py::test_headers_b3multi_inject_valid[golang-library_env1] [gw6] [ 16%] PASSED test_headers_b3.py::test_headers_b3multi_propagate_valid[golang-library_env0] test_headers_b3multi.py::test_headers_b3multi_inject_valid[golang-library_env2] test_headers_b3.py::test_headers_b3multi_propagate_valid[golang-library_env1] [gw4] [ 17%] PASSED test_128_bit_traceids.py::test_b3multi_128_bit_generation_disabled[golang-library_env0] [gw7] [ 17%] PASSED test_128_bit_traceids.py::test_w3c_128_bit_generation_disabled[golang-library_env0] test_headers_b3multi.py::test_headers_b3multi_propagate_invalid[golang-library_env1] test_headers_b3multi.py::test_headers_b3multi_propagate_valid[golang-library_env1] [gw0] [ 18%] PASSED test_headers_datadog.py::test_distributed_headers_extract_datadog_invalid_D002[golang] [gw3] [ 19%] PASSED test_128_bit_traceids.py::test_b3single_128_bit_generation_disabled[golang-library_env0] [gw5] [ 19%] PASSED test_headers_b3multi.py::test_headers_b3multi_extract_invalid[golang-library_env1] [gw8] [ 20%] PASSED test_headers_b3.py::test_headers_b3_extract_invalid[golang-library_env1] [gw9] [ 21%] PASSED test_headers_b3.py::test_headers_b3_extract_valid[golang-library_env1] test_headers_datadog.py::test_distributed_headers_inject_datadog_D003[golang] [gw1] [ 21%] PASSED test_headers_b3multi.py::test_headers_b3multi_extract_valid[golang-library_env0] test_128_bit_traceids.py::test_b3single_128_bit_generation_enabled[golang-library_env0] [gw3] [ 22%] SKIPPED test_128_bit_traceids.py::test_b3single_128_bit_generation_enabled[golang-library_env0] test_headers_none.py::test_headers_none_extract_with_other_propagators[golang-library_env1] [gw2] [ 23%] PASSED test_headers_b3multi.py::test_headers_b3multi_inject_valid[golang-library_env2] [gw6] [ 23%] PASSED test_headers_b3.py::test_headers_b3multi_propagate_valid[golang-library_env1] test_headers_b3multi.py::test_headers_b3multi_extract_invalid[golang-library_env2] test_headers_b3.py::test_headers_b3_inject_valid[golang-library_env0] test_headers_none.py::test_headers_none_extract[golang-library_env0] test_headers_b3multi.py::test_headers_b3multi_extract_valid[golang-library_env1] [gw4] [ 24%] PASSED test_headers_b3multi.py::test_headers_b3multi_propagate_invalid[golang-library_env1] test_headers_b3multi.py::test_headers_b3multi_inject_valid[golang-library_env3] test_headers_b3.py::test_headers_b3multi_propagate_invalid[golang-library_env0] [gw7] [ 25%] PASSED test_headers_b3multi.py::test_headers_b3multi_propagate_valid[golang-library_env1] test_headers_b3multi.py::test_headers_b3multi_propagate_invalid[golang-library_env2] test_headers_b3multi.py::test_headers_b3multi_propagate_valid[golang-library_env2] [gw0] [ 25%] PASSED test_headers_datadog.py::test_distributed_headers_inject_datadog_D003[golang] test_headers_datadog.py::test_distributed_headers_propagate_datadog_D004[golang] [gw3] [ 26%] PASSED test_headers_none.py::test_headers_none_extract_with_other_propagators[golang-library_env1] test_headers_none.py::test_headers_none_inject[golang-library_env0] [gw5] [ 26%] PASSED test_headers_b3multi.py::test_headers_b3multi_extract_invalid[golang-library_env2] test_headers_b3multi.py::test_headers_b3multi_extract_invalid[golang-library_env3] [gw8] [ 27%] PASSED test_headers_b3.py::test_headers_b3_inject_valid[golang-library_env0] [gw9] [ 28%] PASSED test_headers_none.py::test_headers_none_extract[golang-library_env0] [gw1] [ 28%] PASSED test_headers_b3multi.py::test_headers_b3multi_extract_valid[golang-library_env1] [gw2] [ 29%] PASSED test_headers_b3multi.py::test_headers_b3multi_inject_valid[golang-library_env3] test_headers_none.py::test_headers_none_inject_with_other_propagators[golang-library_env0] [gw6] [ 30%] PASSED test_headers_b3.py::test_headers_b3multi_propagate_invalid[golang-library_env0] test_headers_none.py::test_headers_none_extract[golang-library_env1] [gw7] [ 30%] PASSED test_headers_b3multi.py::test_headers_b3multi_propagate_valid[golang-library_env2] [gw4] [ 31%] PASSED test_headers_b3multi.py::test_headers_b3multi_propagate_invalid[golang-library_env2] test_headers_b3multi.py::test_headers_b3multi_extract_valid[golang-library_env2] test_headers_b3multi.py::test_headers_b3multi_propagate_valid[golang-library_env0] [gw0] [ 32%] PASSED test_headers_datadog.py::test_distributed_headers_propagate_datadog_D004[golang] test_headers_b3.py::test_headers_b3multi_propagate_invalid[golang-library_env1] test_headers_b3multi.py::test_headers_b3multi_propagate_valid[golang-library_env3] [gw3] [ 32%] PASSED test_headers_none.py::test_headers_none_inject[golang-library_env0] test_headers_b3multi.py::test_headers_b3multi_propagate_invalid[golang-library_env3] [gw5] [ 33%] PASSED test_headers_b3multi.py::test_headers_b3multi_extract_invalid[golang-library_env3] test_headers_datadog.py::test_distributed_headers_extractandinject_datadog_invalid_D005[golang] test_headers_none.py::test_headers_none_inject[golang-library_env1] test_headers_b3multi.py::test_headers_b3multi_inject_valid[golang-library_env0] [gw8] [ 33%] PASSED test_headers_none.py::test_headers_none_inject_with_other_propagators[golang-library_env0] [gw9] [ 34%] PASSED test_headers_none.py::test_headers_none_extract[golang-library_env1] test_headers_none.py::test_headers_none_inject_with_other_propagators[golang-library_env1] [gw1] [ 35%] PASSED test_headers_b3multi.py::test_headers_b3multi_extract_valid[golang-library_env2] test_headers_none.py::test_headers_none_extract_with_other_propagators[golang-library_env0] test_headers_b3multi.py::test_headers_b3multi_extract_valid[golang-library_env3] [gw2] [ 35%] PASSED test_headers_b3multi.py::test_headers_b3multi_propagate_valid[golang-library_env0] [gw6] [ 36%] PASSED test_headers_b3.py::test_headers_b3multi_propagate_invalid[golang-library_env1] [gw7] [ 37%] PASSED test_headers_b3multi.py::test_headers_b3multi_propagate_valid[golang-library_env3] test_headers_none.py::test_headers_none_propagate[golang-library_env1] [gw3] [ 37%] PASSED test_headers_none.py::test_headers_none_inject[golang-library_env1] [gw4] [ 38%] PASSED test_headers_b3multi.py::test_headers_b3multi_propagate_invalid[golang-library_env3] test_headers_precedence.py::test_headers_precedence_propagationstyle_datadog[golang-library_env0] [gw0] [ 39%] PASSED test_headers_datadog.py::test_distributed_headers_extractandinject_datadog_invalid_D005[golang] [gw5] [ 39%] PASSED test_headers_b3multi.py::test_headers_b3multi_inject_valid[golang-library_env0] test_headers_b3multi.py::test_headers_b3multi_propagate_invalid[golang-library_env0] test_headers_tracecontext.py::test_traceparent_header_name_valid_casing[golang-library_env0] test_headers_datadog.py::test_distributed_headers_extract_datadog_D001[golang] [gw8] [ 40%] PASSED test_headers_none.py::test_headers_none_inject_with_other_propagators[golang-library_env1] test_headers_tracecontext.py::test_traceparent_included_tracestate_missing[golang-library_env0] [gw9] [ 41%] PASSED test_headers_none.py::test_headers_none_extract_with_other_propagators[golang-library_env0] test_headers_tracecontext.py::test_traceparent_version_0xcc[golang-library_env0] [gw1] [ 41%] PASSED test_headers_b3multi.py::test_headers_b3multi_extract_valid[golang-library_env3] test_headers_none.py::test_headers_none_propagate[golang-library_env0] test_headers_tracecontext.py::test_traceparent_version_illegal_characters[golang-library_env0] test_headers_b3multi.py::test_headers_b3multi_extract_invalid[golang-library_env0] [gw2] [ 42%] PASSED test_headers_none.py::test_headers_none_propagate[golang-library_env1] test_headers_precedence.py::test_headers_precedence_propagationstyle_default[golang] [gw6] [ 42%] PASSED test_headers_precedence.py::test_headers_precedence_propagationstyle_datadog[golang-library_env0] test_headers_precedence.py::test_headers_precedence_propagationstyle_datadog_tracecontext[golang-library_env0] [gw6] [ 43%] SKIPPED test_headers_precedence.py::test_headers_precedence_propagationstyle_datadog_tracecontext[golang-library_env0] test_headers_tracecontext.py::test_both_traceparent_and_tracestate_missing[golang-library_env0] [gw7] [ 44%] PASSED test_headers_b3multi.py::test_headers_b3multi_propagate_invalid[golang-library_env0] test_headers_tracecontext.py::test_traceparent_version_too_short[golang-library_env0] [gw3] [ 44%] PASSED test_headers_tracecontext.py::test_traceparent_header_name_valid_casing[golang-library_env0] [gw4] [ 45%] PASSED test_headers_datadog.py::test_distributed_headers_extract_datadog_D001[golang] test_headers_tracecontext.py::test_traceparent_version_0x00[golang-library_env0] test_headers_tracecontext.py::test_traceparent_trace_id_illegal_characters[golang-library_env0] [gw0] [ 46%] PASSED test_headers_tracecontext.py::test_traceparent_included_tracestate_missing[golang-library_env0] [gw5] [ 46%] PASSED test_headers_tracecontext.py::test_traceparent_version_0xcc[golang-library_env0] [gw8] [ 47%] PASSED test_headers_none.py::test_headers_none_propagate[golang-library_env0] [gw9] [ 48%] PASSED test_headers_tracecontext.py::test_traceparent_version_illegal_characters[golang-library_env0] test_headers_tracecontext.py::test_traceparent_duplicated[golang-library_env0] [gw0] [ 48%] SKIPPED test_headers_tracecontext.py::test_traceparent_duplicated[golang-library_env0] test_headers_tracecontext.py::test_traceparent_header_name[golang-library_env0] test_headers_tracecontext.py::test_traceparent_version_0xff[golang-library_env0] [gw1] [ 49%] PASSED test_headers_b3multi.py::test_headers_b3multi_extract_invalid[golang-library_env0] test_headers_tracecontext.py::test_traceparent_trace_id_too_short[golang-library_env0] [gw2] [ 50%] PASSED test_headers_precedence.py::test_headers_precedence_propagationstyle_default[golang] test_headers_tracecontext.py::test_traceparent_version_too_long[golang-library_env0] [gw6] [ 50%] PASSED test_headers_tracecontext.py::test_both_traceparent_and_tracestate_missing[golang-library_env0] [gw7] [ 51%] PASSED test_headers_tracecontext.py::test_traceparent_version_too_short[golang-library_env0] test_headers_tracecontext.py::test_traceparent_parent_id_illegal_characters[golang-library_env0] test_headers_precedence.py::test_headers_precedence_propagationstyle_tracecontext[golang-library_env0] test_headers_tracecontext.py::test_traceparent_parent_id_too_short[golang-library_env0] test_headers_tracecontext.py::test_traceparent_trace_id_all_zero[golang-library_env0] [gw3] [ 51%] PASSED test_headers_tracecontext.py::test_traceparent_version_0x00[golang-library_env0] [gw4] [ 52%] PASSED test_headers_tracecontext.py::test_traceparent_trace_id_illegal_characters[golang-library_env0] test_headers_tracecontext.py::test_traceparent_trace_flags_too_long[golang-library_env0] test_headers_tracecontext.py::test_traceparent_trace_id_too_long[golang-library_env0] [gw0] [ 53%] PASSED test_headers_tracecontext.py::test_traceparent_header_name[golang-library_env0] [gw5] [ 53%] PASSED test_headers_tracecontext.py::test_traceparent_version_0xff[golang-library_env0] test_headers_tracecontext.py::test_traceparent_ows_handling[golang-library_env0] [gw8] [ 54%] PASSED test_headers_tracecontext.py::test_traceparent_trace_id_too_short[golang-library_env0] test_headers_tracecontext.py::test_tracestate_included_traceparent_included[golang-library_env0] [gw9] [ 55%] PASSED test_headers_tracecontext.py::test_traceparent_version_too_long[golang-library_env0] test_headers_tracecontext.py::test_traceparent_parent_id_all_zero[golang-library_env0] [gw1] [ 55%] PASSED test_headers_tracecontext.py::test_traceparent_parent_id_illegal_characters[golang-library_env0] test_headers_tracecontext.py::test_tracestate_header_name[golang-library_env0] [gw7] [ 56%] PASSED test_headers_tracecontext.py::test_traceparent_trace_id_all_zero[golang-library_env0] [gw6] [ 57%] PASSED test_headers_tracecontext.py::test_traceparent_parent_id_too_short[golang-library_env0] test_headers_tracecontext.py::test_traceparent_parent_id_too_long[golang-library_env0] [gw2] [ 57%] PASSED test_headers_precedence.py::test_headers_precedence_propagationstyle_tracecontext[golang-library_env0] [gw3] [ 58%] PASSED test_headers_tracecontext.py::test_traceparent_trace_flags_too_long[golang-library_env0] [gw4] [ 58%] PASSED test_headers_tracecontext.py::test_traceparent_trace_id_too_long[golang-library_env0] test_headers_tracecontext.py::test_tracestate_empty_header[golang-library_env0] [gw7] [ 59%] SKIPPED test_headers_tracecontext.py::test_tracestate_empty_header[golang-library_env0] test_headers_tracestate_dd.py::test_headers_tracestate_dd_propagate_origin[golang-library_env0] test_headers_tracecontext.py::test_traceparent_trace_flags_illegal_characters[golang-library_env0] test_headers_tracecontext.py::test_tracestate_header_name_valid_casing[golang-library_env0] test_headers_tracecontext.py::test_tracestate_multiple_headers_different_keys[golang-library_env0] [gw4] [ 60%] SKIPPED test_headers_tracecontext.py::test_tracestate_multiple_headers_different_keys[golang-library_env0] test_library_tracestats.py::test_metrics_msgpack_serialization_TS001[golang-library_env0] [gw4] [ 60%] SKIPPED test_library_tracestats.py::test_metrics_msgpack_serialization_TS001[golang-library_env0] test_library_tracestats.py::test_distinct_aggregationkeys_TS003[golang-library_env0] [gw0] [ 61%] PASSED test_headers_tracecontext.py::test_traceparent_ows_handling[golang-library_env0] test_headers_tracecontext.py::test_traceparent_trace_flags_too_short[golang-library_env0] [gw5] [ 62%] PASSED test_headers_tracecontext.py::test_tracestate_included_traceparent_included[golang-library_env0] test_headers_tracecontext.py::test_tracestate_included_traceparent_missing[golang-library_env0] [gw8] [ 62%] PASSED test_headers_tracecontext.py::test_traceparent_parent_id_all_zero[golang-library_env0] test_headers_tracecontext.py::test_tracestate_duplicated_keys[golang-library_env0] test_headers_tracecontext.py::test_tracestate_all_allowed_characters[golang-library_env0] [gw1] [ 63%] PASSED test_headers_tracecontext.py::test_traceparent_parent_id_too_long[golang-library_env0] [gw9] [ 64%] PASSED test_headers_tracecontext.py::test_tracestate_header_name[golang-library_env0] test_headers_tracestate_dd.py::test_headers_tracestate_dd_propagate_samplingpriority[golang-library_env0] test_headers_tracecontext.py::test_tracestate_ows_handling[golang-library_env0] [gw7] [ 64%] PASSED test_headers_tracestate_dd.py::test_headers_tracestate_dd_propagate_origin[golang-library_env0] test_headers_tracestate_dd.py::test_headers_tracestate_dd_propagate_propagatedtags[golang-library_env0] [gw7] [ 65%] SKIPPED test_headers_tracestate_dd.py::test_headers_tracestate_dd_propagate_propagatedtags[golang-library_env0] test_otel_span_methods.py::test_otel_start_span[golang] [gw7] [ 66%] SKIPPED test_otel_span_methods.py::test_otel_start_span[golang] test_otel_span_methods.py::test_otel_set_service_name[golang] [gw2] [ 66%] PASSED test_headers_tracecontext.py::test_tracestate_header_name_valid_casing[golang-library_env0] [gw6] [ 67%] PASSED test_headers_tracecontext.py::test_traceparent_trace_flags_illegal_characters[golang-library_env0] [gw4] [ 67%] PASSED test_library_tracestats.py::test_distinct_aggregationkeys_TS003[golang-library_env0] [gw3] [ 68%] PASSED test_headers_tracecontext.py::test_traceparent_trace_flags_too_short[golang-library_env0] test_headers_tracestate_dd.py::test_headers_tracestate_dd_propagate_propagatedtags_change_sampling_reset_dm[golang-library_env0] test_headers_tracestate_dd.py::test_headers_tracestate_dd_propagate_propagatedtags_change_sampling_same_dm[golang-library_env0] [gw0] [ 69%] PASSED test_headers_tracecontext.py::test_tracestate_included_traceparent_missing[golang-library_env0] test_library_tracestats.py::test_measured_spans_TS004[golang-library_env0] [gw5] [ 69%] PASSED test_headers_tracecontext.py::test_tracestate_duplicated_keys[golang-library_env0] [gw8] [ 70%] PASSED test_headers_tracecontext.py::test_tracestate_all_allowed_characters[golang-library_env0] test_library_tracestats.py::test_top_level_TS005[golang-library_env0] test_library_tracestats.py::test_successes_errors_recorded_separately_TS006[golang-library_env0] [gw1] [ 71%] PASSED test_headers_tracestate_dd.py::test_headers_tracestate_dd_propagate_samplingpriority[golang-library_env0] [gw9] [ 71%] PASSED test_headers_tracecontext.py::test_tracestate_ows_handling[golang-library_env0] test_library_tracestats.py::test_sample_rate_0_TS007[golang-library_env0] [gw7] [ 72%] PASSED test_otel_span_methods.py::test_otel_set_service_name[golang] test_library_tracestats.py::test_relative_error_TS008[golang-library_env0] [gw8] [ 73%] SKIPPED test_library_tracestats.py::test_relative_error_TS008[golang-library_env0] test_otel_span_with_w3c.py::test_otel_start_span_with_w3c[golang] [gw8] [ 73%] SKIPPED test_otel_span_with_w3c.py::test_otel_start_span_with_w3c[golang] test_otel_span_with_w3c.py::test_otel_span_with_w3c_headers[golang] [gw8] [ 74%] SKIPPED test_otel_span_with_w3c.py::test_otel_span_with_w3c_headers[golang] test_otel_tracer.py::test_otel_simple_trace[golang] [gw8] [ 75%] SKIPPED test_otel_tracer.py::test_otel_simple_trace[golang] test_otel_tracer.py::test_force_flush_otel[golang] [gw8] [ 75%] SKIPPED test_otel_tracer.py::test_force_flush_otel[golang] test_partial_flushing.py::test_partial_flushing_one_span[golang-library_env0] [gw8] [ 76%] SKIPPED test_partial_flushing.py::test_partial_flushing_one_span[golang-library_env0] test_partial_flushing.py::test_partial_flushing_under_limit_one_payload[golang-library_env0] [gw8] [ 76%] SKIPPED test_partial_flushing.py::test_partial_flushing_under_limit_one_payload[golang-library_env0] test_span_sampling.py::test_single_rule_match_span_sampling_sss001[golang-library_env0] test_library_tracestats.py::test_metrics_computed_after_span_finsh_TS008[golang-library_env0] test_library_tracestats.py::test_metrics_computed_after_span_finish_TS010[golang-library_env0] test_otel_span_methods.py::test_otel_set_attributes_different_types[golang] [gw7] [ 77%] SKIPPED test_otel_span_methods.py::test_otel_set_attributes_different_types[golang] test_span_sampling.py::test_single_rule_only_name_pattern_no_match_span_sampling_sss005[golang-library_env0] [gw2] [ 78%] FAILED test_headers_tracestate_dd.py::test_headers_tracestate_dd_propagate_propagatedtags_change_sampling_reset_dm[golang-library_env0] test_otel_span_methods.py::test_otel_span_is_recording[golang] [gw2] [ 78%] SKIPPED test_otel_span_methods.py::test_otel_span_is_recording[golang] test_span_sampling.py::test_multi_rule_drop_keep_span_sampling_sss007[golang-library_env0] [gw6] [ 79%] PASSED test_headers_tracestate_dd.py::test_headers_tracestate_dd_propagate_propagatedtags_change_sampling_same_dm[golang-library_env0] test_otel_span_methods.py::test_otel_span_finished_end_options[golang] [gw6] [ 80%] SKIPPED test_otel_span_methods.py::test_otel_span_finished_end_options[golang] test_span_sampling.py::test_sampling_rate_not_absolute_value_sss009[golang-library_env0] [gw4] [ 80%] PASSED test_library_tracestats.py::test_measured_spans_TS004[golang-library_env0] test_otel_span_methods.py::test_otel_span_end[golang] [gw4] [ 81%] SKIPPED test_otel_span_methods.py::test_otel_span_end[golang] test_span_sampling.py::test_single_rule_always_keep_span_sampling_sss011[golang-library_env0] [gw4] [ 82%] SKIPPED test_span_sampling.py::test_single_rule_always_keep_span_sampling_sss011[golang-library_env0] test_span_sampling.py::test_single_rule_tracer_always_keep_span_sampling_sss012[golang-library_env0] [gw3] [ 82%] PASSED test_library_tracestats.py::test_top_level_TS005[golang-library_env0] test_otel_span_methods.py::test_otel_set_span_status_error[golang] [gw3] [ 83%] SKIPPED test_otel_span_methods.py::test_otel_set_span_status_error[golang] test_span_sampling.py::test_root_span_selected_by_sss014[golang-library_env0] [gw0] [ 83%] PASSED test_library_tracestats.py::test_successes_errors_recorded_separately_TS006[golang-library_env0] test_otel_span_methods.py::test_otel_set_span_status_ok[golang] [gw0] [ 84%] SKIPPED test_otel_span_methods.py::test_otel_set_span_status_ok[golang] test_span_sampling.py::test_root_span_selected_and_child_dropped_by_sss_when_dropping_policy_is_active016[golang-library_env0] [gw8] [ 85%] PASSED test_span_sampling.py::test_single_rule_match_span_sampling_sss001[golang-library_env0] [gw9] [ 85%] PASSED test_library_tracestats.py::test_metrics_computed_after_span_finish_TS010[golang-library_env0] [gw5] [ 86%] PASSED test_library_tracestats.py::test_sample_rate_0_TS007[golang-library_env0] [gw1] [ 87%] PASSED test_library_tracestats.py::test_metrics_computed_after_span_finsh_TS008[golang-library_env0] [gw7] [ 87%] PASSED test_span_sampling.py::test_single_rule_only_name_pattern_no_match_span_sampling_sss005[golang-library_env0] test_span_sampling.py::test_special_glob_characters_span_sampling_sss002[golang-library_env0] [gw2] [ 88%] PASSED test_span_sampling.py::test_multi_rule_drop_keep_span_sampling_sss007[golang-library_env0] test_span_sampling.py::test_single_rule_only_service_pattern_match_span_sampling_sss004[golang-library_env0] test_otel_span_methods.py::test_otel_get_span_context[golang] [gw5] [ 89%] SKIPPED test_otel_span_methods.py::test_otel_get_span_context[golang] test_tracer.py::test_tracer_service_name_environment_variable[golang-library_env0] [gw5] [ 89%] SKIPPED test_tracer.py::test_tracer_service_name_environment_variable[golang-library_env0] test_tracer.py::test_tracer_env_environment_variable[golang-library_env0] test_span_sampling.py::test_single_rule_no_match_span_sampling_sss003[golang-library_env0] test_span_sampling.py::test_multi_rule_keep_drop_span_sampling_sss006[golang-library_env0] test_span_sampling.py::test_single_rule_rate_limiter_span_sampling_sss008[golang-library_env0] [gw6] [ 90%] PASSED test_span_sampling.py::test_sampling_rate_not_absolute_value_sss009[golang-library_env0] [gw4] [ 91%] PASSED test_span_sampling.py::test_single_rule_tracer_always_keep_span_sampling_sss012[golang-library_env0] [gw3] [ 91%] PASSED test_span_sampling.py::test_root_span_selected_by_sss014[golang-library_env0] [gw0] [ 92%] PASSED test_span_sampling.py::test_root_span_selected_and_child_dropped_by_sss_when_dropping_policy_is_active016[golang-library_env0] test_span_sampling.py::test_keep_span_with_stats_computation_sss010[golang-library_env0] [gw6] [ 92%] SKIPPED test_span_sampling.py::test_keep_span_with_stats_computation_sss010[golang-library_env0] test_span_sampling.py::test_multi_rule_independent_rate_limiters_sss013[golang-library_env0] test_span_sampling.py::test_child_span_selected_by_sss015[golang-library_env0] test_span_sampling.py::test_child_span_selected_and_root_dropped_by_sss_when_dropping_policy_is_active017[golang-library_env0] [gw8] [ 93%] PASSED test_span_sampling.py::test_special_glob_characters_span_sampling_sss002[golang-library_env0] [gw9] [ 94%] PASSED test_span_sampling.py::test_single_rule_only_service_pattern_match_span_sampling_sss004[golang-library_env0] test_span_sampling.py::test_entire_trace_dropped_when_dropping_policy_is_active018[golang-library_env0] test_tracer.py::test_tracer_span_top_level_attributes[golang] [gw5] [ 94%] PASSED test_tracer.py::test_tracer_env_environment_variable[golang-library_env0] [gw1] [ 95%] PASSED test_span_sampling.py::test_single_rule_no_match_span_sampling_sss003[golang-library_env0] [gw7] [ 96%] PASSED test_span_sampling.py::test_multi_rule_keep_drop_span_sampling_sss006[golang-library_env0] [gw3] [ 96%] PASSED test_span_sampling.py::test_child_span_selected_by_sss015[golang-library_env0] [gw0] [ 97%] PASSED test_span_sampling.py::test_child_span_selected_and_root_dropped_by_sss_when_dropping_policy_is_active017[golang-library_env0] [gw8] [ 98%] PASSED test_span_sampling.py::test_entire_trace_dropped_when_dropping_policy_is_active018[golang-library_env0] [gw2] [ 98%] PASSED test_span_sampling.py::test_single_rule_rate_limiter_span_sampling_sss008[golang-library_env0] [gw9] [ 99%] PASSED test_tracer.py::test_tracer_span_top_level_attributes[golang] [gw4] [100%] PASSED test_span_sampling.py::test_multi_rule_independent_rate_limiters_sss013[golang-library_env0]

================================================================================= FAILURES =================================================================================
____________________________________ test_headers_tracestate_dd_propagate_propagatedtags_change_sampling_reset_dm[golang-library_env0] _____________________________________
[gw2] darwin -- Python 3.9.9 /Users/katie.hockman/go/src/github.com/DataDog/system-tests/parametric/venv/bin/python

test_agent = <parametric.conftest._TestAgentAPI object at 0x10cda51c0>, test_library = <parametric._library_client.APMLibrary object at 0x10cd98e20>

@temporary_enable_propagationstyle_default()
@pytest.mark.skip_library("nodejs", "Issue: Does not reset dm to DEFAULT")
@pytest.mark.skip_library("php", "Issue: Does not drop dm")
@pytest.mark.skip_library("python", "Issue: Does not reset dm to DEFAULT")
@pytest.mark.skip_library("python_http", "Issue: Does not reset dm to DEFAULT")
@pytest.mark.skip_library("ruby", "Issue: Does not reset dm to DEFAULT")
def test_headers_tracestate_dd_propagate_propagatedtags_change_sampling_reset_dm(test_agent, test_library):
    """
    harness sends a request with both tracestate and traceparent
    expects a valid traceparent from the output header with the same trace_id
    expects the tracestate to be inherited
    expects the decision maker to be reset to DEFAULT
    """
    with test_library:
        # 1) tracestate[dd] is populated with well-known propagated tags
        headers1 = make_single_request_and_get_inject_headers(
            test_library,
            [
                ["traceparent", "00-12345678901234567890123456789012-1234567890123456-01"],
                ["tracestate", "foo=1,dd=s:-1;t.dm:-4;t.usr.id:baz64~~"],
            ],
        )

        # 2) tracestate[dd][o] is populated with both well-known tags and unrecognized propagated tags
        headers2 = make_single_request_and_get_inject_headers(
            test_library,
            [
                ["traceparent", "00-12345678901234567890123456789012-1234567890123456-00"],
                ["tracestate", "foo=1,dd=s:2;t.dm:-4;t.usr.id:baz64~~;t.url:http://localhost"],
            ],
        )

    # 1) tracestate[dd] is populated with well-known propagated tags
    # Result: Tags are placed into the tracestate where "_dd.p." is replaced with "t."
    #         and "=" is replaced with ":"
    #         and dm=-4 is reset to dm=-0
    assert headers1["x-datadog-sampling-priority"] == "1"
    dd_tags1 = headers1["x-datadog-tags"].split(",")
  assert "_dd.p.dm=-0" in dd_tags1

E AssertionError: assert '_dd.p.dm=-0' in ['_dd.p.dm=-4', '_dd.p.usr.id=baz64==', '_dd.p.tid=1234567890123456']

test_headers_tracestate_dd.py:540: AssertionError

@katiehockman katiehockman merged commit 59ce8e2 into release-v1.50.x May 1, 2023
@katiehockman katiehockman deleted the hotfix-v1.50.1 branch May 1, 2023 18:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants