Skip to content

Commit 6b55c3e

Browse files
authored
Use a sidecar connection per PHP thread (#3770)
* Use a sidecar connection per PHP thread While the sidecar has been a process global for the longest time, it's also unfair with respect to limits and not compatible with the newly introduced outbox. Having a connection per thread ensures that every thread can have up to 100 queued items. It also reduces contention on the SidecarTransport, which was indeed adding quite a bit of latency due to threads accumulating in futex_wait for very short requests under moderate load. Moving the background sender stats to its own thread in preparation of dropping the Mutex on the SidecarTransport fully. Signed-off-by: Bob Weinand <bob.weinand@datadoghq.com> * Fix windows Signed-off-by: Bob Weinand <bob.weinand@datadoghq.com> --------- Signed-off-by: Bob Weinand <bob.weinand@datadoghq.com>
1 parent 217c346 commit 6b55c3e

16 files changed

Lines changed: 283 additions & 216 deletions

components-rs/ddtrace.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ extern ddog_VecRemoteConfigCapabilities DDTRACE_REMOTE_CONFIG_CAPABILITIES;
1919

2020
extern const uint8_t *DDOG_PHP_FUNCTION;
2121

22-
extern struct ddog_SidecarTransport *ddtrace_sidecar;
23-
2422
/**
2523
* # Safety
2624
* Must be called from a single-threaded context, such as MINIT.

components-rs/sidecar.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,6 @@ pub extern "C" fn ddog_sidecar_connect_php(
170170
MaybeError::None
171171
}
172172

173-
#[no_mangle]
174-
#[allow(non_upper_case_globals)]
175-
pub static mut ddtrace_sidecar: *mut SidecarTransport = std::ptr::null_mut();
176-
177173
#[no_mangle]
178174
pub extern "C" fn ddtrace_sidecar_reconnect(
179175
transport: &mut Box<SidecarTransport>,

ext/auto_flush.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ ZEND_RESULT_CODE ddtrace_flush_tracer(bool force_on_startup, bool collect_cycles
4747
char *url = ddtrace_agent_url();
4848

4949
if (get_global_DD_TRACE_SIDECAR_TRACE_SENDER()) {
50-
if (ddtrace_sidecar) {
50+
if (DDTRACE_G(sidecar)) {
5151
ddog_SenderParameters parameters = {
5252
.tracer_headers_tags = {
5353
.container_id = ddtrace_get_container_id(),
@@ -59,7 +59,7 @@ ZEND_RESULT_CODE ddtrace_flush_tracer(bool force_on_startup, bool collect_cycles
5959
.client_computed_top_level = get_DD_TRACE_STATS_COMPUTATION_ENABLED(),
6060
.client_computed_stats = !get_global_DD_APM_TRACING_ENABLED() || get_DD_TRACE_STATS_COMPUTATION_ENABLED(),
6161
},
62-
.transport = ddtrace_sidecar,
62+
.transport = DDTRACE_G(sidecar),
6363
.instance_id = ddtrace_sidecar_instance_id,
6464
.limit = limit,
6565
.n_requests = get_global_DD_TRACE_AGENT_FLUSH_AFTER_N_REQUESTS(),

ext/coms.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -771,10 +771,10 @@ static struct curl_slist *dd_agent_headers_alloc(void) {
771771
dd_append_header(&list, "Datadog-Meta-Lang-Interpreter", sapi_module.name, strlen(sapi_module.name));
772772
dd_append_header(&list, "Datadog-Meta-Lang-Version", php_version_rt.ptr, php_version_rt.len);
773773
dd_append_header(&list, "Datadog-Meta-Tracer-Version", ZEND_STRL(PHP_DDTRACE_VERSION));
774-
if (!get_global_DD_APM_TRACING_ENABLED() || (ddtrace_sidecar && get_global_DD_TRACE_STATS_COMPUTATION_ENABLED())) {
774+
if (!get_global_DD_APM_TRACING_ENABLED() || (ddtrace_sidecar_for_signal && get_global_DD_TRACE_STATS_COMPUTATION_ENABLED())) {
775775
dd_append_header(&list, "Datadog-Client-Computed-Stats", ZEND_STRL("true"));
776776
}
777-
if (ddtrace_sidecar && get_global_DD_TRACE_STATS_COMPUTATION_ENABLED()) {
777+
if (ddtrace_sidecar_for_signal && get_global_DD_TRACE_STATS_COMPUTATION_ENABLED()) {
778778
dd_append_header(&list, "Datadog-Client-Computed-Top-Level", ZEND_STRL("true"));
779779
}
780780

ext/ddtrace.c

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -409,21 +409,21 @@ static inline void dd_alter_prop(size_t prop_offset, zval *old_value, zval *new_
409409
bool ddtrace_alter_dd_service(zval *old_value, zval *new_value, zend_string *new_str) {
410410
dd_alter_prop(XtOffsetOf(ddtrace_span_properties, property_service), old_value, new_value, new_str);
411411
if (DDTRACE_G(request_initialized)) {
412-
ddtrace_sidecar_submit_root_span_data_direct(&ddtrace_sidecar, NULL, new_str, get_DD_ENV(), get_DD_VERSION());
412+
ddtrace_sidecar_submit_root_span_data_direct(&DDTRACE_G(sidecar), NULL, new_str, get_DD_ENV(), get_DD_VERSION());
413413
}
414414
return true;
415415
}
416416
bool ddtrace_alter_dd_env(zval *old_value, zval *new_value, zend_string *new_str) {
417417
dd_alter_prop(XtOffsetOf(ddtrace_span_properties, property_env), old_value, new_value, new_str);
418418
if (DDTRACE_G(request_initialized)) {
419-
ddtrace_sidecar_submit_root_span_data_direct(&ddtrace_sidecar, NULL, get_DD_SERVICE(), new_str, get_DD_VERSION());
419+
ddtrace_sidecar_submit_root_span_data_direct(&DDTRACE_G(sidecar), NULL, get_DD_SERVICE(), new_str, get_DD_VERSION());
420420
}
421421
return true;
422422
}
423423
bool ddtrace_alter_dd_version(zval *old_value, zval *new_value, zend_string *new_str) {
424424
dd_alter_prop(XtOffsetOf(ddtrace_span_properties, property_version), old_value, new_value, new_str);
425425
if (DDTRACE_G(request_initialized)) {
426-
ddtrace_sidecar_submit_root_span_data_direct(&ddtrace_sidecar, NULL, get_DD_SERVICE(), get_DD_ENV(), new_str);
426+
ddtrace_sidecar_submit_root_span_data_direct(&DDTRACE_G(sidecar), NULL, get_DD_SERVICE(), get_DD_ENV(), new_str);
427427
}
428428
return true;
429429
}
@@ -697,6 +697,9 @@ static PHP_GSHUTDOWN_FUNCTION(ddtrace) {
697697

698698
zend_hash_destroy(&ddtrace_globals->git_metadata);
699699

700+
// Drop the per-thread sidecar transport (thread-lifetime, one per thread).
701+
ddtrace_sidecar_gshutdown();
702+
700703
tsrm_mutex_free(ddtrace_globals->sidecar_universal_service_tags_mutex);
701704

702705
#ifdef CXA_THREAD_ATEXIT_WRAPPER
@@ -1594,8 +1597,8 @@ static PHP_MSHUTDOWN_FUNCTION(ddtrace) {
15941597
ddtrace_coms_mshutdown_proxy_env();
15951598
} else /* ! part of the if outside the ifdef */
15961599
#endif
1597-
if (get_global_DD_TRACE_FORCE_FLUSH_ON_SHUTDOWN() && ddtrace_sidecar) {
1598-
ddog_sidecar_flush_traces(&ddtrace_sidecar);
1600+
if (get_global_DD_TRACE_FORCE_FLUSH_ON_SHUTDOWN() && DDTRACE_G(sidecar)) {
1601+
ddog_sidecar_flush_traces(&DDTRACE_G(sidecar));
15991602
}
16001603

16011604
ddtrace_log_mshutdown();
@@ -2809,7 +2812,7 @@ PHP_FUNCTION(DDTrace_dogstatsd_set) {
28092812
PHP_FUNCTION(DDTrace_are_endpoints_collected) {
28102813
UNUSED(execute_data);
28112814

2812-
if (!ddtrace_sidecar || !ddtrace_sidecar_instance_id || !DDTRACE_G(sidecar_queue_id)) {
2815+
if (!DDTRACE_G(sidecar) || !ddtrace_sidecar_instance_id || !DDTRACE_G(sidecar_queue_id)) {
28132816
RETURN_TRUE; // Skip overhead if unnecessary
28142817
}
28152818

@@ -2865,7 +2868,7 @@ PHP_FUNCTION(DDTrace_add_endpoint) {
28652868
RETURN_FALSE;
28662869
}
28672870

2868-
if (!ddtrace_sidecar || !ddtrace_sidecar_instance_id || !DDTRACE_G(sidecar_queue_id)) {
2871+
if (!DDTRACE_G(sidecar) || !ddtrace_sidecar_instance_id || !DDTRACE_G(sidecar_queue_id)) {
28692872
RETURN_FALSE;
28702873
}
28712874

@@ -2890,7 +2893,7 @@ PHP_FUNCTION(DDTrace_flush_endpoints) {
28902893
UNUSED(execute_data);
28912894
UNUSED(return_value);
28922895

2893-
if (!ddtrace_sidecar || !ddtrace_sidecar_instance_id || !DDTRACE_G(sidecar_queue_id) || !DDTRACE_G(telemetry_buffer)) {
2896+
if (!DDTRACE_G(sidecar) || !ddtrace_sidecar_instance_id || !DDTRACE_G(sidecar_queue_id) || !DDTRACE_G(telemetry_buffer)) {
28942897
return;
28952898
}
28962899

@@ -2902,7 +2905,7 @@ PHP_FUNCTION(DDTrace_flush_endpoints) {
29022905
ddog_CharSlice env_name = dd_zend_string_to_CharSlice(DDTRACE_G(last_env_name));
29032906

29042907
ddtrace_ffi_try("Failed flushing endpoint telemetry buffer",
2905-
ddog_sidecar_telemetry_filter_flush(&ddtrace_sidecar, ddtrace_sidecar_instance_id, &DDTRACE_G(sidecar_queue_id), ddtrace_telemetry_buffer(), ddtrace_telemetry_cache(), service_name, env_name));
2908+
ddog_sidecar_telemetry_filter_flush(&DDTRACE_G(sidecar), ddtrace_sidecar_instance_id, &DDTRACE_G(sidecar_queue_id), ddtrace_telemetry_buffer(), ddtrace_telemetry_cache(), service_name, env_name));
29062909
}
29072910

29082911
PHP_FUNCTION(dd_trace_send_traces_via_thread) {
@@ -3004,7 +3007,7 @@ PHP_FUNCTION(dd_trace_internal_fn) {
30043007
}
30053008
} else if (params_count == 1 && FUNCTION_NAME_MATCHES("detect_composer_installed_json")) {
30063009
ddog_CharSlice path = dd_zend_string_to_CharSlice(Z_STR_P(ZVAL_VARARG_PARAM(params, 0)));
3007-
ddtrace_detect_composer_installed_json(&ddtrace_sidecar, ddtrace_sidecar_instance_id, &DDTRACE_G(sidecar_queue_id), path);
3010+
ddtrace_detect_composer_installed_json(&DDTRACE_G(sidecar), ddtrace_sidecar_instance_id, &DDTRACE_G(sidecar_queue_id), path);
30083011
RETVAL_TRUE;
30093012
} else if (params_count == 2 && FUNCTION_NAME_MATCHES("mark_integration_loaded")) {
30103013
zval *name = ZVAL_VARARG_PARAM(params, 0);
@@ -3032,24 +3035,24 @@ PHP_FUNCTION(dd_trace_internal_fn) {
30323035
RETVAL_TRUE;
30333036
}
30343037
} else if (FUNCTION_NAME_MATCHES("dump_sidecar")) {
3035-
if (!ddtrace_sidecar) {
3038+
if (!DDTRACE_G(sidecar)) {
30363039
RETURN_FALSE;
30373040
}
3038-
ddog_CharSlice slice = ddog_sidecar_dump(&ddtrace_sidecar);
3041+
ddog_CharSlice slice = ddog_sidecar_dump(&DDTRACE_G(sidecar));
30393042
RETVAL_STRINGL(slice.ptr, slice.len);
30403043
free((void *) slice.ptr);
30413044
} else if (FUNCTION_NAME_MATCHES("stats_sidecar")) {
3042-
if (!ddtrace_sidecar) {
3045+
if (!DDTRACE_G(sidecar)) {
30433046
RETURN_FALSE;
30443047
}
3045-
ddog_CharSlice slice = ddog_sidecar_stats(&ddtrace_sidecar);
3048+
ddog_CharSlice slice = ddog_sidecar_stats(&DDTRACE_G(sidecar));
30463049
RETVAL_STRINGL(slice.ptr, slice.len);
30473050
free((void *) slice.ptr);
30483051
} else if (FUNCTION_NAME_MATCHES("break_sidecar_connection")) {
3049-
if (!ddtrace_sidecar) {
3052+
if (!DDTRACE_G(sidecar)) {
30503053
RETURN_FALSE;
30513054
}
3052-
ddog_sidecar_send_garbage(&ddtrace_sidecar);
3055+
ddog_sidecar_send_garbage(&DDTRACE_G(sidecar));
30533056
ddtrace_generate_runtime_id();
30543057
ddtrace_force_new_instance_id();
30553058
RETURN_TRUE;
@@ -3079,8 +3082,8 @@ PHP_FUNCTION(dd_trace_internal_fn) {
30793082
}
30803083
} else
30813084
#endif
3082-
if (ddtrace_sidecar) {
3083-
ddtrace_ffi_try("Failed synchronously flushing traces", ddog_sidecar_flush_traces(&ddtrace_sidecar));
3085+
if (DDTRACE_G(sidecar)) {
3086+
ddtrace_ffi_try("Failed synchronously flushing traces", ddog_sidecar_flush_traces(&DDTRACE_G(sidecar)));
30843087
}
30853088
RETVAL_TRUE;
30863089
#ifndef _WIN32
@@ -3214,8 +3217,8 @@ PHP_FUNCTION(dd_trace_synchronous_flush) {
32143217
}
32153218
} else
32163219
#endif
3217-
if (ddtrace_sidecar) {
3218-
ddtrace_ffi_try("Failed synchronously flushing traces", ddog_sidecar_flush_traces(&ddtrace_sidecar));
3220+
if (DDTRACE_G(sidecar)) {
3221+
ddtrace_ffi_try("Failed synchronously flushing traces", ddog_sidecar_flush_traces(&DDTRACE_G(sidecar)));
32193222
}
32203223
RETURN_NULL();
32213224
}

ext/ddtrace.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ ZEND_BEGIN_MODULE_GLOBALS(ddtrace)
149149
zend_reference *curl_multi_injecting_spans;
150150

151151
char *cgroup_file;
152+
ddog_SidecarTransport *sidecar;
152153
ddog_QueueId sidecar_queue_id;
153154
MUTEX_T sidecar_universal_service_tags_mutex;
154155
ddog_AgentRemoteConfigReader *agent_config_reader;
@@ -166,6 +167,7 @@ ZEND_BEGIN_MODULE_GLOBALS(ddtrace)
166167
bool request_initialized;
167168
HashTable telemetry_spans_created_per_integration;
168169
ddog_SidecarActionsBuffer *telemetry_buffer;
170+
ddog_SidecarActionsBuffer *metrics_buffer;
169171

170172
bool asm_event_emitted;
171173

ext/exception_serialize.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ static void ddtrace_collect_exception_debug_data(zend_object *exception, zend_ob
384384
ddog_add_str_span_meta_str(span, "error.debug_info_captured", "true");
385385
ddog_add_str_span_meta_CharSlice(span, "_dd.debug.error.exception_hash", (ddog_CharSlice){.ptr = exception_hash, .len = hash_len});
386386

387-
if (!ddog_exception_hash_limiter_inc(ddtrace_sidecar, (uint64_t)exception_long_hash, get_DD_EXCEPTION_REPLAY_CAPTURE_INTERVAL_SECONDS())) {
387+
if (!ddog_exception_hash_limiter_inc(DDTRACE_G(sidecar), (uint64_t)exception_long_hash, get_DD_EXCEPTION_REPLAY_CAPTURE_INTERVAL_SECONDS())) {
388388
LOG(TRACE, "Skipping exception replay capture due to hash %.*s already recently hit", hash_len, exception_hash);
389389
goto cleanup;
390390
}

ext/live_debugger.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ static void dd_probe_resolved(void *data, bool found) {
154154
def->probe.status_msg = DDOG_CHARSLICE_C("Method does not exist on the given class");
155155
def->probe.status_exception = DDOG_CHARSLICE_C("METHOD_NOT_FOUND");
156156
}
157-
ddog_send_debugger_diagnostics(DDTRACE_G(remote_config_state), &ddtrace_sidecar, ddtrace_sidecar_instance_id, DDTRACE_G(sidecar_queue_id), &def->probe, ddtrace_nanoseconds_realtime() / 1000000);
157+
ddog_send_debugger_diagnostics(DDTRACE_G(remote_config_state), &DDTRACE_G(sidecar), ddtrace_sidecar_instance_id, DDTRACE_G(sidecar_queue_id), &def->probe, ddtrace_nanoseconds_realtime() / 1000000);
158158
}
159159

160160
static int64_t dd_init_live_debugger_probe(const ddog_Probe *probe, dd_probe_def *def, zai_hook_begin begin, zai_hook_end end, void (*def_dtor)(void *), size_t dynamic) {
@@ -205,14 +205,14 @@ static int64_t dd_init_live_debugger_probe(const ddog_Probe *probe, dd_probe_def
205205
def->probe.status_msg = DDOG_CHARSLICE_C("Method does not exist on the given class");
206206
def->probe.status_exception = DDOG_CHARSLICE_C("METHOD_NOT_FOUND");
207207
error:
208-
ddog_send_debugger_diagnostics(DDTRACE_G(remote_config_state), &ddtrace_sidecar, ddtrace_sidecar_instance_id, DDTRACE_G(sidecar_queue_id), &def->probe, ddtrace_nanoseconds_realtime() / 1000000);
208+
ddog_send_debugger_diagnostics(DDTRACE_G(remote_config_state), &DDTRACE_G(sidecar), ddtrace_sidecar_instance_id, DDTRACE_G(sidecar_queue_id), &def->probe, ddtrace_nanoseconds_realtime() / 1000000);
209209
def_dtor(def);
210210
return -1;
211211
}
212212

213213
if (def->probe.status != DDOG_PROBE_STATUS_INSTALLED) {
214214
def->probe.status = DDOG_PROBE_STATUS_RECEIVED;
215-
ddog_send_debugger_diagnostics(DDTRACE_G(remote_config_state), &ddtrace_sidecar, ddtrace_sidecar_instance_id, DDTRACE_G(sidecar_queue_id), &def->probe, ddtrace_nanoseconds_realtime() / 1000000);
215+
ddog_send_debugger_diagnostics(DDTRACE_G(remote_config_state), &DDTRACE_G(sidecar), ddtrace_sidecar_instance_id, DDTRACE_G(sidecar_queue_id), &def->probe, ddtrace_nanoseconds_realtime() / 1000000);
216216
}
217217

218218
zend_hash_index_add_new_ptr(&DDTRACE_G(active_rc_hooks), id, def);
@@ -222,7 +222,7 @@ static int64_t dd_init_live_debugger_probe(const ddog_Probe *probe, dd_probe_def
222222
static void dd_probe_mark_active(dd_probe_def *def) {
223223
if (def->probe.status != DDOG_PROBE_STATUS_EMITTING) {
224224
def->probe.status = DDOG_PROBE_STATUS_EMITTING;
225-
ddog_send_debugger_diagnostics(DDTRACE_G(remote_config_state), &ddtrace_sidecar, ddtrace_sidecar_instance_id, DDTRACE_G(sidecar_queue_id), &def->probe, ddtrace_nanoseconds_realtime() / 1000000);
225+
ddog_send_debugger_diagnostics(DDTRACE_G(remote_config_state), &DDTRACE_G(sidecar), ddtrace_sidecar_instance_id, DDTRACE_G(sidecar_queue_id), &def->probe, ddtrace_nanoseconds_realtime() / 1000000);
226226
}
227227
}
228228

@@ -1654,8 +1654,8 @@ bool ddtrace_alter_dynamic_instrumentation_config(zval *old_value, zval *new_val
16541654
ddog_set_dynamic_instrumentation_enabled(DDTRACE_G(remote_config_state), enabled);
16551655
}
16561656

1657-
if (DDTRACE_G(request_initialized) && ddtrace_sidecar) {
1658-
ddog_sidecar_set_request_config(&ddtrace_sidecar, ddtrace_sidecar_instance_id, &DDTRACE_G(sidecar_queue_id), enabled ? DDOG_DYNAMIC_INSTRUMENTATION_CONFIG_STATE_ENABLED : DDOG_DYNAMIC_INSTRUMENTATION_CONFIG_STATE_DISABLED);
1657+
if (DDTRACE_G(request_initialized) && DDTRACE_G(sidecar)) {
1658+
ddog_sidecar_set_request_config(&DDTRACE_G(sidecar), ddtrace_sidecar_instance_id, &DDTRACE_G(sidecar_queue_id), enabled ? DDOG_DYNAMIC_INSTRUMENTATION_CONFIG_STATE_ENABLED : DDOG_DYNAMIC_INSTRUMENTATION_CONFIG_STATE_DISABLED);
16591659
}
16601660
return true;
16611661
}

ext/otel_config.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
ZEND_EXTERN_MODULE_GLOBALS(ddtrace);
1010

1111
static void report_otel_cfg_telemetry_invalid(const char *otel_cfg, const char *dd_cfg, bool pre_rinit) {
12-
if (!pre_rinit && ddtrace_sidecar && get_DD_INSTRUMENTATION_TELEMETRY_ENABLED()) {
13-
ddog_sidecar_telemetry_register_metric(&ddtrace_sidecar, DDOG_CHARSLICE_C("otel.env.invalid"), DDOG_METRIC_TYPE_COUNT, DDOG_METRIC_NAMESPACE_TRACERS);
12+
if (!pre_rinit && DDTRACE_G(sidecar) && get_DD_INSTRUMENTATION_TELEMETRY_ENABLED()) {
13+
ddog_sidecar_telemetry_register_metric(&DDTRACE_G(sidecar), DDOG_CHARSLICE_C("otel.env.invalid"), DDOG_METRIC_TYPE_COUNT, DDOG_METRIC_NAMESPACE_TRACERS);
1414
ddog_SidecarActionsBuffer *buffer = ddtrace_telemetry_buffer();
1515
ddog_CharSlice tags;
1616
tags.len = asprintf((char **)&tags.ptr, "config_opentelemetry:%s,config_datadog:%s", otel_cfg, dd_cfg);

ext/serializer.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1362,7 +1362,7 @@ ddog_SpanBytes *ddtrace_serialize_span_to_rust_span(ddtrace_span_data *span, ddo
13621362

13631363
// Trace-level filter: when stats computation is enabled, drop the span from the
13641364
// entire pipeline (trace sending + stats) if its trace is filtered.
1365-
if (ddtrace_sidecar && get_DD_TRACE_STATS_COMPUTATION_ENABLED()) {
1365+
if (DDTRACE_G(sidecar) && get_DD_TRACE_STATS_COMPUTATION_ENABLED()) {
13661366
if (DDTRACE_G(agent_info_reader)) {
13671367
ddog_apply_agent_info_concentrator_config(DDTRACE_G(agent_info_reader));
13681368
}
@@ -1534,7 +1534,7 @@ ddog_SpanBytes *ddtrace_serialize_span_to_rust_span(ddtrace_span_data *span, ddo
15341534
ZEND_HASH_FOREACH_END();
15351535

15361536

1537-
if (!span_sampling_applied && ddtrace_sidecar && get_DD_TRACE_STATS_COMPUTATION_ENABLED() && ddog_is_agent_info_ready()) {
1537+
if (!span_sampling_applied && DDTRACE_G(sidecar) && get_DD_TRACE_STATS_COMPUTATION_ENABLED() && ddog_is_agent_info_ready()) {
15381538
if (inferred_span) {
15391539
// Inferred span won't be serialized, so feed it to the concentrator here.
15401540
ddtrace_span_precomputed inferred_pre;
@@ -1779,7 +1779,7 @@ ddog_SpanBytes *ddtrace_serialize_span_to_rust_span(ddtrace_span_data *span, ddo
17791779
zend_string_release(Z_STR(prop_root_service_as_string));
17801780
zend_string_release(Z_STR(prop_service_as_string));
17811781

1782-
if (ddtrace_sidecar && get_DD_TRACE_STATS_COMPUTATION_ENABLED() && ddog_is_agent_info_ready()) {
1782+
if (DDTRACE_G(sidecar) && get_DD_TRACE_STATS_COMPUTATION_ENABLED() && ddog_is_agent_info_ready()) {
17831783
ddtrace_feed_span_to_concentrator(span, &pre);
17841784
}
17851785

@@ -1804,7 +1804,7 @@ ddog_SpanBytes *ddtrace_serialize_span_to_rust_span(ddtrace_span_data *span, ddo
18041804
}
18051805
}
18061806

1807-
if (ddtrace_sidecar && get_DD_TRACE_STATS_COMPUTATION_ENABLED() && !is_inferred_span) {
1807+
if (DDTRACE_G(sidecar) && get_DD_TRACE_STATS_COMPUTATION_ENABLED() && !is_inferred_span) {
18081808
bool is_top_level_span = !span->parent;
18091809
if (span->parent) {
18101810
zval *parent_service = &SPANDATA(span->parent)->property_service;

0 commit comments

Comments
 (0)