From 3becb40d148b4ec16c346eec6378d3e6b9886671 Mon Sep 17 00:00:00 2001 From: Edmund Kump Date: Tue, 21 Nov 2023 17:32:33 -0500 Subject: [PATCH] set 128-bit trace_id to true by default (#3266) * set 128-bit trace_id to true by default * update contrib tests for 128-bit default trace_ids * update opentracer to work with 128-bit trace_ids * clenaup tests for 128-bit default enabling --- docs/GettingStarted.md | 2 +- lib/datadog/opentracer/text_map_propagator.rb | 3 +- lib/datadog/tracing/configuration/settings.rb | 4 +- lib/datadog/tracing/distributed/datadog.rb | 1 - spec/datadog/opentelemetry_spec.rb | 23 ++-- .../propagation_integration_spec.rb | 13 ++- .../opentracer/rack_propagator_spec.rb | 6 +- .../tracing/configuration/settings_spec.rb | 8 +- .../tracing/contrib/ethon/shared_examples.rb | 2 +- .../contrib/excon/instrumentation_spec.rb | 2 +- .../contrib/faraday/middleware_spec.rb | 2 +- .../tracing/contrib/http/request_spec.rb | 4 +- .../httpclient/instrumentation_spec.rb | 2 +- .../contrib/httprb/instrumentation_spec.rb | 4 +- .../contrib/rails/rails_active_job_spec.rb | 2 +- .../rails/rails_log_auto_injection_spec.rb | 106 +++++++++--------- ...ils_semantic_logger_auto_injection_spec.rb | 9 +- .../contrib/rest_client/request_patch_spec.rb | 2 +- .../sidekiq/distributed_tracing_spec.rb | 4 +- .../tracing/distributed/datadog_spec.rb | 18 ++- spec/datadog/tracing/tracer_spec.rb | 4 +- .../tracing/transport/trace_formatter_spec.rb | 2 +- spec/support/tracer_helpers.rb | 11 ++ 23 files changed, 130 insertions(+), 104 deletions(-) diff --git a/docs/GettingStarted.md b/docs/GettingStarted.md index 34e8960de38..884e09e770c 100644 --- a/docs/GettingStarted.md +++ b/docs/GettingStarted.md @@ -2079,7 +2079,7 @@ For example, if `tracing.sampling.default_rate` is configured by [Remote Configu | `tracing.sampling.rate_limit` | `DD_TRACE_RATE_LIMIT` | `100` (per second) | Sets a maximum number of traces per second to sample. Set a rate limit to avoid the ingestion volume overages in the case of traffic spikes. | | `tracing.sampling.rules` | `DD_TRACE_SAMPLING_RULES` | `nil` | Sets trace-level sampling rules, matching against the local root span. The format is a `String` with JSON, containing an Array of Objects. Each Object must have a float attribute `sample_rate` (between 0.0 and 1.0, inclusive), and optionally `name` and `service` string attributes. `name` and `service` control to which traces this sampling rule applies; if both are absent, then this rule applies to all traces. Rules are evaluted in order of declartion in the array; only the first to match is applied. If none apply, then `tracing.sampling.default_rate` is applied. | | `tracing.sampling.span_rules` | `DD_SPAN_SAMPLING_RULES`,`ENV_SPAN_SAMPLING_RULES_FILE` | `nil` | Sets [Single Span Sampling](#single-span-sampling) rules. These rules allow you to keep spans even when their respective traces are dropped. | -| `tracing.trace_id_128_bit_generation_enabled` | `DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED` | `false` | `true` to generate 128 bits trace ID and `false` to generate 64 bits trace ID | +| `tracing.trace_id_128_bit_generation_enabled` | `DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED` | `true` | `true` to generate 128 bits trace ID and `false` to generate 64 bits trace ID | | `tracing.report_hostname` | `DD_TRACE_REPORT_HOSTNAME` | `false` | Adds hostname tag to traces. | | `tracing.test_mode.enabled` | `DD_TRACE_TEST_MODE_ENABLED` | `false` | Enables or disables test mode, for use of tracing in test suites. | | `tracing.test_mode.trace_flush` | | `nil` | Object that determines trace flushing behavior. | diff --git a/lib/datadog/opentracer/text_map_propagator.rb b/lib/datadog/opentracer/text_map_propagator.rb index 817404ce819..bc0cfeb5bb7 100644 --- a/lib/datadog/opentracer/text_map_propagator.rb +++ b/lib/datadog/opentracer/text_map_propagator.rb @@ -33,7 +33,8 @@ def inject(span_context, carrier) carrier[Tracing::Distributed::Datadog::ORIGIN_KEY] = digest.trace_origin carrier[Tracing::Distributed::Datadog::PARENT_ID_KEY] = digest.span_id carrier[Tracing::Distributed::Datadog::SAMPLING_PRIORITY_KEY] = digest.trace_sampling_priority - carrier[Tracing::Distributed::Datadog::TRACE_ID_KEY] = digest.trace_id + carrier[Tracing::Distributed::Datadog::TRACE_ID_KEY] = + Datadog::Tracing::Utils::TraceId.to_low_order(digest.trace_id) nil end diff --git a/lib/datadog/tracing/configuration/settings.rb b/lib/datadog/tracing/configuration/settings.rb index 4ee180b9328..cfd9accb6f6 100644 --- a/lib/datadog/tracing/configuration/settings.rb +++ b/lib/datadog/tracing/configuration/settings.rb @@ -192,11 +192,11 @@ def self.extended(base) # Enable 128 bit trace id generation. # - # @default `DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED` environment variable, otherwise `false` + # @default `DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED` environment variable, otherwise `true` # @return [Boolean] option :trace_id_128_bit_generation_enabled do |o| o.env Tracing::Configuration::Ext::ENV_TRACE_ID_128_BIT_GENERATION_ENABLED - o.default false + o.default true o.type :bool end diff --git a/lib/datadog/tracing/distributed/datadog.rb b/lib/datadog/tracing/distributed/datadog.rb index ff7ce4f437f..5f16113d2a7 100644 --- a/lib/datadog/tracing/distributed/datadog.rb +++ b/lib/datadog/tracing/distributed/datadog.rb @@ -49,7 +49,6 @@ def inject!(digest, data) build_tags(digest).tap do |tags| inject_tags!(tags, data) unless tags.empty? end - data end diff --git a/spec/datadog/opentelemetry_spec.rb b/spec/datadog/opentelemetry_spec.rb index f2167b01655..d4600e50120 100644 --- a/spec/datadog/opentelemetry_spec.rb +++ b/spec/datadog/opentelemetry_spec.rb @@ -442,18 +442,22 @@ describe '#inject' do subject(:inject) { ::OpenTelemetry.propagation.inject(carrier) } let(:carrier) { {} } + def headers + { + 'x-datadog-parent-id' => Datadog::Tracing.active_span.id.to_s, + 'x-datadog-sampling-priority' => '1', + 'x-datadog-tags' => '_dd.p.dm=-0,_dd.p.tid=' + + high_order_hex_trace_id(Datadog::Tracing.active_trace.id), + 'x-datadog-trace-id' => low_order_trace_id(Datadog::Tracing.active_trace.id).to_s, + } + end context 'with an active span' do before { otel_tracer.start_span('existing-active-span') } it 'injects Datadog headers' do inject - expect(carrier).to eq( - 'x-datadog-parent-id' => Datadog::Tracing.active_span.id.to_s, - 'x-datadog-sampling-priority' => '1', - 'x-datadog-tags' => '_dd.p.dm=-0', - 'x-datadog-trace-id' => Datadog::Tracing.active_trace.id.to_s, - ) + expect(carrier).to eq(headers) end end @@ -462,12 +466,7 @@ it 'injects Datadog headers' do inject - expect(carrier).to eq( - 'x-datadog-parent-id' => Datadog::Tracing.active_span.id.to_s, - 'x-datadog-sampling-priority' => '1', - 'x-datadog-tags' => '_dd.p.dm=-0', - 'x-datadog-trace-id' => Datadog::Tracing.active_trace.id.to_s, - ) + expect(carrier).to eq(headers) end end end diff --git a/spec/datadog/opentracer/propagation_integration_spec.rb b/spec/datadog/opentracer/propagation_integration_spec.rb index df0afc890d7..5bc5184e3e6 100644 --- a/spec/datadog/opentracer/propagation_integration_spec.rb +++ b/spec/datadog/opentracer/propagation_integration_spec.rb @@ -169,7 +169,12 @@ def baggage_to_carrier_format(baggage) it { expect(intermediate_datadog_trace.sampling_priority).to eq(1) } it { expect(intermediate_datadog_trace.origin).to eq('synthetics') } it { expect(intermediate_datadog_span.finished?).to be(true) } - it { expect(intermediate_datadog_span.trace_id).to eq(origin_datadog_span.trace_id) } + + it { + expect(intermediate_datadog_span.trace_id) + .to eq(low_order_trace_id(origin_datadog_span.trace_id)) + } + it { expect(intermediate_datadog_span.parent_id).to eq(origin_datadog_span.span_id) } it { expect(@intermediate_scope.span.context.baggage).to include(baggage) } @@ -182,7 +187,7 @@ def baggage_to_carrier_format(baggage) it do expect(@origin_carrier).to include( - 'x-datadog-trace-id' => origin_datadog_span.trace_id, + 'x-datadog-trace-id' => low_order_trace_id(origin_datadog_span.trace_id), 'x-datadog-parent-id' => origin_datadog_span.span_id, 'x-datadog-sampling-priority' => 1, 'x-datadog-origin' => 'synthetics', @@ -378,7 +383,7 @@ def baggage_to_carrier_format(baggage) it do expect(@origin_carrier).to include( - 'x-datadog-trace-id' => origin_datadog_span.trace_id.to_s, + 'x-datadog-trace-id' => low_order_trace_id(origin_datadog_span.trace_id).to_s, 'x-datadog-parent-id' => origin_datadog_span.span_id.to_s, 'x-datadog-sampling-priority' => '1', 'x-datadog-origin' => 'synthetics', @@ -388,7 +393,7 @@ def baggage_to_carrier_format(baggage) it do expect(@intermediate_carrier).to include( - 'x-datadog-trace-id' => intermediate_datadog_span.trace_id.to_s, + 'x-datadog-trace-id' => low_order_trace_id(intermediate_datadog_span.trace_id).to_s, 'x-datadog-parent-id' => intermediate_datadog_span.span_id.to_s, 'x-datadog-sampling-priority' => '1', 'x-datadog-origin' => 'synthetics', diff --git a/spec/datadog/opentracer/rack_propagator_spec.rb b/spec/datadog/opentracer/rack_propagator_spec.rb index 41df9ac8a6e..d2a9af36ae3 100644 --- a/spec/datadog/opentracer/rack_propagator_spec.rb +++ b/spec/datadog/opentracer/rack_propagator_spec.rb @@ -29,7 +29,7 @@ # Expect carrier to be set with Datadog trace properties expect(carrier).to receive(:[]=) - .with('x-datadog-trace-id', trace_id.to_s) + .with('x-datadog-trace-id', low_order_trace_id(trace_id).to_s) expect(carrier).to receive(:[]=) .with('x-datadog-parent-id', span_id.to_s) expect(carrier).to receive(:[]=) @@ -37,7 +37,9 @@ expect(carrier).to receive(:[]=) .with('x-datadog-origin', origin.to_s) expect(carrier).to receive(:[]=) - .with('x-datadog-tags', '_dd.p.key=value,_dd.p.dm=-1') + .with('x-datadog-tags', + '_dd.p.key=value,_dd.p.dm=-1,_dd.p.tid=' + + high_order_hex_trace_id(trace_id)) # Expect carrier to be set with OpenTracing baggage baggage.each do |key, value| diff --git a/spec/datadog/tracing/configuration/settings_spec.rb b/spec/datadog/tracing/configuration/settings_spec.rb index f3dd1ebc5ef..94675c2867d 100644 --- a/spec/datadog/tracing/configuration/settings_spec.rb +++ b/spec/datadog/tracing/configuration/settings_spec.rb @@ -826,7 +826,7 @@ def propagation_inject_style context 'is not defined' do let(:env_var) { nil } - it { is_expected.to eq(false) } + it { is_expected.to eq(true) } end context 'is `true`' do @@ -846,10 +846,10 @@ def propagation_inject_style describe '#trace_id_128_bit_generation_enabled=' do it 'updates the #trace_id_128_bit_generation_enabled setting' do expect do - settings.tracing.trace_id_128_bit_generation_enabled = true + settings.tracing.trace_id_128_bit_generation_enabled = false end.to change { settings.tracing.trace_id_128_bit_generation_enabled } - .from(false) - .to(true) + .from(true) + .to(false) end end diff --git a/spec/datadog/tracing/contrib/ethon/shared_examples.rb b/spec/datadog/tracing/contrib/ethon/shared_examples.rb index 24dfb0cc3ab..3b1af89c56c 100644 --- a/spec/datadog/tracing/contrib/ethon/shared_examples.rb +++ b/spec/datadog/tracing/contrib/ethon/shared_examples.rb @@ -161,7 +161,7 @@ headers = JSON.parse(response.body)['headers'] distributed_tracing_headers = { 'x-datadog-parent-id' => [span.span_id.to_s], - 'x-datadog-trace-id' => [span.trace_id.to_s] + 'x-datadog-trace-id' => [low_order_trace_id(span.trace_id).to_s] } expect(headers).to include(distributed_tracing_headers) diff --git a/spec/datadog/tracing/contrib/excon/instrumentation_spec.rb b/spec/datadog/tracing/contrib/excon/instrumentation_spec.rb index d8042f03798..20fe38d1ebf 100644 --- a/spec/datadog/tracing/contrib/excon/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/excon/instrumentation_spec.rb @@ -266,7 +266,7 @@ span = datum[:datadog_span] headers = datum[:headers] expect(headers).to include( - 'x-datadog-trace-id' => span.trace_id.to_s, + 'x-datadog-trace-id' => low_order_trace_id(span.trace_id).to_s, 'x-datadog-parent-id' => span.span_id.to_s ) diff --git a/spec/datadog/tracing/contrib/faraday/middleware_spec.rb b/spec/datadog/tracing/contrib/faraday/middleware_spec.rb index 19066138244..067dd1f1ee3 100644 --- a/spec/datadog/tracing/contrib/faraday/middleware_spec.rb +++ b/spec/datadog/tracing/contrib/faraday/middleware_spec.rb @@ -362,7 +362,7 @@ it do expect(headers).to include( - 'x-datadog-trace-id' => span.trace_id.to_s, + 'x-datadog-trace-id' => low_order_trace_id(span.trace_id).to_s, 'x-datadog-parent-id' => span.span_id.to_s ) end diff --git a/spec/datadog/tracing/contrib/http/request_spec.rb b/spec/datadog/tracing/contrib/http/request_spec.rb index 03e0fb006a1..5c86d7683d4 100644 --- a/spec/datadog/tracing/contrib/http/request_spec.rb +++ b/spec/datadog/tracing/contrib/http/request_spec.rb @@ -377,7 +377,7 @@ def expect_request_without_distributed_headers let(:distributed_tracing_headers) do { 'x-datadog-parent-id' => span.span_id, - 'x-datadog-trace-id' => span.trace_id, + 'x-datadog-trace-id' => low_order_trace_id(span.trace_id), 'x-datadog-sampling-priority' => sampling_priority } end @@ -423,7 +423,7 @@ def expect_request_without_distributed_headers let(:distributed_tracing_headers) do { 'x-datadog-parent-id' => span.span_id, - 'x-datadog-trace-id' => span.trace_id, + 'x-datadog-trace-id' => low_order_trace_id(span.trace_id), 'x-datadog-sampling-priority' => sampling_priority } end diff --git a/spec/datadog/tracing/contrib/httpclient/instrumentation_spec.rb b/spec/datadog/tracing/contrib/httpclient/instrumentation_spec.rb index 3690b47f1b4..f14a03e7f80 100644 --- a/spec/datadog/tracing/contrib/httpclient/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/httpclient/instrumentation_spec.rb @@ -231,7 +231,7 @@ end it 'propogrates the trace id header' do - expect(http_response.headers['X-Datadog-Trace-Id']).to eq(span.trace_id.to_s) + expect(http_response.headers['X-Datadog-Trace-Id']).to eq(low_order_trace_id(span.trace_id).to_s) end end diff --git a/spec/datadog/tracing/contrib/httprb/instrumentation_spec.rb b/spec/datadog/tracing/contrib/httprb/instrumentation_spec.rb index 6424046e0ba..24247345568 100644 --- a/spec/datadog/tracing/contrib/httprb/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/httprb/instrumentation_spec.rb @@ -233,8 +233,8 @@ expect(http_response.headers['x-datadog-parent-id']).to eq(span.span_id.to_s) end - it 'propogrates the trace id header' do - expect(http_response.headers['x-datadog-trace-id']).to eq(span.trace_id.to_s) + it 'propagates the trace id header' do + expect(http_response.headers['x-datadog-trace-id']).to eq(low_order_trace_id(span.trace_id).to_s) end end diff --git a/spec/datadog/tracing/contrib/rails/rails_active_job_spec.rb b/spec/datadog/tracing/contrib/rails/rails_active_job_spec.rb index 2d2a93c8989..2ec462e0a3b 100644 --- a/spec/datadog/tracing/contrib/rails/rails_active_job_spec.rb +++ b/spec/datadog/tracing/contrib/rails/rails_active_job_spec.rb @@ -210,7 +210,7 @@ def perform(test_retry: false, test_discard: false) it 'injects trace correlation' do perform_later expect(output).to include('my-log') - expect(output).to include(span.trace_id.to_s) + expect(output).to include(low_order_trace_id(span.trace_id).to_s) end end diff --git a/spec/datadog/tracing/contrib/rails/rails_log_auto_injection_spec.rb b/spec/datadog/tracing/contrib/rails/rails_log_auto_injection_spec.rb index 29c9d9aa7b3..a71cb0e1e0a 100644 --- a/spec/datadog/tracing/contrib/rails/rails_log_auto_injection_spec.rb +++ b/spec/datadog/tracing/contrib/rails/rails_log_auto_injection_spec.rb @@ -89,9 +89,9 @@ def index expect(log_entries).to have(2).items rack_rails_logger_entry, my_entry = log_entries - expect(rack_rails_logger_entry).not_to include trace.id.to_s + expect(rack_rails_logger_entry).not_to include low_order_trace_id(trace.id).to_s - expect(my_entry).not_to include trace.id.to_s + expect(my_entry).not_to include low_order_trace_id(trace.id).to_s end end @@ -109,9 +109,9 @@ def index expect(log_entries).to have(2).items rack_rails_logger_entry, my_entry = log_entries - expect(rack_rails_logger_entry).to include "dd.trace_id=#{trace.id}" + expect(rack_rails_logger_entry).to include "dd.trace_id=#{low_order_trace_id(trace.id)}" - expect(my_entry).to include trace.id.to_s + expect(my_entry).to include low_order_trace_id(trace.id).to_s end end @@ -128,11 +128,11 @@ def index expect(log_entries).to have(2).items rack_rails_logger_entry, my_entry = log_entries - expect(rack_rails_logger_entry).to include "dd.trace_id=#{trace.id}" + expect(rack_rails_logger_entry).to include "dd.trace_id=#{low_order_trace_id(trace.id)}" expect(rack_rails_logger_entry).to include '[some_info]' expect(rack_rails_logger_entry).to include '[some_other_info]' - expect(my_entry).to include trace.id.to_s + expect(my_entry).to include low_order_trace_id(trace.id).to_s expect(my_entry).to include '[some_info]' expect(my_entry).to include '[some_other_info]' end @@ -158,12 +158,12 @@ def index rack_rails_logger_entry, my_entry, controller_logger_entry = log_entries - expect(rack_rails_logger_entry).not_to include trace.id.to_s + expect(rack_rails_logger_entry).not_to include low_order_trace_id(trace.id).to_s - expect(controller_logger_entry).to include trace.id.to_s + expect(controller_logger_entry).to include low_order_trace_id(low_order_trace_id(trace.id)).to_s expect(controller_logger_entry).to include 'ddsource=ruby' - expect(my_entry).not_to include trace.id.to_s + expect(my_entry).not_to include low_order_trace_id(trace.id).to_s end end @@ -185,14 +185,14 @@ def index rack_rails_logger_entry, my_entry, controller_logger_entry = log_entries - expect(rack_rails_logger_entry).not_to include trace.id.to_s + expect(rack_rails_logger_entry).not_to include low_order_trace_id(trace.id).to_s - expect(controller_logger_entry).to include trace.id.to_s + expect(controller_logger_entry).to include low_order_trace_id(trace.id).to_s expect(controller_logger_entry).to include 'ddsource=ruby' expect(controller_logger_entry).to include 'some_hash_info=test_hash_value' expect(controller_logger_entry).to include 'some_other_hash_info=other_test_hash_value' - expect(my_entry).not_to include trace.id.to_s + expect(my_entry).not_to include low_order_trace_id(trace.id).to_s end end @@ -216,14 +216,14 @@ def index rack_rails_logger_entry, my_entry, controller_logger_entry = log_entries - expect(rack_rails_logger_entry).not_to include trace.id.to_s + expect(rack_rails_logger_entry).not_to include low_order_trace_id(low_order_trace_id(trace.id)).to_s - expect(controller_logger_entry).to include trace.id.to_s + expect(controller_logger_entry).to include low_order_trace_id(trace.id).to_s expect(controller_logger_entry).to include 'ddsource=ruby' expect(controller_logger_entry).to include 'some_lambda_info=test_lambda_value' expect(controller_logger_entry).to include 'some_other_lambda_info=other_test_lambda_value' - expect(my_entry).not_to include trace.id.to_s + expect(my_entry).not_to include low_order_trace_id(trace.id).to_s end end end @@ -241,11 +241,11 @@ def index rack_rails_logger_entry, my_entry, controller_logger_entry = log_entries - expect(rack_rails_logger_entry).not_to include trace.id.to_s + expect(rack_rails_logger_entry).not_to include low_order_trace_id(trace.id).to_s - expect(my_entry).not_to include trace.id.to_s + expect(my_entry).not_to include low_order_trace_id(trace.id).to_s - expect(controller_logger_entry).not_to include trace.id.to_s + expect(controller_logger_entry).not_to include low_order_trace_id(trace.id).to_s end end end @@ -272,11 +272,11 @@ def index rack_rails_logger_entry, my_entry, controller_logger_entry = log_entries - expect(rack_rails_logger_entry).to include "dd.trace_id=#{trace.id}" + expect(rack_rails_logger_entry).to include "dd.trace_id=#{low_order_trace_id(trace.id)}" - expect(my_entry).to include "dd.trace_id=#{trace.id}" + expect(my_entry).to include "dd.trace_id=#{low_order_trace_id(trace.id)}" - expect(controller_logger_entry.scan(trace.id.to_s)).to have(2).times + expect(controller_logger_entry.scan(low_order_trace_id(trace.id).to_s)).to have(2).times expect(controller_logger_entry).to include 'ddsource=ruby' end end @@ -292,15 +292,15 @@ def index rack_rails_logger_entry, my_entry, controller_logger_entry = log_entries - expect(rack_rails_logger_entry).to include "dd.trace_id=#{trace.id}" + expect(rack_rails_logger_entry).to include "dd.trace_id=#{low_order_trace_id(trace.id)}" expect(rack_rails_logger_entry).to include '[some_info]' expect(rack_rails_logger_entry).to include '[some_other_info]' - expect(my_entry).to include "dd.trace_id=#{trace.id}" + expect(my_entry).to include "dd.trace_id=#{low_order_trace_id(trace.id)}" expect(my_entry).to include '[some_info]' expect(my_entry).to include '[some_other_info]' - expect(controller_logger_entry.scan(trace.id.to_s)).to have(2).times + expect(controller_logger_entry.scan(low_order_trace_id(trace.id).to_s)).to have(2).times expect(controller_logger_entry).to include 'ddsource=ruby' expect(controller_logger_entry).to include '[some_info]' expect(controller_logger_entry).to include '[some_other_info]' @@ -325,11 +325,11 @@ def index rack_rails_logger_entry, my_entry, controller_logger_entry = log_entries - expect(rack_rails_logger_entry).to include "dd.trace_id=#{trace.id}" + expect(rack_rails_logger_entry).to include "dd.trace_id=#{low_order_trace_id(trace.id)}" - expect(my_entry).to include "dd.trace_id=#{trace.id}" + expect(my_entry).to include "dd.trace_id=#{low_order_trace_id(trace.id)}" - expect(controller_logger_entry.scan(trace.id.to_s)).to have(2).times + expect(controller_logger_entry.scan(low_order_trace_id(trace.id).to_s)).to have(2).times expect(controller_logger_entry).to include 'ddsource=ruby' expect(controller_logger_entry).to include 'some_hash_info=test_hash_value' expect(controller_logger_entry).to include 'some_other_hash_info=other_test_hash_value' @@ -356,11 +356,11 @@ def index rack_rails_logger_entry, my_entry, controller_logger_entry = log_entries - expect(rack_rails_logger_entry).to include "dd.trace_id=#{trace.id}" + expect(rack_rails_logger_entry).to include "dd.trace_id=#{low_order_trace_id(trace.id)}" - expect(my_entry).to include "dd.trace_id=#{trace.id}" + expect(my_entry).to include "dd.trace_id=#{low_order_trace_id(trace.id)}" - expect(controller_logger_entry.scan(trace.id.to_s)).to have(2).times + expect(controller_logger_entry.scan(low_order_trace_id(trace.id).to_s)).to have(2).times expect(controller_logger_entry).to include 'ddsource=ruby' expect(controller_logger_entry).to include 'some_lambda_info=test_lambda_value' expect(controller_logger_entry).to include 'some_other_lambda_info=other_test_lambda_value' @@ -387,15 +387,15 @@ def index rack_rails_logger_entry, my_entry, controller_logger_entry = log_entries - expect(rack_rails_logger_entry).to include "dd.trace_id=#{trace.id}" + expect(rack_rails_logger_entry).to include "dd.trace_id=#{low_order_trace_id(trace.id)}" expect(rack_rails_logger_entry).to include '[some_info]' expect(rack_rails_logger_entry).to include '[some_other_info]' - expect(my_entry).to include "dd.trace_id=#{trace.id}" + expect(my_entry).to include "dd.trace_id=#{low_order_trace_id(trace.id)}" expect(my_entry).to include '[some_info]' expect(my_entry).to include '[some_other_info]' - expect(controller_logger_entry.scan(trace.id.to_s)).to have(2).times + expect(controller_logger_entry.scan(low_order_trace_id(trace.id).to_s)).to have(2).times expect(controller_logger_entry).to include '[some_info]' expect(controller_logger_entry).to include '[some_other_info]' expect(controller_logger_entry).to include 'ddsource=ruby' @@ -420,9 +420,9 @@ def index expect(log_entries).to have(2).item rack_rails_logger_entry, my_entry = log_entries - expect(rack_rails_logger_entry).not_to include trace.id.to_s + expect(rack_rails_logger_entry).not_to include low_order_trace_id(trace.id).to_s - expect(my_entry).not_to include trace.id.to_s + expect(my_entry).not_to include low_order_trace_id(trace.id).to_s end end @@ -440,9 +440,9 @@ def index rack_rails_logger_entry, my_entry = log_entries - expect(rack_rails_logger_entry).not_to include trace.id.to_s + expect(rack_rails_logger_entry).not_to include low_order_trace_id(trace.id).to_s - expect(my_entry).not_to include trace.id.to_s + expect(my_entry).not_to include low_order_trace_id(trace.id).to_s end end @@ -457,11 +457,11 @@ def index rack_rails_logger_entry, my_entry = log_entries - expect(rack_rails_logger_entry).not_to include trace.id.to_s + expect(rack_rails_logger_entry).not_to include low_order_trace_id(trace.id).to_s expect(rack_rails_logger_entry).to include '[some_info]' expect(rack_rails_logger_entry).to include '[some_other_info]' - expect(my_entry).not_to include trace.id.to_s + expect(my_entry).not_to include low_order_trace_id(trace.id).to_s expect(my_entry).to include '[some_info]' expect(my_entry).to include '[some_other_info]' end @@ -481,8 +481,8 @@ def index expect(log_entries).to have(2).items rack_rails_logger_entry, my_entry = log_entries - expect(rack_rails_logger_entry).to include "dd.trace_id=#{trace.id}" - expect(my_entry).to include "dd.trace_id=#{trace.id}" + expect(rack_rails_logger_entry).to include "dd.trace_id=#{low_order_trace_id(low_order_trace_id(trace.id))}" + expect(my_entry).to include "dd.trace_id=#{low_order_trace_id(low_order_trace_id(trace.id))}" end end end @@ -507,11 +507,11 @@ def index rack_rails_logger_entry, my_entry, controller_logger_entry = log_entries - expect(rack_rails_logger_entry).not_to include trace.id.to_s + expect(rack_rails_logger_entry).not_to include low_order_trace_id(trace.id).to_s - expect(my_entry).not_to include trace.id.to_s + expect(my_entry).not_to include low_order_trace_id(trace.id).to_s - expect(controller_logger_entry).not_to include trace.id.to_s + expect(controller_logger_entry).not_to include low_order_trace_id(trace.id).to_s end end @@ -533,11 +533,11 @@ def index rack_rails_logger_entry, my_entry, controller_logger_entry = log_entries - expect(rack_rails_logger_entry).not_to include trace.id.to_s + expect(rack_rails_logger_entry).not_to include low_order_trace_id(trace.id).to_s - expect(my_entry).not_to include trace.id.to_s + expect(my_entry).not_to include low_order_trace_id(trace.id).to_s - expect(controller_logger_entry).not_to include trace.id.to_s + expect(controller_logger_entry).not_to include low_order_trace_id(trace.id).to_s expect(controller_logger_entry).to include 'some_hash_info=test_hash_value' expect(controller_logger_entry).to include 'some_other_hash_info=other_test_hash_value' end @@ -563,11 +563,11 @@ def index rack_rails_logger_entry, my_entry, controller_logger_entry = log_entries - expect(rack_rails_logger_entry).not_to include trace.id.to_s + expect(rack_rails_logger_entry).not_to include low_order_trace_id(trace.id).to_s - expect(my_entry).not_to include trace.id.to_s + expect(my_entry).not_to include low_order_trace_id(trace.id).to_s - expect(controller_logger_entry).not_to include trace.id.to_s + expect(controller_logger_entry).not_to include low_order_trace_id(trace.id).to_s expect(controller_logger_entry).to include 'some_lambda_info=test_lambda_value' expect(controller_logger_entry).to include 'some_other_lambda_info=other_test_lambda_value' end @@ -587,11 +587,11 @@ def index rack_rails_logger_entry, my_entry, controller_logger_entry = log_entries - expect(rack_rails_logger_entry).not_to include trace.id.to_s + expect(rack_rails_logger_entry).not_to include low_order_trace_id(trace.id).to_s - expect(my_entry).not_to include trace.id.to_s + expect(my_entry).not_to include low_order_trace_id(trace.id).to_s - expect(controller_logger_entry).not_to include trace.id.to_s + expect(controller_logger_entry).not_to include low_order_trace_id(trace.id).to_s end end end diff --git a/spec/datadog/tracing/contrib/rails/rails_semantic_logger_auto_injection_spec.rb b/spec/datadog/tracing/contrib/rails/rails_semantic_logger_auto_injection_spec.rb index 95e3b02fbdc..26636716afc 100644 --- a/spec/datadog/tracing/contrib/rails/rails_semantic_logger_auto_injection_spec.rb +++ b/spec/datadog/tracing/contrib/rails/rails_semantic_logger_auto_injection_spec.rb @@ -88,8 +88,7 @@ def index if defined?(RailsSemanticLogger::ActionView::LogSubscriber) || Rails.version >= '5' expect(log_entries).to have(6).items - - expect(log_entries).to all include trace.id.to_s + expect(log_entries).to all include low_order_trace_id(trace.id).to_s expect(log_entries).to all include 'ddsource: ruby' rack_started_entry, @@ -120,7 +119,7 @@ def index else expect(log_entries).to have(5).items - expect(log_entries).to all include trace.id.to_s + expect(log_entries).to all include low_order_trace_id(trace.id).to_s expect(log_entries).to all include 'ddsource: ruby' end end @@ -139,7 +138,7 @@ def index if defined?(RailsSemanticLogger::ActionView::LogSubscriber) || Rails.version >= '5' expect(log_entries).to have(6).items - expect(log_entries).to all include(trace.id.to_s) + expect(log_entries).to all include(low_order_trace_id(trace.id).to_s) expect(log_entries).to all include('ddsource: ruby') expect(log_entries).to all include('some_tag') expect(log_entries).to all include('some_value') @@ -172,7 +171,7 @@ def index else expect(log_entries).to have(5).items - expect(log_entries).to all include(trace.id.to_s) + expect(log_entries).to all include(low_order_trace_id(trace.id).to_s) expect(log_entries).to all include('ddsource: ruby') expect(log_entries).to all include('some_tag') expect(log_entries).to all include('some_value') diff --git a/spec/datadog/tracing/contrib/rest_client/request_patch_spec.rb b/spec/datadog/tracing/contrib/rest_client/request_patch_spec.rb index e8ebbbd959f..47e6a59e3a8 100644 --- a/spec/datadog/tracing/contrib/rest_client/request_patch_spec.rb +++ b/spec/datadog/tracing/contrib/rest_client/request_patch_spec.rb @@ -300,7 +300,7 @@ request distributed_tracing_headers = { 'X-Datadog-Parent-Id' => span.span_id.to_s, - 'X-Datadog-Trace-Id' => span.trace_id.to_s } + 'X-Datadog-Trace-Id' => low_order_trace_id(span.trace_id).to_s } expect(a_request(:get, url).with(headers: distributed_tracing_headers)).to have_been_made end diff --git a/spec/datadog/tracing/contrib/sidekiq/distributed_tracing_spec.rb b/spec/datadog/tracing/contrib/sidekiq/distributed_tracing_spec.rb index f14d167ee34..a56d8c3fa6a 100644 --- a/spec/datadog/tracing/contrib/sidekiq/distributed_tracing_spec.rb +++ b/spec/datadog/tracing/contrib/sidekiq/distributed_tracing_spec.rb @@ -57,10 +57,10 @@ def perform; end expect(span.get_tag('operation')).to eq('push') expect(span.get_tag('span.kind')).to eq('producer') - expect(job['x-datadog-trace-id']).to eq(span.trace_id.to_s) + expect(job['x-datadog-trace-id']).to eq(low_order_trace_id(span.trace_id).to_s) expect(job['x-datadog-parent-id']).to eq(span.id.to_s) expect(job['x-datadog-sampling-priority']).to eq('1') - expect(job['x-datadog-tags']).to eq('_dd.p.dm=-0') + expect(job['x-datadog-tags']).to eq("_dd.p.dm=-0,_dd.p.tid=#{high_order_hex_trace_id(span.trace_id)}") expect(job).not_to include 'x-datadog-origin' end end diff --git a/spec/datadog/tracing/distributed/datadog_spec.rb b/spec/datadog/tracing/distributed/datadog_spec.rb index dfd0c0c429d..080fdaa9c83 100644 --- a/spec/datadog/tracing/distributed/datadog_spec.rb +++ b/spec/datadog/tracing/distributed/datadog_spec.rb @@ -103,6 +103,10 @@ end context 'nil' do + before do + Datadog.configure { |c| c.tracing.trace_id_128_bit_generation_enabled = false } + end + let(:tags) { nil } it do inject! @@ -111,6 +115,10 @@ end context '{}' do + before do + Datadog.configure { |c| c.tracing.trace_id_128_bit_generation_enabled = false } + end + let(:tags) { {} } it do inject! @@ -122,7 +130,7 @@ let(:tags) { { key: 'value' } } it do inject! - expect(data).to include('x-datadog-tags' => 'key=value') + expect(data['x-datadog-tags']).to include('key=value') end end @@ -130,7 +138,7 @@ let(:tags) { { '_dd.p.dm' => '-1' } } it do inject! - expect(data).to include('x-datadog-tags' => '_dd.p.dm=-1') + expect(data['x-datadog-tags']).to include('_dd.p.dm=-1') end end @@ -175,8 +183,10 @@ end context 'and no tags' do + before do + Datadog.configure { |c| c.tracing.trace_id_128_bit_generation_enabled = false } + end let(:tags) { {} } - it 'does not set error for empty tags' do expect(active_trace).to_not receive(:set_tag) inject! @@ -185,7 +195,7 @@ end context 'with invalid tags' do - let(:tags) { 'not_a_tag_hash' } + let(:tags) { { 'key with=spaces' => 'value' } } it 'sets error tag' do expect(active_trace).to receive(:set_tag).with('_dd.propagation_error', 'encoding_error') diff --git a/spec/datadog/tracing/tracer_spec.rb b/spec/datadog/tracing/tracer_spec.rb index 96f0dd9f759..ab5cbe8bc42 100644 --- a/spec/datadog/tracing/tracer_spec.rb +++ b/spec/datadog/tracing/tracer_spec.rb @@ -736,10 +736,10 @@ example.run end end - it 'produces an Identifier with data' do is_expected.to be_a_kind_of(Datadog::Tracing::Correlation::Identifier) - expect(active_correlation.trace_id).to eq(span.trace_id) + expect(active_correlation.trace_id) + .to eq(low_order_trace_id(span.trace_id)) expect(active_correlation.span_id).to eq(span.span_id) end end diff --git a/spec/datadog/tracing/transport/trace_formatter_spec.rb b/spec/datadog/tracing/transport/trace_formatter_spec.rb index a33cfdc0398..2a560d73d05 100644 --- a/spec/datadog/tracing/transport/trace_formatter_spec.rb +++ b/spec/datadog/tracing/transport/trace_formatter_spec.rb @@ -175,7 +175,7 @@ { 'foo' => 'bar', '_dd.p.dm' => '-1', - '_dd.p.tid' => 'aaaaaaaaaaaaaaaa' + '_dd.p.tid' => high_order_hex_trace_id(trace_id), } ) end diff --git a/spec/support/tracer_helpers.rb b/spec/support/tracer_helpers.rb index a28f1826ee6..9e60d961cad 100644 --- a/spec/support/tracer_helpers.rb +++ b/spec/support/tracer_helpers.rb @@ -112,4 +112,15 @@ def tracer_shutdown! without_warnings { Datadog.send(:reset!) } end + + # Wraps call to Tracing::Utils::TraceId.to_low_order for better test readability + def low_order_trace_id(trace_id) + Datadog::Tracing::Utils::TraceId.to_low_order(trace_id) + end + + # Wraps call to Tracing::Utils::TraceId.to_high_order and converts to hex + # for better test readability + def high_order_hex_trace_id(trace_id) + Datadog::Tracing::Utils::TraceId.to_high_order(trace_id).to_s(16) + end end