enhancement(api): add support for dynamic API route publishing#1179
Open
enhancement(api): add support for dynamic API route publishing#1179
Conversation
This was referenced Feb 9, 2026
Merged
Member
Author
4 tasks
Binary Size Analysis (Agent Data Plane)Target: 5316221 (baseline) vs 5d48b70 (comparison) diff
|
| Module | File Size | Symbols |
|---|---|---|
hashbrown |
-4.18 KiB | 381 |
matchit |
+3.89 KiB | 39 |
core |
-2.78 KiB | 9098 |
[Unmapped] |
+2.26 KiB | 1 |
alloc |
+2.22 KiB | 803 |
axum |
+1.07 KiB | 224 |
anyhow |
-720 B | 1299 |
agent_data_plane::cli::run |
+521 B | 82 |
saluki_config::ConfigurationError |
-384 B | 1 |
saluki_config::ConfigurationLoader::from_environment |
+360 B | 1 |
http_body_util |
+347 B | 110 |
saluki_app::metrics::RuntimeMetrics |
+331 B | 2 |
agent_data_plane::internal::remote_agent |
-251 B | 66 |
futures_util |
+208 B | 64 |
saluki_components::sources::otlp |
-200 B | 164 |
agent_data_plane::internal::control_plane |
+185 B | 32 |
saluki_env::helpers::remote_agent |
+160 B | 24 |
[sections] |
+149 B | 7 |
rustls |
+140 B | 32 |
agent_data_plane::internal::create_internal_supervisor |
+120 B | 2 |
Detailed Symbol Changes
FILE SIZE VM SIZE
-------------- --------------
[NEW] +1.79Mi [NEW] +1.79Mi std::thread::local::LocalKey<T>::with::h05bb577906fe3286
[NEW] +120Ki [NEW] +119Ki agent_data_plane::cli::run::create_topology::_{{closure}}::hd5ed6b4fd8f6c3e5
[NEW] +64.2Ki [NEW] +64.0Ki saluki_components::common::datadog::io::run_endpoint_io_loop::_{{closure}}::hd59f138ff82adaad
[NEW] +62.1Ki [NEW] +62.0Ki agent_data_plane::cli::run::handle_run_command::_{{closure}}::h747f4ac70f1f985e
[NEW] +58.8Ki [NEW] +58.6Ki _<agent_data_plane::internal::control_plane::PrivilegedApiWorker as saluki_core::runtime::supervisor::Supervisable>::initialize::_{{closure}}::h384ce618e08aac60
[NEW] +49.5Ki [NEW] +49.4Ki saluki_app::bootstrap::AppBootstrapper::bootstrap::_{{closure}}::hda2df0f2beb7408a
[NEW] +46.4Ki [NEW] +46.3Ki h2::proto::connection::Connection<T,P,B>::poll::h8dfb03a9b03245ec
[NEW] +46.2Ki [NEW] +46.0Ki _<saluki_components::destinations::prometheus::Prometheus as saluki_core::components::destinations::Destination>::run::_{{closure}}::he1b5ae9a1cde9659
[NEW] +46.2Ki [NEW] +46.0Ki _<saluki_components::forwarders::otlp::OtlpForwarder as saluki_core::components::forwarders::Forwarder>::run::_{{closure}}::h87d5f0a209a35da2
[NEW] +44.1Ki [NEW] +43.9Ki saluki_env::workload::providers::remote_agent::RemoteAgentWorkloadProvider::from_configuration::_{{closure}}::hb1b3c74b8bdba0d5
+0.0% +2.93Ki +0.0% +1.81Ki [22696 Others]
[DEL] -44.1Ki [DEL] -43.9Ki saluki_env::workload::providers::remote_agent::RemoteAgentWorkloadProvider::from_configuration::_{{closure}}::hfc80d52378eff90b
[DEL] -46.2Ki [DEL] -46.0Ki _<saluki_components::forwarders::otlp::OtlpForwarder as saluki_core::components::forwarders::Forwarder>::run::_{{closure}}::h9e6a07604104748f
[DEL] -46.2Ki [DEL] -46.0Ki _<saluki_components::destinations::prometheus::Prometheus as saluki_core::components::destinations::Destination>::run::_{{closure}}::h804b0075faebe88b
[DEL] -46.4Ki [DEL] -46.3Ki h2::proto::connection::Connection<T,P,B>::poll::hded4fb5f8a002638
[DEL] -49.6Ki [DEL] -49.4Ki saluki_app::bootstrap::AppBootstrapper::bootstrap::_{{closure}}::hd83d25f4c7e8a1ae
[DEL] -58.7Ki [DEL] -58.4Ki _<agent_data_plane::internal::control_plane::PrivilegedApiWorker as saluki_core::runtime::supervisor::Supervisable>::initialize::_{{closure}}::hf1e132bb3e8bfeaf
[DEL] -61.9Ki [DEL] -61.8Ki agent_data_plane::cli::run::handle_run_command::_{{closure}}::hbff4cb15be99fca3
[DEL] -64.2Ki [DEL] -64.1Ki saluki_components::common::datadog::io::run_endpoint_io_loop::_{{closure}}::h7847418cb5d4cb46
[DEL] -119Ki [DEL] -119Ki agent_data_plane::cli::run::create_topology::_{{closure}}::h5c132aa500e2a433
[DEL] -1.79Mi [DEL] -1.79Mi std::thread::local::LocalKey<T>::with::hddbf5b47575f6048
+0.0% +2.86Ki +0.0% +1.74Ki TOTAL
Regression Detector (Agent Data Plane)This comment was omitted because it was over 65,536 characters.Please check the Gitlab Job logs to see its output. |
64f9fcd to
93ea4b3
Compare
e8b5919 to
52f0a8a
Compare
52f0a8a to
97b3a4d
Compare
93ea4b3 to
ad002af
Compare
97b3a4d to
90a9af1
Compare
ad002af to
0aed615
Compare
90a9af1 to
8a17cac
Compare
0aed615 to
0aeee50
Compare
0aeee50 to
0b55cc8
Compare
8a17cac to
46ef9d0
Compare
bf20e01 to
79fe48c
Compare
79fe48c to
8963add
Compare
217c8d0 to
d8bbc70
Compare
8963add to
e3fbd14
Compare
Base automatically changed from
tobz/runtime-system-state-mgmt-primitives
to
main
April 9, 2026 22:19
e3fbd14 to
5bc9b1c
Compare
fc6377a to
b8b6053
Compare
andrewqian2001datadog
approved these changes
Apr 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
This PR adds support for utilizing dynamic API routes that are published via dataspaces.
Building on #1178, this PR exposes new primitives to build API servers whose routes come solely through dynamically published API routes using dataspaces, allowing processes to expose API routes without needing to do so when the application first starts up. This allows for decoupling of the API server definitions and the things which wish to expose API routes, as well as allowing for graceful removal of API routes when the underlying component is unhealthy/unavailable.
We've introduced a number of new building blocks to support this functionality:
DynamicAPIBuilder: a spiritual equivalent toAPIBuilderthat supports dynamic API routes and can be spawned directly as aSupervisableprocessDynamicRoute: the concrete type that holds the declared routes of a given component that is shared via the dataspaceEndpointType/EndpointProtocol: helper types to define which API endpoint (privileged or unprivileged) and which protocol (HTTP or gRPC) a set of dynamic API routes should be attached toChange Type
How did you test this PR?
Added new unit tests that ensure
DynamicAPIBuilderresponds to route assertions/retractions in the expected fashion.References
AGTMETRICS-400