v4.9.1
📦 datadog-sdkView on GitHub →
🐛 11 fixes🔧 6 symbols
Summary
This release focuses heavily on stability and memory management, fixing numerous bugs across AppSec, tracing, LLM observability, and internal components like thread handling and garbage collection. Key fixes include resolving WebSocket connection failures and memory leaks.
Migration Steps
- If using CI Visibility and requiring a custom backend API timeout, set the `DD_CIVISIBILITY_BACKEND_API_TIMEOUT_MILLIS` environment variable (value in milliseconds) instead of relying on the previous default or undocumented mechanism.
🐛 Bug Fixes
- Resolved an issue where the AppSec body-parsing hook consumed the `websocket.connect` ASGI message, preventing ASGI/FastAPI WebSocket connections from failing with HTTP 500 when AppSec was enabled.
- Fixed the default HTTP timeout for backend requests in CI Visibility from 15 seconds to 30 seconds, and introduced the `DD_CIVISIBILITY_BACKEND_API_TIMEOUT_MILLIS` environment variable to override it in milliseconds.
- Fixed a race condition in tracing where extra service names could be silently dropped from Remote Configuration `/v0.7/config` payloads in multi-threaded applications (e.g., uWSGI).
- Fixed an LLM Observability issue where `reasoning_content` was missing from streamed chat completions in OpenAI and LiteLLM integrations when an OpenAI-compatible provider emitted `delta.reasoning_content` chunks; the aggregated message now captures reasoning text.
- Fixed an issue that could cause some timers, such as the one for Symbol Database uploads, to fire repeatedly after initial execution.
- Resolved a memory leak in the internal component caused by reference cycles through `PeriodicThread` callbacks that were not collected by Python's garbage collector when threads used bound methods as targets.
- Fixed a memory leak in native frame tracking caused by unbounded growth of native call-site metadata.
- Resolved an issue in SCA where unresolved runtime reachability targets accumulated across updates, leading to growing resident memory usage.
- Fixed duplicate SQLAlchemy event listeners when `trace_engine()` is called multiple times for the same engine.
- Fixed an issue where the Symbol Database uploader sent empty payloads on a recurring timer.
- Fixed an issue that could cause pytest to crash internally when inspecting the call stack from an exception thrown by a view function when Code Origin is enabled.