Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions components-rs/ddtrace.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ extern ddog_VecRemoteConfigCapabilities DDTRACE_REMOTE_CONFIG_CAPABILITIES;

extern const uint8_t *DDOG_PHP_FUNCTION;

extern struct ddog_SidecarTransport *ddtrace_sidecar;

/**
* # Safety
* Must be called from a single-threaded context, such as MINIT.
Expand Down
4 changes: 0 additions & 4 deletions components-rs/sidecar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -170,10 +170,6 @@ pub extern "C" fn ddog_sidecar_connect_php(
MaybeError::None
}

#[no_mangle]
#[allow(non_upper_case_globals)]
pub static mut ddtrace_sidecar: *mut SidecarTransport = std::ptr::null_mut();

#[no_mangle]
pub extern "C" fn ddtrace_sidecar_reconnect(
transport: &mut Box<SidecarTransport>,
Expand Down
4 changes: 2 additions & 2 deletions ext/auto_flush.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ ZEND_RESULT_CODE ddtrace_flush_tracer(bool force_on_startup, bool collect_cycles
char *url = ddtrace_agent_url();

if (get_global_DD_TRACE_SIDECAR_TRACE_SENDER()) {
if (ddtrace_sidecar) {
if (DDTRACE_G(sidecar)) {
ddog_SenderParameters parameters = {
.tracer_headers_tags = {
.container_id = ddtrace_get_container_id(),
Expand All @@ -59,7 +59,7 @@ ZEND_RESULT_CODE ddtrace_flush_tracer(bool force_on_startup, bool collect_cycles
.client_computed_top_level = get_DD_TRACE_STATS_COMPUTATION_ENABLED(),
.client_computed_stats = !get_global_DD_APM_TRACING_ENABLED() || get_DD_TRACE_STATS_COMPUTATION_ENABLED(),
},
.transport = ddtrace_sidecar,
.transport = DDTRACE_G(sidecar),
.instance_id = ddtrace_sidecar_instance_id,
.limit = limit,
.n_requests = get_global_DD_TRACE_AGENT_FLUSH_AFTER_N_REQUESTS(),
Expand Down
4 changes: 2 additions & 2 deletions ext/coms.c
Original file line number Diff line number Diff line change
Expand Up @@ -771,10 +771,10 @@ static struct curl_slist *dd_agent_headers_alloc(void) {
dd_append_header(&list, "Datadog-Meta-Lang-Interpreter", sapi_module.name, strlen(sapi_module.name));
dd_append_header(&list, "Datadog-Meta-Lang-Version", php_version_rt.ptr, php_version_rt.len);
dd_append_header(&list, "Datadog-Meta-Tracer-Version", ZEND_STRL(PHP_DDTRACE_VERSION));
if (!get_global_DD_APM_TRACING_ENABLED() || (ddtrace_sidecar && get_global_DD_TRACE_STATS_COMPUTATION_ENABLED())) {
if (!get_global_DD_APM_TRACING_ENABLED() || (ddtrace_sidecar_for_signal && get_global_DD_TRACE_STATS_COMPUTATION_ENABLED())) {
dd_append_header(&list, "Datadog-Client-Computed-Stats", ZEND_STRL("true"));
}
if (ddtrace_sidecar && get_global_DD_TRACE_STATS_COMPUTATION_ENABLED()) {
if (ddtrace_sidecar_for_signal && get_global_DD_TRACE_STATS_COMPUTATION_ENABLED()) {
dd_append_header(&list, "Datadog-Client-Computed-Top-Level", ZEND_STRL("true"));
}

Expand Down
43 changes: 23 additions & 20 deletions ext/ddtrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -409,21 +409,21 @@ static inline void dd_alter_prop(size_t prop_offset, zval *old_value, zval *new_
bool ddtrace_alter_dd_service(zval *old_value, zval *new_value, zend_string *new_str) {
dd_alter_prop(XtOffsetOf(ddtrace_span_properties, property_service), old_value, new_value, new_str);
if (DDTRACE_G(request_initialized)) {
ddtrace_sidecar_submit_root_span_data_direct(&ddtrace_sidecar, NULL, new_str, get_DD_ENV(), get_DD_VERSION());
ddtrace_sidecar_submit_root_span_data_direct(&DDTRACE_G(sidecar), NULL, new_str, get_DD_ENV(), get_DD_VERSION());
}
return true;
}
bool ddtrace_alter_dd_env(zval *old_value, zval *new_value, zend_string *new_str) {
dd_alter_prop(XtOffsetOf(ddtrace_span_properties, property_env), old_value, new_value, new_str);
if (DDTRACE_G(request_initialized)) {
ddtrace_sidecar_submit_root_span_data_direct(&ddtrace_sidecar, NULL, get_DD_SERVICE(), new_str, get_DD_VERSION());
ddtrace_sidecar_submit_root_span_data_direct(&DDTRACE_G(sidecar), NULL, get_DD_SERVICE(), new_str, get_DD_VERSION());
}
return true;
}
bool ddtrace_alter_dd_version(zval *old_value, zval *new_value, zend_string *new_str) {
dd_alter_prop(XtOffsetOf(ddtrace_span_properties, property_version), old_value, new_value, new_str);
if (DDTRACE_G(request_initialized)) {
ddtrace_sidecar_submit_root_span_data_direct(&ddtrace_sidecar, NULL, get_DD_SERVICE(), get_DD_ENV(), new_str);
ddtrace_sidecar_submit_root_span_data_direct(&DDTRACE_G(sidecar), NULL, get_DD_SERVICE(), get_DD_ENV(), new_str);
}
return true;
}
Expand Down Expand Up @@ -697,6 +697,9 @@ static PHP_GSHUTDOWN_FUNCTION(ddtrace) {

zend_hash_destroy(&ddtrace_globals->git_metadata);

// Drop the per-thread sidecar transport (thread-lifetime, one per thread).
ddtrace_sidecar_gshutdown();

tsrm_mutex_free(ddtrace_globals->sidecar_universal_service_tags_mutex);

#ifdef CXA_THREAD_ATEXIT_WRAPPER
Expand Down Expand Up @@ -1594,8 +1597,8 @@ static PHP_MSHUTDOWN_FUNCTION(ddtrace) {
ddtrace_coms_mshutdown_proxy_env();
} else /* ! part of the if outside the ifdef */
#endif
if (get_global_DD_TRACE_FORCE_FLUSH_ON_SHUTDOWN() && ddtrace_sidecar) {
ddog_sidecar_flush_traces(&ddtrace_sidecar);
if (get_global_DD_TRACE_FORCE_FLUSH_ON_SHUTDOWN() && DDTRACE_G(sidecar)) {
ddog_sidecar_flush_traces(&DDTRACE_G(sidecar));
}

ddtrace_log_mshutdown();
Expand Down Expand Up @@ -2809,7 +2812,7 @@ PHP_FUNCTION(DDTrace_dogstatsd_set) {
PHP_FUNCTION(DDTrace_are_endpoints_collected) {
UNUSED(execute_data);

if (!ddtrace_sidecar || !ddtrace_sidecar_instance_id || !DDTRACE_G(sidecar_queue_id)) {
if (!DDTRACE_G(sidecar) || !ddtrace_sidecar_instance_id || !DDTRACE_G(sidecar_queue_id)) {
RETURN_TRUE; // Skip overhead if unnecessary
}

Expand Down Expand Up @@ -2865,7 +2868,7 @@ PHP_FUNCTION(DDTrace_add_endpoint) {
RETURN_FALSE;
}

if (!ddtrace_sidecar || !ddtrace_sidecar_instance_id || !DDTRACE_G(sidecar_queue_id)) {
if (!DDTRACE_G(sidecar) || !ddtrace_sidecar_instance_id || !DDTRACE_G(sidecar_queue_id)) {
RETURN_FALSE;
}

Expand All @@ -2890,7 +2893,7 @@ PHP_FUNCTION(DDTrace_flush_endpoints) {
UNUSED(execute_data);
UNUSED(return_value);

if (!ddtrace_sidecar || !ddtrace_sidecar_instance_id || !DDTRACE_G(sidecar_queue_id) || !DDTRACE_G(telemetry_buffer)) {
if (!DDTRACE_G(sidecar) || !ddtrace_sidecar_instance_id || !DDTRACE_G(sidecar_queue_id) || !DDTRACE_G(telemetry_buffer)) {
return;
}

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

ddtrace_ffi_try("Failed flushing endpoint telemetry buffer",
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));
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));
}

PHP_FUNCTION(dd_trace_send_traces_via_thread) {
Expand Down Expand Up @@ -3004,7 +3007,7 @@ PHP_FUNCTION(dd_trace_internal_fn) {
}
} else if (params_count == 1 && FUNCTION_NAME_MATCHES("detect_composer_installed_json")) {
ddog_CharSlice path = dd_zend_string_to_CharSlice(Z_STR_P(ZVAL_VARARG_PARAM(params, 0)));
ddtrace_detect_composer_installed_json(&ddtrace_sidecar, ddtrace_sidecar_instance_id, &DDTRACE_G(sidecar_queue_id), path);
ddtrace_detect_composer_installed_json(&DDTRACE_G(sidecar), ddtrace_sidecar_instance_id, &DDTRACE_G(sidecar_queue_id), path);
RETVAL_TRUE;
} else if (params_count == 2 && FUNCTION_NAME_MATCHES("mark_integration_loaded")) {
zval *name = ZVAL_VARARG_PARAM(params, 0);
Expand Down Expand Up @@ -3032,24 +3035,24 @@ PHP_FUNCTION(dd_trace_internal_fn) {
RETVAL_TRUE;
}
} else if (FUNCTION_NAME_MATCHES("dump_sidecar")) {
if (!ddtrace_sidecar) {
if (!DDTRACE_G(sidecar)) {
RETURN_FALSE;
}
ddog_CharSlice slice = ddog_sidecar_dump(&ddtrace_sidecar);
ddog_CharSlice slice = ddog_sidecar_dump(&DDTRACE_G(sidecar));
RETVAL_STRINGL(slice.ptr, slice.len);
free((void *) slice.ptr);
} else if (FUNCTION_NAME_MATCHES("stats_sidecar")) {
if (!ddtrace_sidecar) {
if (!DDTRACE_G(sidecar)) {
RETURN_FALSE;
}
ddog_CharSlice slice = ddog_sidecar_stats(&ddtrace_sidecar);
ddog_CharSlice slice = ddog_sidecar_stats(&DDTRACE_G(sidecar));
RETVAL_STRINGL(slice.ptr, slice.len);
free((void *) slice.ptr);
} else if (FUNCTION_NAME_MATCHES("break_sidecar_connection")) {
if (!ddtrace_sidecar) {
if (!DDTRACE_G(sidecar)) {
RETURN_FALSE;
}
ddog_sidecar_send_garbage(&ddtrace_sidecar);
ddog_sidecar_send_garbage(&DDTRACE_G(sidecar));
ddtrace_generate_runtime_id();
ddtrace_force_new_instance_id();
RETURN_TRUE;
Expand Down Expand Up @@ -3079,8 +3082,8 @@ PHP_FUNCTION(dd_trace_internal_fn) {
}
} else
#endif
if (ddtrace_sidecar) {
ddtrace_ffi_try("Failed synchronously flushing traces", ddog_sidecar_flush_traces(&ddtrace_sidecar));
if (DDTRACE_G(sidecar)) {
ddtrace_ffi_try("Failed synchronously flushing traces", ddog_sidecar_flush_traces(&DDTRACE_G(sidecar)));
}
RETVAL_TRUE;
#ifndef _WIN32
Expand Down Expand Up @@ -3214,8 +3217,8 @@ PHP_FUNCTION(dd_trace_synchronous_flush) {
}
} else
#endif
if (ddtrace_sidecar) {
ddtrace_ffi_try("Failed synchronously flushing traces", ddog_sidecar_flush_traces(&ddtrace_sidecar));
if (DDTRACE_G(sidecar)) {
ddtrace_ffi_try("Failed synchronously flushing traces", ddog_sidecar_flush_traces(&DDTRACE_G(sidecar)));
}
RETURN_NULL();
}
Expand Down
2 changes: 2 additions & 0 deletions ext/ddtrace.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ ZEND_BEGIN_MODULE_GLOBALS(ddtrace)
zend_reference *curl_multi_injecting_spans;

char *cgroup_file;
ddog_SidecarTransport *sidecar;
ddog_QueueId sidecar_queue_id;
MUTEX_T sidecar_universal_service_tags_mutex;
ddog_AgentRemoteConfigReader *agent_config_reader;
Expand All @@ -166,6 +167,7 @@ ZEND_BEGIN_MODULE_GLOBALS(ddtrace)
bool request_initialized;
HashTable telemetry_spans_created_per_integration;
ddog_SidecarActionsBuffer *telemetry_buffer;
ddog_SidecarActionsBuffer *metrics_buffer;

bool asm_event_emitted;

Expand Down
2 changes: 1 addition & 1 deletion ext/exception_serialize.c
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,7 @@ static void ddtrace_collect_exception_debug_data(zend_object *exception, zend_ob
ddog_add_str_span_meta_str(span, "error.debug_info_captured", "true");
ddog_add_str_span_meta_CharSlice(span, "_dd.debug.error.exception_hash", (ddog_CharSlice){.ptr = exception_hash, .len = hash_len});

if (!ddog_exception_hash_limiter_inc(ddtrace_sidecar, (uint64_t)exception_long_hash, get_DD_EXCEPTION_REPLAY_CAPTURE_INTERVAL_SECONDS())) {
if (!ddog_exception_hash_limiter_inc(DDTRACE_G(sidecar), (uint64_t)exception_long_hash, get_DD_EXCEPTION_REPLAY_CAPTURE_INTERVAL_SECONDS())) {
LOG(TRACE, "Skipping exception replay capture due to hash %.*s already recently hit", hash_len, exception_hash);
goto cleanup;
}
Expand Down
12 changes: 6 additions & 6 deletions ext/live_debugger.c
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ static void dd_probe_resolved(void *data, bool found) {
def->probe.status_msg = DDOG_CHARSLICE_C("Method does not exist on the given class");
def->probe.status_exception = DDOG_CHARSLICE_C("METHOD_NOT_FOUND");
}
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);
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);
}

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) {
Expand Down Expand Up @@ -205,14 +205,14 @@ static int64_t dd_init_live_debugger_probe(const ddog_Probe *probe, dd_probe_def
def->probe.status_msg = DDOG_CHARSLICE_C("Method does not exist on the given class");
def->probe.status_exception = DDOG_CHARSLICE_C("METHOD_NOT_FOUND");
error:
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);
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);
def_dtor(def);
return -1;
}

if (def->probe.status != DDOG_PROBE_STATUS_INSTALLED) {
def->probe.status = DDOG_PROBE_STATUS_RECEIVED;
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);
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);
}

zend_hash_index_add_new_ptr(&DDTRACE_G(active_rc_hooks), id, def);
Expand All @@ -222,7 +222,7 @@ static int64_t dd_init_live_debugger_probe(const ddog_Probe *probe, dd_probe_def
static void dd_probe_mark_active(dd_probe_def *def) {
if (def->probe.status != DDOG_PROBE_STATUS_EMITTING) {
def->probe.status = DDOG_PROBE_STATUS_EMITTING;
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);
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);
}
}

Expand Down Expand Up @@ -1654,8 +1654,8 @@ bool ddtrace_alter_dynamic_instrumentation_config(zval *old_value, zval *new_val
ddog_set_dynamic_instrumentation_enabled(DDTRACE_G(remote_config_state), enabled);
}

if (DDTRACE_G(request_initialized) && ddtrace_sidecar) {
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);
if (DDTRACE_G(request_initialized) && DDTRACE_G(sidecar)) {
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);
}
return true;
}
Expand Down
4 changes: 2 additions & 2 deletions ext/otel_config.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
ZEND_EXTERN_MODULE_GLOBALS(ddtrace);

static void report_otel_cfg_telemetry_invalid(const char *otel_cfg, const char *dd_cfg, bool pre_rinit) {
if (!pre_rinit && ddtrace_sidecar && get_DD_INSTRUMENTATION_TELEMETRY_ENABLED()) {
ddog_sidecar_telemetry_register_metric(&ddtrace_sidecar, DDOG_CHARSLICE_C("otel.env.invalid"), DDOG_METRIC_TYPE_COUNT, DDOG_METRIC_NAMESPACE_TRACERS);
if (!pre_rinit && DDTRACE_G(sidecar) && get_DD_INSTRUMENTATION_TELEMETRY_ENABLED()) {
ddog_sidecar_telemetry_register_metric(&DDTRACE_G(sidecar), DDOG_CHARSLICE_C("otel.env.invalid"), DDOG_METRIC_TYPE_COUNT, DDOG_METRIC_NAMESPACE_TRACERS);
ddog_SidecarActionsBuffer *buffer = ddtrace_telemetry_buffer();
ddog_CharSlice tags;
tags.len = asprintf((char **)&tags.ptr, "config_opentelemetry:%s,config_datadog:%s", otel_cfg, dd_cfg);
Expand Down
8 changes: 4 additions & 4 deletions ext/serializer.c
Original file line number Diff line number Diff line change
Expand Up @@ -1362,7 +1362,7 @@ ddog_SpanBytes *ddtrace_serialize_span_to_rust_span(ddtrace_span_data *span, ddo

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


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

if (ddtrace_sidecar && get_DD_TRACE_STATS_COMPUTATION_ENABLED() && ddog_is_agent_info_ready()) {
if (DDTRACE_G(sidecar) && get_DD_TRACE_STATS_COMPUTATION_ENABLED() && ddog_is_agent_info_ready()) {
ddtrace_feed_span_to_concentrator(span, &pre);
}

Expand All @@ -1804,7 +1804,7 @@ ddog_SpanBytes *ddtrace_serialize_span_to_rust_span(ddtrace_span_data *span, ddo
}
}

if (ddtrace_sidecar && get_DD_TRACE_STATS_COMPUTATION_ENABLED() && !is_inferred_span) {
if (DDTRACE_G(sidecar) && get_DD_TRACE_STATS_COMPUTATION_ENABLED() && !is_inferred_span) {
bool is_top_level_span = !span->parent;
if (span->parent) {
zval *parent_service = &SPANDATA(span->parent)->property_service;
Expand Down
Loading
Loading