Releases: DataDog/dd-trace-py
4.9.0rc2
Estimated end-of-life date, accurate to within three months: 10-2027
See the support level definitions for more information.
New Features
-
LLM Observability: Adds an optional
cost_tagsargument toLLMObs.annotate()andLLMObs.annotation_context(). Pass a list of tag keys (already set viatagsor annotated previously on the same span) to have them attached to the cost and token metrics generated from LLM and embedding spans, which can help breaking down spend by team, project, org, or any custom dimension. -
profiling: Add
DD_PROFILING_LOCK_EXCLUDE_MODULESconfig to skip lock profiling for framework-internal locks. Excluded locks remain native with zero profiling overhead. Set it to a comma-separated list of module prefixes (e.g.,django.db,sqlalchemy.pool,urllib3).
Bug Fixes
-
azure_cosmos: This change removes the http.status_code tags from Azure CosmosDB spans and replaces them with the use of the db.response.status_code metric. For customers using ddtrace v4.8.0 and relying on the http.status_code tag of cosmosdb.query spans, this is a breaking change.
-
profiling: Fixes an issue where the lock profiler silently stopped capturing lock events when running under
ddtrace-runwithgeventinstalled. -
Fixed a startup deadlock when using
snowflake-connector-python >= 4.4.0withDD_TRACE_SNOWFLAKE_ENABLED=true.
4.7.2
Estimated end-of-life date, accurate to within three months: 05-2027
See the support level definitions for more information.
Bug Fixes
- CI Visibility: This fix resolves an issue where a failure response from the
/search_commitsendpoint caused the git metadata upload to fall back to sending the full 30-day commit history instead of aborting. This fallback could trigger cascading write load on the backend. The upload now aborts whensearch_commitsfails, matching the behavior when the/packfileupload itself fails.
- ai_guard: This fix resolves a conflict between
ddtrace.autoandstrandswhen imported in the same file, which left Strands hooks silently disabled. The Strands integration now loads lazily on first attribute access so its event class identities match those the agent dispatches.
- AAP: This fix resolves an issue where Application and API Protection (AAP) was incorrectly reported as an enabled product in internal telemetry for all services by default. Previously, registering remote configuration listeners caused AAP to be reported as activated even when it was not actually enabled. This had no impact on customers as it only affected internal telemetry data. AAP is now only reported as activated when it is explicitly enabled or enabled through remote configuration.
- iast: A crash has been fixed.
- profiling: A crash that could happen in child processes after fork has been fixed.
- tracing: This fix resolves a memory leak where reference cycles through a span's properties were invisible to Python's cyclic garbage collector and accumulated proportionally to traced call volume.
- internal: A crash has been fixed.
- LLM Observability: Fixes incorrect span hierarchy in LLMObs traces when using the ddtrace SDK alongside OTel-based instrumentation (e.g. Strands Agents). OTel gen_ai spans (e.g.
invoke_agent) were incorrectly appearing as siblings of their SDK parent span (e.g.call_agent) rather than being nested under it.
- profiling: A rare crash occurring when profiling asyncio code with many tasks or deep call stacks has been fixed.
- profiling: A bug in Lock Profiling that could cause crashes when trying to access attributes of custom Lock subclasses (e.g. in Ray) has been fixed.
- profiling: A race condition which could make asyncio code raise exceptions at exit has been fixed.
- serverless: AWS Lambda functions now appear under their function name as the service when
DD_SERVICEis not explicitly configured. Service remapping rules configured in Datadog will
now apply correctly to Lambda spans.
4.8.2
Estimated end-of-life date, accurate to within three months: 05-2027
See the support level definitions for more information.
Bug Fixes
- ai_guard
- This fix resolves a conflict between
ddtrace.autoandstrandswhen imported in the same file, which left Strands hooks silently disabled. The Strands integration now loads lazily on first attribute access so its event class identities match those the agent dispatches.
- This fix resolves a conflict between
- tracing
- Limits parsing of the W3C
tracestateheader duringtracecontextextraction to 32 list-members and 512 UTF-8 bytes, consistent with the W3C Trace Context specification (https://www.w3.org/TR/trace-context/). Extra list-members and trailing whole entries that would exceed the byte budget are ignored, so unusually large headers no longer expand unbounded work during extraction. The Datadogdd=list-member is preferred: it is kept when present (including when it appears late in the header or alone exceeds the byte cap), and other vendors are dropped first. List-members longer thanDD_TRACE_TRACESTATE_ITEM_MAX_CHARS(128) characters are removed first when trimming by list-member count or byte budget, so shorter vendor entries are kept when possible. - tracing: Parsing incoming
baggageHTTP headers now respectsDD_TRACE_BAGGAGE_MAX_ITEMS[default 64] andDD_TRACE_BAGGAGE_MAX_BYTES[default 8192], consistent with baggage injection. Previously, extraction could retain every comma-separated entry regardless of those limits. The tracer drops excess pairs and records truncation telemetry when limits apply.
- Limits parsing of the W3C
4.8.1
Estimated end-of-life date, accurate to within three months: 05-2027
See the support level definitions for more information.
Bug Fixes
- django: Stop tagging async view and middleware spans as errored on routine ASGI cancellations (e.g. client disconnects on streaming responses), a regression introduced in 4.8.0rc4. Cancellation still propagates; the span just finishes without
error.type='asyncio.exceptions.CancelledError'.
- tracing: This fix resolves a memory leak where reference cycles through a span's properties were invisible to Python's cyclic garbage collector and accumulated proportionally to traced call volume.
4.8.0
Estimated end-of-life date, accurate to within three months: 05-2027
See the support level definitions for more information.
Upgrade Notes
-
claude_agent_sdk: Tool span resource names have changed from the tool name (e.g.
Read,Bash) toclaude_agent_sdk.tool. The specific tool name is still available in the span name (e.g.claude_agent_sdk.tool.Read). Users relying on tool resource names should update them accordingly. -
ray: Adds
DD_TRACE_RAY_SUBMISSION_SPANS_ENABLED(default:False) configuration to control Ray submission tracing. SetDD_TRACE_RAY_SUBMISSION_SPANS_ENABLED=trueto tracetask.submitandactor_method.submitspans. Leave it unset to trace only execution spans. See Ray integration documentation for more details. -
ray:
ray.job.submitspans are removed. Ray job submission outcome is now reported on the existingray.jobspan throughray.job.submit_status.
Deprecation Notes
-
Tracing:
DD_TRACE_INFERRED_PROXY_SERVICES_ENABLEDis deprecated and will be removed in 5.0.0. UseDD_TRACE_INFERRED_SPANS_ENABLEDinstead. The old environment variable continues to work but emits aDDTraceDeprecationWarningwhen set. -
tracing: The
pinparameter inddtrace.contrib.dbapi.TracedConnection,ddtrace.contrib.dbapi.TracedCursor, andddtrace.contrib.dbapi_async.TracedAsyncConnectionis deprecated and will be removed in version 5.0.0. To manage configuration of DB tracing please use integration configuration and environment variables. -
LLM Observability: Removes support for the RAGAS integration. As an alternative, if you have RAGAS evaluations, you can manually submit these evaluation results. See LLM Observability external evaluation documentation for more information.
New Features
-
AI Guard: Add
DD_AI_GUARD_BLOCKenvironment variable. Defaults toTrue, which means the blocking behavior configured in the Datadog AI Guard UI (in-app) will be honored. Set toFalseto force monitor-only mode locally: evaluations are still performed butAIGuardAbortErroris never raised, regardless of the in-app blocking setting. -
AI Guard response objects now include a dict field
tag_probswith the probabilities for each tag. -
CI Visibility: Adds Bazel offline execution support with two modes: manifest mode (
DD_TEST_OPTIMIZATION_MANIFEST_FILE), which reads settings and test data from pre-fetched cache files without network access; and payload-files mode (DD_TEST_OPTIMIZATION_PAYLOADS_IN_FILES), which writes test event, coverage, and telemetry payloads as JSON files instead of sending HTTP requests. Both modes can be used independently or together. -
LLM Observability: Captures individual LLM spans for each Claude model turn within a Claude Agent SDK session. Each LLM span captures the input messages, output messages, model name, and token usage metrics (for claude_agent_sdk >= 0.1.49).
-
AAP: This adds Application Security support for FastAPI and Starlette applications using mounted sub-applications (via
app.mount()). WAF evaluation, path parameter extraction, API endpoint discovery, andhttp.routereporting now correctly account for mount prefixes in sub-application routing. -
google_cloud_pubsub: This adds tracing for Google Cloud Pub/Sub admin operations on topic, subscription, snapshot, and schema management methods.
-
google_cloud_pubsub: Adds support for Google Cloud Pub/Sub push subscriptions. When a push subscription delivers a message via HTTP, the integration now creates an inferred
gcp.pubsub.receivespan that captures subscription and message metadata. UseDD_GOOGLE_CLOUD_PUBSUB_PROPAGATION_AS_SPAN_LINKSto control whether the inferred span becomes a child of the producer trace or starts a new trace with the producer context attached as a span link (default:False). -
LLM Observability: Add
ExperimentRun.as_dataframe()to convert experiment run results into apandas.DataFramewith a two-level MultiIndex on columns. Each top-level group (input,output,expected_output,evaluations,metadata,error,span_id,trace_id) maps to the first index level. Dict-valued fields are flattened one level deep; scalar fields use an empty string as the sub-column name. Each evaluator gets its own column containing the full evaluation result dict. Requirespandasto be installed (pip install pandas). -
LLM Observability: Adds an
eval_scopeparameter toLLMObs.submit_evaluation()(one of"span"(default) or"trace"). Useeval_scope="trace"to associate an evaluation with an entire trace by passing the root span context. -
LLM Observability: Adds
LLMObs.get_spans()to retrieve span events from the Datadog platform API (GET /api/v2/llm-obs/v1/spans/events). Supports filtering by trace ID, span ID, span kind, span name, ML app, tags, and time range. Results are auto-paginated. RequiresDD_API_KEYandDD_APP_KEY. -
profiling: Profiles generated from fork-based servers now include a
process_typetag with the valuemainorworker. -
tracing: Support for making the default span name for
@tracer.wrapinclude the class name has been added. For now, this is opt-in and can be enabled by settingDD_TRACE_WRAP_SPAN_NAME_INCLUDE_CLASS=true. The new naming will become the default in the next major release. -
llmobs: Adds support for enabling and disabling LLMObs via Remote Configuration.
-
mysql: This introduces tracing support for
mysql.connector.aio.connectin the MySQL integration. -
profiling: Thread sub-sampling is now supported. This allows to set a maximum number of threads to capture stacks for at each sampling interval. This can be used to reduce the CPU overhead of the Stack Profiler.
-
llama_index: Adds APM tracing and LLM Observability support for
llama-index-core>=0.11.0. Traces LLM calls, query engines, retrievers, embeddings, and agents. See the llama_index documentation for more information. -
ASM: Adds a LiteLLM proxy guardrail integration for Datadog AI Guard. The
ddtrace.appsec.ai_guard.integrations.litellm.DatadogAIGuardGuardrailclass can be registered as a custom guardrail in the LiteLLM proxy to evaluate requests and responses against AI Guard security policies. Requires the LiteLLM proxy guardrails API v2 available sincelitellm>=1.46.1. -
azure_cosmos: Add tracing support for Azure CosmosDB. This integration traces CRUD operations on CosmosDB databases, containers, and items.
-
LLM Observability: Introduces a
decoratortag to LLM Observability spans that are traced by a function decorator. -
CI Visibility: adds automatic log correlation and submission so that test logs appear alongside their corresponding test run in Datadog. Set
DD_AGENTLESS_LOG_SUBMISSION_ENABLED=truefor agentless setups, orDD_LOGS_INJECTION=truewhen using the Datadog Agent. -
tracing: Adds support for exporting traces in OTLP HTTP/JSON format via libdatadog. Set
OTEL_TRACES_EXPORTER=otlpto send spans to an OTLP endpoint instead of the Datadog Agent. -
LLM Observability: Experiments accept a
pydantic_evalsReportEvaluatoras a summary evaluator when itsevaluatereturn annotation is exactlyScalarResult. The scalarvalueis recorded as the summary evaluation. Report evaluators that declare a broader analysis return type (for example the fullReportAnalysisunion) are not accepted as summary evaluators; use a class-based or function summary evaluator instead. Examples and further documentation can found in our documentation [here](https://docs.datadoghq.com/llm_observability/guide/evaluation_developer_guide).Example:
from pydantic_evals.evaluators import ReportEvaluator from pydantic_evals.evaluators import ReportEvaluatorContext from pydantic_evals.reporting.analyses import ScalarResult from ddtrace.llmobs import LLMObs dataset = LLMObs.create_dataset( dataset_name="<DATASET_NAME>", description="<DATASET_DESCRIPTION>", records=[RECORD_1, RECORD_2, RECORD_3, ...] ) class TotalCasesEvaluator(ReportEvaluator): def evaluate(self, ctx: ReportEvaluatorContext) -> ScalarResult: return ScalarResult( title='Total Cases', value=len(ctx.report.cases), unit='cases', ) def my_task(input_data, config): return input_data["output"] equals_expected = EqualsExpected() summary_evaluator = TotalCasesEvaluator() experiment = LLMObs.experiment( name="<EXPERIMENT_NAME>", task=my_task, dataset=dataset, evaluators=[equals_expected], summary_evaluators=[summary_evaluator], description="<EXPERIMENT_DESCRIPTION>." ) result = experiment.run()
Bug Fixes
-
CI visibility: This fix resolves issues where CI provider metadata could omit pull request base branch and head commit details or report incorrect pull request values for some providers.
-
AAP: This fix resolves an issue where Application and API Protection (AAP) was incorrectly reported as an enabled product in internal telemetry for all services by default. Previously, registering remote configuration listeners caused AAP to be reported as activated even when it was not actually enabled. This had no impact on customers as it only affected internal telemetry data. AAP is now only reported as activated when it is explicitly enabled or enabled through remote configuration.
-
asgi: Fixed an issue caused network.client.ip and ht...
4.9.0rc1
Estimated end-of-life date, accurate to within three months: 10-2027
See the support level definitions for more information.
Upgrade Notes
- ray: Adds
DD_TRACE_RAY_IGNORED_ACTORSconfiguration to exclude specific Ray actor methods from instrumentation. SetDD_TRACE_RAY_IGNORED_ACTORS='{"ActorA": ["method1"], "ActorB": "*"}'to leave matching methods or actors uninstrumented while continuing to trace other Ray actor methods. Matching is based on actor class name only.
New Features
- AI Guard: When
DD_AI_GUARD_ENABLED=trueis set and anai_guardspan is created during a request, the tracer now populateshttp.client_ipandnetwork.client.ipon the service-entry (local root) span, mirroring the behavior used for Application Security. If AI Guard does not run during the request, no client IP tags are added.DD_TRACE_CLIENT_IP_ENABLEDis ignored once AI Guard reports, andDD_TRACE_CLIENT_IP_HEADERcontinues to override header resolution.
Bug Fixes
- CI Visibility: Fixes code coverage instrumentation on Python 3.13, 3.14, and 3.15. Resolves lost per-test line data caused by:
sys.monitoringcallbacks running in a snapshot context whereContextVarchanges are not visible (Python 3.14+); empty modules emitting noLINEevents (Python 3.13+); andProcessPoolExecutorchild coverage not being propagated to the parent context. Also fixes a stale-data bug where child process executable lines could inflate coverage denominators afterstop_coverage()was called beforejoin().
- django: API endpoint discovery now supports Django sub-applications mounted with
django.urls.include(...). Endpoints are reported with their full URL path including the parent prefix — for example, a view served at/api/users/is now reported as/api/users/instead of losing the/api/prefix.
- django: API endpoint discovery now reports the correct HTTP methods for views decorated with
@require_http_methodscombined with another decorator such as@csrf_exempt; the declared methods are reported instead of a generic wildcard entry.
- LLM Observability: This fix resolves an issue where running an experiment with a dataset whose records had
nullmetadata caused the summary evaluator to crash with aTypeErrorwhile preparing evaluator inputs.
- LLM Observability: Changes the default
model_nameandmodel_providerof LLM and embedding spans fromcustomtounknownif not provided or empty. This applies to both auto-instrumented spans and manual instrumentation viaLLMObs.llm()/LLMObs.embedding()and the@llm/@embeddingdecorators.
- profiling: A crash that could happen in child processes after fork has been fixed.
- profiling: A rare crash caused by the memory allocation profiler has been fixed.
- RemoteConfig: Fixed an issue where deleted remote configurations were not applied, causing stale settings to persist.
- wsgi: This fix resolves an issue where the
http.urltag on inbound request spans contained the WSGI mount prefix twice (for example/admin/admin/usersinstead of/admin/users) when the application was served behindwerkzeug.middleware.dispatcher.DispatcherMiddlewareor any other in-process mount that preserves the original request URI inRAW_URI/REQUEST_URIwhile also settingSCRIPT_NAME.
- profiling: A rare crash happening on systems with small stack sizes when profiling asyncio code has been fixed.
4.8.0rc5
Estimated end-of-life date, accurate to within three months: 05-2027
See the support level definitions for more information.
Upgrade Notes
-
claude_agent_sdk: Tool span resource names have changed from the tool name (e.g.
Read,Bash) toclaude_agent_sdk.tool. The specific tool name is still available in the span name (e.g.claude_agent_sdk.tool.Read). Users relying on tool resource names should update them accordingly. -
ray: Adds
DD_TRACE_RAY_SUBMISSION_SPANS_ENABLED(default:False) configuration to control Ray submission tracing. SetDD_TRACE_RAY_SUBMISSION_SPANS_ENABLED=trueto tracetask.submitandactor_method.submitspans. Leave it unset to trace only execution spans. See Ray integration documentation for more details. -
ray:
ray.job.submitspans are removed. Ray job submission outcome is now reported on the existingray.jobspan throughray.job.submit_status.
Deprecation Notes
-
Tracing:
DD_TRACE_INFERRED_PROXY_SERVICES_ENABLEDis deprecated and will be removed in 5.0.0. UseDD_TRACE_INFERRED_SPANS_ENABLEDinstead. The old environment variable continues to work but emits aDDTraceDeprecationWarningwhen set. -
tracing: The
pinparameter inddtrace.contrib.dbapi.TracedConnection,ddtrace.contrib.dbapi.TracedCursor, andddtrace.contrib.dbapi_async.TracedAsyncConnectionis deprecated and will be removed in version 5.0.0. To manage configuration of DB tracing please use integration configuration and environment variables. -
LLM Observability: Removes support for the RAGAS integration. As an alternative, if you have RAGAS evaluations, you can manually submit these evaluation results. See LLM Observability external evaluation documentation for more information.
New Features
-
AI Guard: Add
DD_AI_GUARD_BLOCKenvironment variable. Defaults toTrue, which means the blocking behavior configured in the Datadog AI Guard UI (in-app) will be honored. Set toFalseto force monitor-only mode locally: evaluations are still performed butAIGuardAbortErroris never raised, regardless of the in-app blocking setting. -
AI Guard response objects now include a dict field
tag_probswith the probabilities for each tag. -
CI Visibility: Adds Bazel offline execution support with two modes: manifest mode (
DD_TEST_OPTIMIZATION_MANIFEST_FILE), which reads settings and test data from pre-fetched cache files without network access; and payload-files mode (DD_TEST_OPTIMIZATION_PAYLOADS_IN_FILES), which writes test event, coverage, and telemetry payloads as JSON files instead of sending HTTP requests. Both modes can be used independently or together. -
LLM Observability: Captures individual LLM spans for each Claude model turn within a Claude Agent SDK session. Each LLM span captures the input messages, output messages, model name, and token usage metrics (for claude_agent_sdk >= 0.1.49).
-
AAP: This adds Application Security support for FastAPI and Starlette applications using mounted sub-applications (via
app.mount()). WAF evaluation, path parameter extraction, API endpoint discovery, andhttp.routereporting now correctly account for mount prefixes in sub-application routing. -
google_cloud_pubsub: This adds tracing for Google Cloud Pub/Sub admin operations on topic, subscription, snapshot, and schema management methods.
-
google_cloud_pubsub: Adds support for Google Cloud Pub/Sub push subscriptions. When a push subscription delivers a message via HTTP, the integration now creates an inferred
gcp.pubsub.receivespan that captures subscription and message metadata. UseDD_GOOGLE_CLOUD_PUBSUB_PROPAGATION_AS_SPAN_LINKSto control whether the inferred span becomes a child of the producer trace or starts a new trace with the producer context attached as a span link (default:False). -
LLM Observability: Add
ExperimentRun.as_dataframe()to convert experiment run results into apandas.DataFramewith a two-level MultiIndex on columns. Each top-level group (input,output,expected_output,evaluations,metadata,error,span_id,trace_id) maps to the first index level. Dict-valued fields are flattened one level deep; scalar fields use an empty string as the sub-column name. Each evaluator gets its own column containing the full evaluation result dict. Requirespandasto be installed (pip install pandas). -
LLM Observability: Adds an
eval_scopeparameter toLLMObs.submit_evaluation()(one of"span"(default) or"trace"). Useeval_scope="trace"to associate an evaluation with an entire trace by passing the root span context. -
LLM Observability: Adds
LLMObs.get_spans()to retrieve span events from the Datadog platform API (GET /api/v2/llm-obs/v1/spans/events). Supports filtering by trace ID, span ID, span kind, span name, ML app, tags, and time range. Results are auto-paginated. RequiresDD_API_KEYandDD_APP_KEY. -
profiling: Profiles generated from fork-based servers now include a
process_typetag with the valuemainorworker. -
tracing: Support for making the default span name for
@tracer.wrapinclude the class name has been added. For now, this is opt-in and can be enabled by settingDD_TRACE_WRAP_SPAN_NAME_INCLUDE_CLASS=true. The new naming will become the default in the next major release. -
llmobs: Adds support for enabling and disabling LLMObs via Remote Configuration.
-
mysql: This introduces tracing support for
mysql.connector.aio.connectin the MySQL integration. -
profiling: Thread sub-sampling is now supported. This allows to set a maximum number of threads to capture stacks for at each sampling interval. This can be used to reduce the CPU overhead of the Stack Profiler.
-
llama_index: Adds APM tracing and LLM Observability support for
llama-index-core>=0.11.0. Traces LLM calls, query engines, retrievers, embeddings, and agents. See the llama_index documentation for more information. -
ASM: Adds a LiteLLM proxy guardrail integration for Datadog AI Guard. The
ddtrace.appsec.ai_guard.integrations.litellm.DatadogAIGuardGuardrailclass can be registered as a custom guardrail in the LiteLLM proxy to evaluate requests and responses against AI Guard security policies. Requires the LiteLLM proxy guardrails API v2 available sincelitellm>=1.46.1. -
azure_cosmos: Add tracing support for Azure CosmosDB. This integration traces CRUD operations on CosmosDB databases, containers, and items.
-
LLM Observability: Introduces a
decoratortag to LLM Observability spans that are traced by a function decorator. -
CI Visibility: adds automatic log correlation and submission so that test logs appear alongside their corresponding test run in Datadog. Set
DD_AGENTLESS_LOG_SUBMISSION_ENABLED=truefor agentless setups, orDD_LOGS_INJECTION=truewhen using the Datadog Agent. -
tracing: Adds support for exporting traces in OTLP HTTP/JSON format via libdatadog. Set
OTEL_TRACES_EXPORTER=otlpto send spans to an OTLP endpoint instead of the Datadog Agent. -
LLM Observability: Experiments accept a
pydantic_evalsReportEvaluatoras a summary evaluator when itsevaluatereturn annotation is exactlyScalarResult. The scalarvalueis recorded as the summary evaluation. Report evaluators that declare a broader analysis return type (for example the fullReportAnalysisunion) are not accepted as summary evaluators; use a class-based or function summary evaluator instead. Examples and further documentation can found in our documentation [here](https://docs.datadoghq.com/llm_observability/guide/evaluation_developer_guide).Example:
from pydantic_evals.evaluators import ReportEvaluator from pydantic_evals.evaluators import ReportEvaluatorContext from pydantic_evals.reporting.analyses import ScalarResult from ddtrace.llmobs import LLMObs dataset = LLMObs.create_dataset( dataset_name="<DATASET_NAME>", description="<DATASET_DESCRIPTION>", records=[RECORD_1, RECORD_2, RECORD_3, ...] ) class TotalCasesEvaluator(ReportEvaluator): def evaluate(self, ctx: ReportEvaluatorContext) -> ScalarResult: return ScalarResult( title='Total Cases', value=len(ctx.report.cases), unit='cases', ) def my_task(input_data, config): return input_data["output"] equals_expected = EqualsExpected() summary_evaluator = TotalCasesEvaluator() experiment = LLMObs.experiment( name="<EXPERIMENT_NAME>", task=my_task, dataset=dataset, evaluators=[equals_expected], summary_evaluators=[summary_evaluator], description="<EXPERIMENT_DESCRIPTION>." ) result = experiment.run()
Bug Fixes
-
CI visibility: This fix resolves issues where CI provider metadata could omit pull request base branch and head commit details or report incorrect pull request values for some providers.
-
AAP: This fix resolves an issue where Application and API Protection (AAP) was incorrectly reported as an enabled product in internal telemetry for all services by default. Previously, registering remote configuration listeners caused AAP to be reported as activated even when it was not actually enabled. This had no impact on customers as it only affected internal telemetry data. AAP is now only reported as activated when it is explicitly enabled or enabled through remote configuration.
-
asgi: Fixed an issue caused network.client.ip and ht...
4.7.1
Estimated end-of-life date, accurate to within three months: 06-2027
See the support level definitions for more information.
Bug Fixes
- CI Visibility: This fix resolves an issue where a failure response from the
/search_commitsendpoint caused the git metadata upload to fall back to sending the full 30-day commit history instead of aborting. This fallback could trigger cascading write load on the backend. The upload now aborts whensearch_commitsfails, matching the behavior when the/packfileupload itself fails.
- Fixed a race condition with internal periodic threads that could have caused a rare crash when forking.
- Fixes an issue where internal background threads could cause crashes or instability in applications that fork (e.g. Gunicorn, uWSGI) or during Python shutdown. Affected applications could experience intermittent crashes or hangs on exit.
- CI Visibility: This fix resolves an issue where pytest-xdist worker crashes (
os._exit, SIGKILL, segfault) caused buffered test events to be lost. To enable eager flushing, setDD_TRACE_PARTIAL_FLUSH_MIN_SPANS=1.
4.6.8
Estimated end-of-life date, accurate to within three months: 06-2027
See the support level definitions for more information.
Bug Fixes
- CI Visibility: This fix resolves an issue where a failure response from the
/search_commitsendpoint caused the git metadata upload to fall back to sending the full 30-day commit history instead of aborting. This fallback could trigger cascading write load on the backend. The upload now aborts whensearch_commitsfails, matching the behavior when the/packfileupload itself fails.
- Fixed a race condition with internal periodic threads that could have caused a rare crash when forking.
- Fixes an issue where internal background threads could cause crashes or instability in applications that fork (e.g. Gunicorn, uWSGI) or during Python shutdown. Affected applications could experience intermittent crashes or hangs on exit.
4.5.10
Estimated end-of-life date, accurate to within three months: 06-2027
See the support level definitions for more information.
Bug Fixes
-
CI Visibility: This fix resolves an issue where a failure response from the
/search_commitsendpoint caused the git metadata upload to fall back to sending the full 30-day commit history instead of aborting. This fallback could trigger cascading write load on the backend. The upload now aborts whensearch_commitsfails, matching the behavior when the/packfileupload itself fails. -
Fixed a race condition with internal periodic threads that could have caused a rare crash when forking.