Skip to content

Commit c3c9b98

Browse files
committed
Merge branch 'master' of github.com:DataDog/dd-trace-php into leiyks-use-rust-span-in-tracer
2 parents beceee6 + 4ba40d2 commit c3c9b98

11 files changed

+1586
-23
lines changed

.github/chainguard/gitlab-ci-aggregate-versions.sts.yaml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,6 @@ issuer: https://gitlab.ddbuild.io
22

33
subject_pattern: "project_path:DataDog/apm-reliability/dd-trace-php:ref_type:(branch|tag):ref:.*"
44

5-
claim_pattern:
6-
project_path: "DataDog/apm-reliability/dd-trace-php"
7-
ref: ".*"
8-
ref_type: "(branch|tag)"
9-
pipeline_source: "(push|schedule)"
10-
115
permissions:
126
actions: write
137
contents: write
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
issuer: https://gitlab.ddbuild.io
2+
3+
subject_pattern: "project_path:DataDog/apm-reliability/dd-trace-php:ref_type:tag:ref:ddtrace-.*"
4+
5+
permissions:
6+
contents: write

.gitlab/generate-package.php

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
- notify
8686
- verify
8787
- shared-pipeline # OCI packaging
88+
- pre-release
8889
- release
8990

9091
variables:
@@ -1403,6 +1404,33 @@
14031404
UPSTREAM_BRANCH: $CI_COMMIT_REF_NAME
14041405
UPSTREAM_COMMIT_SHA: $CI_COMMIT_SHA
14051406

1407+
"generate github token":
1408+
stage: pre-release
1409+
image: registry.ddbuild.io/images/dd-octo-sts-ci-base:2025.06-1
1410+
tags: [ "arch:amd64" ]
1411+
only:
1412+
refs:
1413+
- /^ddtrace-.*$/
1414+
id_tokens:
1415+
DDOCTOSTS_ID_TOKEN:
1416+
aud: dd-octo-sts
1417+
script:
1418+
- echo "Generating GitHub token for release..."
1419+
- dd-octo-sts debug --scope DataDog/dd-trace-php --policy gitlab-ci-publish-release
1420+
- dd-octo-sts token --scope DataDog/dd-trace-php --policy gitlab-ci-publish-release > github_token.txt
1421+
# Verify token works
1422+
- export GITHUB_TOKEN=$(cat github_token.txt)
1423+
- 'curl -f -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/repos/DataDog/dd-trace-php | jq -r .name'
1424+
- echo "Token generated and verified successfully"
1425+
artifacts:
1426+
paths:
1427+
- github_token.txt
1428+
expire_in: 1 hour
1429+
when: on_success
1430+
variables:
1431+
# Prevent token from appearing in logs
1432+
GITHUB_TOKEN: "[MASKED]"
1433+
14061434
"publish release to github":
14071435
stage: release
14081436
image: registry.ddbuild.io/images/mirror/php:8.2-cli
@@ -1411,6 +1439,8 @@
14111439
refs:
14121440
- /^ddtrace-.*$/
14131441
needs:
1442+
- job: "generate github token"
1443+
artifacts: true
14141444
- job: "datadog-setup.php"
14151445
artifacts: true
14161446
- job: "package extension windows"
@@ -1420,5 +1450,12 @@
14201450
artifacts: true
14211451
<?php endforeach; ?>
14221452
script:
1423-
- if [ -z ${GITHUB_RELEASE_PAT} ]; then export GITHUB_RELEASE_PAT=$(aws ssm get-parameter --region us-east-1 --name ci.$CI_PROJECT_NAME.gh_token --with-decryption --query "Parameter.Value" --out text); fi
1424-
- php tooling/bin/create_release.php packages
1453+
- echo "Using pre-generated GitHub token for release..."
1454+
- export GITHUB_RELEASE_PAT=$(cat github_token.txt)
1455+
- php tooling/ci/create_release.php packages
1456+
after_script:
1457+
# Clean up token file (token will expire automatically in 1 hour)
1458+
- rm -f github_token.txt
1459+
variables:
1460+
# Prevent token from appearing in logs
1461+
GITHUB_RELEASE_PAT: "[MASKED]"

components-rs/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ ddcommon = { path = "../libdatadog/ddcommon", features = ["cgroup_testing"] }
1212
ddcommon-ffi = { path = "../libdatadog/ddcommon-ffi", default-features = false }
1313
ddtelemetry = { path = "../libdatadog/ddtelemetry" }
1414
ddtelemetry-ffi = { path = "../libdatadog/ddtelemetry-ffi", default-features = false }
15-
data-pipeline-ffi = { path = "../libdatadog/data-pipeline-ffi", default-features = false }
1615
datadog-live-debugger = { path = "../libdatadog/datadog-live-debugger" }
1716
datadog-live-debugger-ffi = { path = "../libdatadog/datadog-live-debugger-ffi", default-features = false }
1817
datadog-ipc = { path = "../libdatadog/datadog-ipc" }

ext/distributed_tracing_headers.c

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -655,7 +655,7 @@ void ddtrace_apply_distributed_tracing_result(ddtrace_distributed_tracing_result
655655
if (DDTRACE_G(tracestate)) {
656656
zend_string_release(DDTRACE_G(tracestate));
657657
}
658-
DDTRACE_G(tracestate) = result->tracestate;
658+
DDTRACE_G(tracestate) = result->tracestate;
659659
zend_hash_destroy(&DDTRACE_G(baggage));
660660
DDTRACE_G(baggage) = result->baggage;
661661
zend_string *key;
@@ -675,6 +675,15 @@ void ddtrace_apply_distributed_tracing_result(ddtrace_distributed_tracing_result
675675
result->meta_tags.pDestructor = NULL; // we moved values directly
676676
zend_hash_destroy(&result->meta_tags);
677677

678+
if (result->trace_id.low || result->trace_id.high || result->priority_sampling != DDTRACE_PRIORITY_SAMPLING_UNKNOWN) {
679+
if (span) {
680+
ZVAL_LONG(&zv, result->priority_sampling);
681+
ddtrace_assign_variable(&span->property_propagated_sampling_priority, &zv);
682+
} else {
683+
DDTRACE_G(propagated_priority_sampling) = result->priority_sampling;
684+
}
685+
}
686+
678687
if (result->priority_sampling != DDTRACE_PRIORITY_SAMPLING_UNKNOWN) {
679688
bool reset_decision_maker = result->conflicting_sampling_priority || !zend_hash_str_exists(root_meta, ZEND_STRL("_dd.p.dm"));
680689
if (reset_decision_maker) {
@@ -687,11 +696,8 @@ void ddtrace_apply_distributed_tracing_result(ddtrace_distributed_tracing_result
687696
}
688697
}
689698
if (!span) {
690-
DDTRACE_G(propagated_priority_sampling) = DDTRACE_G(default_priority_sampling) = result->priority_sampling;
699+
DDTRACE_G(default_priority_sampling) = result->priority_sampling;
691700
} else {
692-
ZVAL_LONG(&zv, result->priority_sampling);
693-
ddtrace_assign_variable(&span->property_propagated_sampling_priority, &zv);
694-
695701
ddtrace_set_priority_sampling_on_span(span, result->priority_sampling, DD_MECHANISM_DEFAULT);
696702
}
697703
}

ext/priority_sampling/priority_sampling.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
#include "components/log/log.h"
1616
#include "agent_info.h"
1717

18+
/* Sampling constants */
19+
const uint64_t KNUTH_FACTOR = 1111111111111111111ULL;
20+
const uint64_t MAX_TRACE_ID = ~0ULL; // 2^64-1 - This represents the maximum value of a Trace ID
21+
1822
ZEND_EXTERN_MODULE_GLOBALS(ddtrace);
1923

2024
void ddtrace_try_read_agent_rate(void) {
@@ -210,8 +214,8 @@ static ddtrace_rule_result dd_decide_on_open_span_sampling(ddtrace_root_span_dat
210214
ddtrace_rule_result result = root->sampling_rule;
211215
do {
212216
ddtrace_span_data *span = SPANDATA(span_props);
213-
214-
ddtrace_rule_result new_result = dd_match_rules(span, &root->span == span && !root->parent_id, result.rule);
217+
bool is_root = &root->span == span && (!root->parent_id || zval_get_long(&root->property_propagated_sampling_priority) == DDTRACE_PRIORITY_SAMPLING_UNKNOWN);
218+
ddtrace_rule_result new_result = dd_match_rules(span, is_root, result.rule);
215219
if (new_result.rule != INT32_MAX) {
216220
result = new_result;
217221
}
@@ -230,7 +234,7 @@ static void dd_decide_on_sampling(ddtrace_root_span_data *span) {
230234
double sample_rate = 0;
231235
bool explicit_rule = true;
232236

233-
if (is_trace_root) {
237+
if (is_trace_root || zval_get_long(&span->property_propagated_sampling_priority) == DDTRACE_PRIORITY_SAMPLING_UNKNOWN) {
234238
// when we sample, we need to fetch the env first
235239
ddtrace_check_agent_info_env();
236240

@@ -295,7 +299,7 @@ static void dd_decide_on_sampling(ddtrace_root_span_data *span) {
295299
}
296300

297301
// this must be stable on re-evaluation
298-
bool sampling = (double)span->trace_id.low < sample_rate * (double)~0ULL;
302+
bool sampling = (span->trace_id.low * KNUTH_FACTOR) <= (sample_rate * MAX_TRACE_ID);
299303
bool limited = false;
300304
if (result.mechanism != DD_MECHANISM_MANUAL && ddtrace_limiter_active() && sampling) {
301305
if (span->trace_is_limited == DD_TRACE_LIMIT_UNCHECKED) {

0 commit comments

Comments
 (0)