Skip to content

Internal - Split context propagator into TraceState and TraceOptions - #644

Merged
cleverchuk merged 1 commit into
mainfrom
cc/NH-151889
Oct 19, 2026
Merged

cleverchuk merged 1 commit into
mainfrom
cc/NH-151889

Conversation

@cleverchuk

Copy link
Copy Markdown
Contributor

This pull request refactors and modularizes the context propagation logic for SolarWinds OpenTelemetry extensions. It splits the previous monolithic SolarwindsContextPropagator into two focused propagators: one for handling W3C trace state (TraceStatePropagator) and one for SolarWinds-specific trace options (TraceOptionsPropagator). It also updates configuration and provider classes to support this separation, and introduces new tests and component providers for each propagator.

Context Propagation Refactoring:

  • Split the previous SolarwindsContextPropagator into two separate propagators: TraceStatePropagator (handles W3C trace state) and TraceOptionsPropagator (handles SolarWinds X-Trace-Options headers), each with its own implementation and responsibilities. (libs/shared/src/main/java/com/solarwinds/opentelemetry/extensions/TraceStatePropagator.java, libs/shared/src/main/java/com/solarwinds/opentelemetry/extensions/TraceOptionsPropagator.java) [1] [2]

  • Updated the SolarwindsContextPropagatorProvider to return a composite propagator combining TraceStatePropagator and TraceOptionsPropagator instead of the previous monolithic implementation. (libs/shared/src/main/java/com/solarwinds/opentelemetry/extensions/SolarwindsContextPropagatorProvider.java)

Configuration and Component Provider Updates:

  • Added new component providers: TraceStateComponentProvider and TraceOptionsComponentProvider, each registering their respective propagator under a new component name. (libs/shared/src/main/java/com/solarwinds/opentelemetry/extensions/config/provider/TraceStateComponentProvider.java, libs/shared/src/main/java/com/solarwinds/opentelemetry/extensions/config/provider/TraceOptionsComponentProvider.java) [1] [2]

  • Updated the YAML configuration (sdk-config.yaml) to use the new propagator component names (swo_tracestate, swo_xtraceoptions) and to explicitly list them in the composite propagator list. (custom/src/test/resources/sdk-config.yaml)

Test and Code Cleanup:

  • Renamed and refactored tests to match the new propagator classes, removing tests no longer relevant to the split responsibilities. (libs/shared/src/test/java/com/solarwinds/opentelemetry/extensions/TraceOptionsPropagatorTest.java) [1] [2]

  • Cleaned up configuration customizer logic to remove now-unnecessary context propagator handling. (libs/shared/src/main/java/com/solarwinds/opentelemetry/extensions/config/provider/SharedConfigCustomizerProvider.java) [1] [2]

Test services data

  1. e-1712644058766987264
  2. e-1712643928659124224
  3. e-1742334541200846848
  4. e-1777406072376840192

…propagators

SolarwindsContextPropagator is replaced by TraceStatePropagator (tracestate)
and TraceOptionsPropagator (X-Trace-Options and signature). The autoconfigure
provider keeps the "solarwinds" name and returns a composite of both.

Declarative config gets one component provider per propagator
(swo_tracestate, swo_xtraceoptions). The customizer no longer injects
propagators, so they must be listed explicitly in sdk-config.yaml.
Copilot AI balanced review requested due to automatic review settings October 19, 2026 14:30
@cleverchuk
cleverchuk requested review from a team as code owners October 19, 2026 14:30

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The trace-options propagator omits its injected headers from fields(), preventing consumers from reliably clearing reused carriers.

1 open issue
What changed in this PR

Splits SolarWinds context propagation into separate trace-state and trace-options components within the shared OpenTelemetry extensions.

Changes:

  • Separates propagators and registers dedicated component providers.
  • Updates YAML configurations to explicitly compose both components.
  • Reorganizes tests and removes automatic propagator configuration.
File Description
smoke-tests/​sdk-config.yaml Configures explicit propagator composition.
sdk-config.yaml Adds default propagator composition.
libs/​shared/​src/​test/​resources/​sdk-config.yaml Uses the new component names.
libs/​shared/​src/​test/​java/​com/​solarwinds/​opentelemetry/​extensions/​TraceStatePropagatorTest.java Isolates trace-state tests.
libs/​shared/​src/​test/​java/​com/​solarwinds/​opentelemetry/​extensions/​TraceOptionsPropagatorTest.java Focuses tests on trace options.
libs/​shared/​src/​test/​java/​com/​solarwinds/​opentelemetry/​extensions/​config/​provider/​TraceStateComponentProviderTest.java Tests trace-state provider registration.
libs/​shared/​src/​test/​java/​com/​solarwinds/​opentelemetry/​extensions/​config/​provider/​TraceOptionsComponentProviderTest.java Tests trace-options provider registration.
libs/​shared/​src/​test/​java/​com/​solarwinds/​opentelemetry/​extensions/​config/​provider/​SharedConfigCustomizerProviderTest.java Removes automatic propagator configuration assertions.
libs/​shared/​src/​main/​java/​com/​solarwinds/​opentelemetry/​extensions/​TraceStatePropagator.java Separates trace-state handling.
libs/​shared/​src/​main/​java/​com/​solarwinds/​opentelemetry/​extensions/​TraceOptionsPropagator.java Separates trace-options handling.
libs/​shared/​src/​main/​java/​com/​solarwinds/​opentelemetry/​extensions/​SolarwindsContextPropagatorProvider.java Returns both propagators as a composite.
libs/​shared/​src/​main/​java/​com/​solarwinds/​opentelemetry/​extensions/​config/​provider/​TraceStateComponentProvider.java Registers swo_tracestate.
libs/​shared/​src/​main/​java/​com/​solarwinds/​opentelemetry/​extensions/​config/​provider/​TraceOptionsComponentProvider.java Registers swo_xtraceoptions.
libs/​shared/​src/​main/​java/​com/​solarwinds/​opentelemetry/​extensions/​config/​provider/​SharedConfigCustomizerProvider.java Removes automatic propagator insertion.
custom/​src/​test/​resources/​sdk-config.yaml Uses the new component names.

Review effort: Balanced

@jerrytfleung jerrytfleung left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thanks!

@cleverchuk
cleverchuk merged commit b9ffb4d into main Oct 19, 2026
18 checks passed
@cleverchuk
cleverchuk deleted the cc/NH-151889 branch October 19, 2026 18:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants