-
Notifications
You must be signed in to change notification settings - Fork 85
feat(config): extensions section, capabilities bindings, and config-level validation #2538
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
jmacd
merged 6 commits into
open-telemetry:main
from
gouslu:gouslu/extension-system-pr1-config
Apr 9, 2026
Merged
Changes from 4 commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
a520a65
feat(config): extensions section, capabilities bindings, and config-l…
gouslu a2ee9bb
added CapabilityId
gouslu f7f0bd2
Resolve merge conflicts: keep both versions
gouslu f309fd6
merge main
gouslu 8f60edc
Validate extension URN kind in extensions section
gouslu 3a17f12
Merge branch 'main' into gouslu/extension-system-pr1-config
jmacd File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| version: otel_dataflow/v1 | ||
|
|
||
| policies: | ||
| channel_capacity: | ||
| control: | ||
| node: 100 | ||
| pipeline: 100 | ||
| pdata: 100 | ||
|
|
||
| engine: {} | ||
|
|
||
| groups: | ||
| default: | ||
| pipelines: | ||
| main: | ||
| extensions: | ||
| sample_kv_store: | ||
| type: "urn:otap:extension:sample_shared_key_value_store" | ||
|
|
||
| nodes: | ||
| generator: | ||
| type: "urn:otel:receiver:traffic_generator" | ||
| config: | ||
| traffic_config: | ||
| max_batch_size: 10 | ||
| signals_per_second: 10 | ||
| log_weight: 100 | ||
|
|
||
| exporter: | ||
| type: "urn:otel:exporter:noop" | ||
| capabilities: | ||
| key_value_store: "sample_kv_store" | ||
|
|
||
| connections: | ||
| - from: generator | ||
| to: exporter |
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
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
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
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This enforces one extension per capability per node. Is this intentional? The design doc doesn't state this explicitly.
If an exporter needs
header_setterfunctionality from two independent extensions (e.g., one for correlation headers, one for custom metadata headers), the only workaround would be for the user to write a custom extension that combines both. That seems like a heavy ask for what might be a common use case.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I noticed this, at some point. I feel that if there are more than one capability, we should follow the Collectr's naming convention and use names like bearer_token/left bearer_token/right if you need more than one. I figure we should tackle this when it happens.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm okay with tackling this later. However, one thing to keep in mind: the design doc states that capabilities are "known by the engine version and validated during configuration loading," and that external extensions cannot introduce new capability interfaces. This is different from the Go Collector, where any extension can expose any interface and components look them up by ID at runtime.
So
bearer_token/leftandbearer_token/rightwould each need to be pre-registered as known capabilities in the engine core. It's not purely a user naming convention like it would be in the Go Collector. Each new variant requires an engine core change, so this may not be as straightforward to address when the time comes. Just wanted to flag this so it's not overlooked.Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Depends on how you resolve them.
/leftand/rightmight just mean that there are 2 different instances and that you get provided with a map hat has both in it or something like that. What would need to be known is the capability id basically, same as today.