Skip to content

WIF-48: wire credential providers into forwarder, trace, and logs - #55480

Draft
wynbennett wants to merge 14 commits into
wyn.bennett/wif-credential-provider-foundationfrom
wyn.bennett/wif-credential-provider-consumers
Draft

WIF-48: wire credential providers into forwarder, trace, and logs#55480
wynbennett wants to merge 14 commits into
wyn.bennett/wif-credential-provider-foundationfrom
wyn.bennett/wif-credential-provider-consumers

Conversation

@wynbennett

@wynbennett wynbennett commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Summary

This PR wires the credential Provider interface from PR #55479 into the three data-plane consumers: the core agent forwarder, the APM trace writers, and the logs agent. Each consumer discovers the providers registered for its endpoints and calls Authorize on every outbound request — buffering payloads while a credential is still resolving, then sending once it is available.

Data flow

                         Credential Provider
                                 │
                                 ▼
                    ┌────────────────────────┐
                    │   delegatedauth        │
                    │   Resolve() → cred     │
                    └──────────┬─────────────┘
                               │
           ┌───────────────────┼───────────────────┐
           ▼                   ▼                   ▼
   ┌──────────────┐    ┌──────────────┐    ┌──────────────┐
   │  Forwarder   │    │  Trace       │    │  Logs        │
   │  buffer      │    │  Writers     │    │  Agent       │
   │  until       │    │  hold        │    │  per-endpoint│
   │  resolved    │    │  payloads    │    │  credential  │
   └──────┬───────┘    └──────┬───────┘    └──────┬───────┘
          ▼                   ▼                   ▼
       HTTP DD            HTTP DD              HTTP/TCP DD

Forwarder (metrics, events, service checks)

The forwarder resolver (domain_resolver.go) calls ProvidersFor to discover credential providers for each endpoint domain. Transactions carry the resolved credential context through to the HTTP transaction serializer, which stamps the DD-Api-Key header via Authorize before sending. If no provider is available for an endpoint, the forwarder falls back to the configured static API key, so existing behavior is unchanged for endpoints without a DELA directive. A new credential_backpressure_test.go verifies that the forwarder buffers transactions until the provider resolves.

Trace writers (traces, APM stats)

The trace agent (comp/trace/agent/impl/agent.go) receives the delegated auth component and passes it through to the trace writers. The sender (pkg/trace/writer/sender.go) resolves credentials per endpoint before forwarding, holding payloads in a buffer until the provider reports a usable credential. Pipeline stats (pkg/trace/api/pipeline_stats.go) skips delegated-auth endpoints entirely, since that proxy path has no provider wiring and would otherwise forward with an empty API key. A new credential_provider_test.go covers the buffering and resolution lifecycle.

Logs agent (logs HTTP destination)

The logs config (comp/logs/agent/config/endpoints.go) partitions additional endpoints into real API keys and pending (DELA directive) keys, associating each directive with its credential provider. The logs agent impl (comp/logs/agent/impl/agent.go) receives the delegated auth component and passes it through to the HTTP destination (comp/logs-library/client/http/destination.go), which calls Authorize on each request. The serverless init path was updated to avoid leaking the directive on the wire for TCP connections. New config_keys.go entries expose the credential provider settings.

go.mod changes

  • comp/forwarder/defaultforwarder/go.mod: delegatedauth moved from indirect to direct require.
  • comp/logs/agent/config/go.mod: delegatedauth and pkg/config/mock moved from indirect to direct require.

Architecture doc

See Delegated Authentication in the Agent: Architecture and Path Forward for the full design, including the previous approach vs. the new Provider interface, locking, and future work.

Stacked PRs

PR1: #55479  foundation (base: main)
 │
 └──► PR2: #55480  consumers (this PR, base: PR1)
       │
       └──► PR3: #55481  otel wiring (base: this PR)

WIF-48

@wynbennett
wynbennett requested review from a team as code owners August 26, 2026 19:50
@github-actions github-actions Bot added the long review PR is complex, plan time to review it label Aug 26, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6259bb758b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +401 to +402
if errors.Is(err, ErrCredentialNotReady) {
return err

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Delay completion when requeuing credential waits

When a provider credential is unavailable for a non-retryable transaction, such as SubmitRTContainerChecks, this new return sends the transaction back to Worker.process for requeueing even though Process has already invoked CompletionHandler because Retryable is false. The caller therefore receives a failed completion immediately, and the same transaction can later invoke the handler again and send stale data after the credential arrives. If this sentinel is returned for requeueing, suppress completion until the transaction actually finishes.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in commit cc694e6. The ErrCredentialNotReady check now runs before the completion handler, so CompletionHandler is suppressed for credential-wait requeues. It will only fire when the retried transaction actually finishes (success or real failure).

Comment on lines +363 to +365
if s.awaitingCredential.Load() {
_ = s.statsd.Count("datadog.trace_agent.sender.payload_dropped_awaiting_credential", 1, nil, 1)
return

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Release payloads dropped while awaiting credentials

When a delegated-auth sender's queue is full, this path abandons p without returning it to ppool or recording an eventTypeDropped event through the writer recorder. While a credential remains unavailable, every subsequent trace or stats flush hitting the full queue therefore allocates and discards another potentially large buffer, increasing GC pressure while the trace-writer status telemetry underreports the loss. Perform the normal drop bookkeeping and return the payload to the pool without underflowing inflight.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in commit cc694e6. The drop path now calls recordEvent(eventTypeDropped, ...) and returns the payload to ppool, matching the normal drop bookkeeping. This fixes both the GC pressure from leaked buffers and the telemetry underreporting.

@wynbennett
wynbennett marked this pull request as draft August 26, 2026 19:55
@wynbennett
wynbennett changed the base branch from main to wyn.bennett/wif-credential-provider-foundation August 26, 2026 20:58
@wynbennett
wynbennett force-pushed the wyn.bennett/wif-credential-provider-consumers branch from 6259bb7 to 1c70b30 Compare August 26, 2026 20:58
@dd-octo-sts

dd-octo-sts Bot commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Go Package Import Differences

Baseline: d725d90
Comparison: 35d25a7

binaryosarchchange
agentlinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
agentlinuxarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
agentwindowsamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
agentdarwinamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
agentdarwinarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
agentaixppc64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
iot-agentlinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
iot-agentlinuxarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
heroku-agentlinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
cluster-agentlinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
cluster-agentlinuxarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
cluster-agent-cloudfoundrylinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
cluster-agent-cloudfoundrylinuxarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
dogstatsdlinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
dogstatsdlinuxarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
process-agentlinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
process-agentlinuxarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
process-agentwindowsamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
process-agentdarwinamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
process-agentdarwinarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
heroku-process-agentlinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
security-agentlinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
security-agentlinuxarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
security-agentwindowsamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
sbomgenlinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
sbomgenlinuxarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
system-probelinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
system-probelinuxarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
system-probewindowsamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
system-probedarwinamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
system-probedarwinarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
trace-agentlinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
trace-agentlinuxarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
trace-agentwindowsamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
trace-agentdarwinamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
trace-agentdarwinarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
trace-agentaixppc64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
heroku-trace-agentlinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
otel-agentlinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
otel-agentlinuxarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
host-profilerlinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
host-profilerlinuxarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
loaderlinuxamd64
+56, -0
+compress/flate
+compress/gzip
+crypto
+crypto/aes
+crypto/cipher
+crypto/des
+crypto/dsa
+crypto/ecdh
+crypto/ecdsa
+crypto/ed25519
+crypto/elliptic
+crypto/fips140
+crypto/hkdf
+crypto/hmac
+crypto/hpke
+crypto/md5
+crypto/mlkem
+crypto/rand
+crypto/rc4
+crypto/rsa
+crypto/sha1
+crypto/sha256
+crypto/sha3
+crypto/sha512
+crypto/subtle
+crypto/tls
+crypto/x509
+crypto/x509/pkix
+encoding/asn1
+encoding/hex
+encoding/pem
+github.com/DataDog/datadog-agent/pkg/credential
+hash/crc32
+math/big
+math/rand
+math/rand/v2
+mime
+mime/multipart
+mime/quotedprintable
+net/http
+net/http/httptrace
+net/http/internal
+net/textproto
+vendor/golang.org/x/crypto/chacha20
+vendor/golang.org/x/crypto/chacha20poly1305
+vendor/golang.org/x/crypto/cryptobyte
+vendor/golang.org/x/crypto/cryptobyte/asn1
+vendor/golang.org/x/net/http/httpguts
+vendor/golang.org/x/net/http/httpproxy
+vendor/golang.org/x/net/http2/hpack
+vendor/golang.org/x/net/idna
+vendor/golang.org/x/sys/cpu
+vendor/golang.org/x/text/secure/bidirule
+vendor/golang.org/x/text/transform
+vendor/golang.org/x/text/unicode/bidi
+vendor/golang.org/x/text/unicode/norm
loaderlinuxarm64
+55, -0
+compress/flate
+compress/gzip
+crypto
+crypto/aes
+crypto/cipher
+crypto/des
+crypto/dsa
+crypto/ecdh
+crypto/ecdsa
+crypto/ed25519
+crypto/elliptic
+crypto/fips140
+crypto/hkdf
+crypto/hmac
+crypto/hpke
+crypto/md5
+crypto/mlkem
+crypto/rand
+crypto/rc4
+crypto/rsa
+crypto/sha1
+crypto/sha256
+crypto/sha3
+crypto/sha512
+crypto/subtle
+crypto/tls
+crypto/x509
+crypto/x509/pkix
+encoding/asn1
+encoding/hex
+encoding/pem
+github.com/DataDog/datadog-agent/pkg/credential
+hash/crc32
+math/big
+math/rand
+math/rand/v2
+mime
+mime/multipart
+mime/quotedprintable
+net/http
+net/http/httptrace
+net/http/internal
+net/textproto
+vendor/golang.org/x/crypto/chacha20
+vendor/golang.org/x/crypto/chacha20poly1305
+vendor/golang.org/x/crypto/cryptobyte
+vendor/golang.org/x/crypto/cryptobyte/asn1
+vendor/golang.org/x/net/http/httpguts
+vendor/golang.org/x/net/http/httpproxy
+vendor/golang.org/x/net/http2/hpack
+vendor/golang.org/x/net/idna
+vendor/golang.org/x/text/secure/bidirule
+vendor/golang.org/x/text/transform
+vendor/golang.org/x/text/unicode/bidi
+vendor/golang.org/x/text/unicode/norm
loaderdarwinamd64
+56, -0
+compress/flate
+compress/gzip
+crypto
+crypto/aes
+crypto/cipher
+crypto/des
+crypto/dsa
+crypto/ecdh
+crypto/ecdsa
+crypto/ed25519
+crypto/elliptic
+crypto/fips140
+crypto/hkdf
+crypto/hmac
+crypto/hpke
+crypto/md5
+crypto/mlkem
+crypto/rand
+crypto/rc4
+crypto/rsa
+crypto/sha1
+crypto/sha256
+crypto/sha3
+crypto/sha512
+crypto/subtle
+crypto/tls
+crypto/x509
+crypto/x509/pkix
+encoding/asn1
+encoding/hex
+encoding/pem
+github.com/DataDog/datadog-agent/pkg/credential
+hash/crc32
+math/big
+math/rand
+math/rand/v2
+mime
+mime/multipart
+mime/quotedprintable
+net/http
+net/http/httptrace
+net/http/internal
+net/textproto
+vendor/golang.org/x/crypto/chacha20
+vendor/golang.org/x/crypto/chacha20poly1305
+vendor/golang.org/x/crypto/cryptobyte
+vendor/golang.org/x/crypto/cryptobyte/asn1
+vendor/golang.org/x/net/http/httpguts
+vendor/golang.org/x/net/http/httpproxy
+vendor/golang.org/x/net/http2/hpack
+vendor/golang.org/x/net/idna
+vendor/golang.org/x/sys/cpu
+vendor/golang.org/x/text/secure/bidirule
+vendor/golang.org/x/text/transform
+vendor/golang.org/x/text/unicode/bidi
+vendor/golang.org/x/text/unicode/norm
loaderdarwinarm64
+55, -0
+compress/flate
+compress/gzip
+crypto
+crypto/aes
+crypto/cipher
+crypto/des
+crypto/dsa
+crypto/ecdh
+crypto/ecdsa
+crypto/ed25519
+crypto/elliptic
+crypto/fips140
+crypto/hkdf
+crypto/hmac
+crypto/hpke
+crypto/md5
+crypto/mlkem
+crypto/rand
+crypto/rc4
+crypto/rsa
+crypto/sha1
+crypto/sha256
+crypto/sha3
+crypto/sha512
+crypto/subtle
+crypto/tls
+crypto/x509
+crypto/x509/pkix
+encoding/asn1
+encoding/hex
+encoding/pem
+github.com/DataDog/datadog-agent/pkg/credential
+hash/crc32
+math/big
+math/rand
+math/rand/v2
+mime
+mime/multipart
+mime/quotedprintable
+net/http
+net/http/httptrace
+net/http/internal
+net/textproto
+vendor/golang.org/x/crypto/chacha20
+vendor/golang.org/x/crypto/chacha20poly1305
+vendor/golang.org/x/crypto/cryptobyte
+vendor/golang.org/x/crypto/cryptobyte/asn1
+vendor/golang.org/x/net/http/httpguts
+vendor/golang.org/x/net/http/httpproxy
+vendor/golang.org/x/net/http2/hpack
+vendor/golang.org/x/net/idna
+vendor/golang.org/x/text/secure/bidirule
+vendor/golang.org/x/text/transform
+vendor/golang.org/x/text/unicode/bidi
+vendor/golang.org/x/text/unicode/norm
installerlinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
installerlinuxarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
installerwindowsamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
privateactionrunnerlinuxamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
privateactionrunnerlinuxarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
privateactionrunnerwindowsamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
privateactionrunnerdarwinamd64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential
privateactionrunnerdarwinarm64
+1, -0
+github.com/DataDog/datadog-agent/pkg/credential

wynbennett added a commit that referenced this pull request Aug 27, 2026
Fix two findings from the Codex/Autotest review:

1. (P2) Delay completion when requeuing credential waits
   For a non-retryable transaction with ErrCredentialNotReady, the
   CompletionHandler was called before the requeue, and again when the
   retried transaction finished. Now the credential-not-ready check runs
   before the completion handler, so completion is suppressed until the
   transaction actually finishes.

2. (P2) Release payloads dropped while awaiting credentials
   When a delegated-auth sender's queue was full, the payload was
   abandoned without returning it to ppool or recording an
   eventTypeDropped event. Now the drop bookkeeping runs and the payload
   is returned to the pool, reducing GC pressure and fixing telemetry
   underreporting.
wynbennett added a commit that referenced this pull request Aug 27, 2026
Fix two findings from the Codex/Autotest review:

1. (P2) Delay completion when requeuing credential waits
   For a non-retryable transaction with ErrCredentialNotReady, the
   CompletionHandler was called before the requeue, and again when the
   retried transaction finished. Now the credential-not-ready check runs
   before the completion handler, so completion is suppressed until the
   transaction actually finishes.

2. (P2) Release payloads dropped while awaiting credentials
   When a delegated-auth sender's queue was full, the payload was
   abandoned without returning it to ppool or recording an
   eventTypeDropped event. Now the drop bookkeeping runs and the payload
   is returned to the pool, reducing GC pressure and fixing telemetry
   underreporting.
@datadog-prod-us1-4

This comment has been minimized.

@dd-octo-sts

dd-octo-sts Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Files inventory check summary

File checks results against ancestor c35c49a9:

Results for datadog-agent_7.84.0~devel.git.604.9b9a9e2.pipeline.134054590-1_amd64.deb:

Detected file changes:

1 Changed files:

  • opt/datadog-agent/embedded/bin/trace-loader:
    • Size changed: +24.26% (1.16 MiB) (4.77 MiB -> 5.93 MiB)

Results for datadog-iot-agent_7.84.0~devel.git.604.9b9a9e2.pipeline.134054590-1_amd64.deb:

No change detected

@dd-octo-sts

dd-octo-sts Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Static quality checks

❌ Please find below the results from static quality gates
Comparison made with ancestor d725d90
📊 Static Quality Gates Dashboard
🔗 SQG Job
SOME SIZE DELTAS ARE N/A (ANCESTOR METRICS NOT YET AVAILABLE). RETRY JOB

Error

Quality gate Change Size (prev → curr → max)
agent_rpm_arm64 (on disk) N/A N/A → 739.359 → 738.950
agent_rpm_arm64_fips (on disk) N/A N/A → 695.019 → 694.790
agent_suse_arm64 (on disk) N/A N/A → 739.359 → 738.950
agent_suse_arm64_fips (on disk) N/A N/A → 695.019 → 694.790
docker_agent_amd64 (on disk) N/A N/A → 822.705 → 822.100
docker_agent_arm64 (on disk) N/A N/A → 823.427 → 823.020
docker_agent_jmx_amd64 (on disk) N/A N/A → 1013.618 → 1013.020
docker_agent_jmx_arm64 (on disk) N/A N/A → 1003.119 → 1002.710
Gate failure full details
Quality gate Error type Error message
agent_rpm_arm64 AbsoluteLimitExceeded static_quality_gate_agent_rpm_arm64 failed!
Disk size 739.4 MB exceeds limit of 738.9 MB by 418.6 KB
agent_rpm_arm64_fips AbsoluteLimitExceeded static_quality_gate_agent_rpm_arm64_fips failed!
Disk size 695.0 MB exceeds limit of 694.8 MB by 234.9 KB
agent_suse_arm64 AbsoluteLimitExceeded static_quality_gate_agent_suse_arm64 failed!
Disk size 739.4 MB exceeds limit of 738.9 MB by 418.6 KB
agent_suse_arm64_fips AbsoluteLimitExceeded static_quality_gate_agent_suse_arm64_fips failed!
Disk size 695.0 MB exceeds limit of 694.8 MB by 234.9 KB
docker_agent_amd64 AbsoluteLimitExceeded static_quality_gate_docker_agent_amd64 failed!
Disk size 822.7 MB exceeds limit of 822.1 MB by 619.9 KB
docker_agent_arm64 AbsoluteLimitExceeded static_quality_gate_docker_agent_arm64 failed!
Disk size 823.4 MB exceeds limit of 823.0 MB by 416.9 KB
docker_agent_jmx_amd64 AbsoluteLimitExceeded static_quality_gate_docker_agent_jmx_amd64 failed!
Disk size 1013.6 MB exceeds limit of 1013.0 MB by 612.1 KB
docker_agent_jmx_arm64 AbsoluteLimitExceeded static_quality_gate_docker_agent_jmx_arm64 failed!
Disk size 1003.1 MB exceeds limit of 1002.7 MB by 419.1 KB

Static quality gate failures prevent this PR from merging!
You can check the static quality gates runbooks page for guidance and tools. Please either fix the size violation or request an exception.

Successful checks

Info

Quality gate Change Size (prev → curr → max)
agent_deb_amd64 N/A N/A → 763.725 → 765.300
agent_deb_amd64_fips N/A N/A → 715.981 → 716.540
agent_heroku_amd64 N/A N/A → 313.592 → 319.540
agent_msi N/A N/A → 648.709 → 661.050
agent_rpm_amd64 N/A N/A → 763.708 → 765.270
agent_rpm_amd64_fips N/A N/A → 715.965 → 716.540
agent_suse_amd64 N/A N/A → 763.708 → 765.270
agent_suse_amd64_fips N/A N/A → 715.965 → 716.540
docker_cluster_agent_amd64 N/A N/A → 211.313 → 212.130
docker_cluster_agent_arm64 N/A N/A → 224.461 → 225.220
docker_cws_instrumentation_amd64 N/A N/A → 7.439 → 8.400
docker_cws_instrumentation_arm64 N/A N/A → 6.877 → 7.110
docker_dogstatsd_amd64 N/A N/A → 39.593 → 40.440
docker_dogstatsd_arm64 N/A N/A → 37.686 → 38.580
docker_host_profiler_amd64 N/A N/A → 306.904 → 317.700
docker_host_profiler_arm64 N/A N/A → 318.178 → 328.970
dogstatsd_deb_amd64 N/A N/A → 30.334 → 31.210
dogstatsd_deb_arm64 N/A N/A → 28.342 → 29.590
dogstatsd_rpm_amd64 N/A N/A → 30.334 → 31.210
dogstatsd_suse_amd64 N/A N/A → 30.334 → 31.210
iot_agent_deb_amd64 N/A N/A → 46.623 → 47.550
iot_agent_deb_arm64 N/A N/A → 43.259 → 44.220
iot_agent_deb_armhf N/A N/A → 44.066 → 45.020
iot_agent_rpm_amd64 N/A N/A → 46.623 → 47.550
iot_agent_suse_amd64 N/A N/A → 46.622 → 47.550

@cit-pr-commenter-54b7da

cit-pr-commenter-54b7da Bot commented Aug 27, 2026

Copy link
Copy Markdown

Regression Detector

Regression Detector Results

Metrics dashboard
Target profiles
Job ID: 5e3c7b1a-97ef-4f02-aada-8c6e9bfa27f0

Baseline: d725d90
Comparison: 35d25a7
Diff

Optimization Goals: ✅ No significant changes detected

Fine details of change detection per experiment

perf experiment goal Δ mean % Δ mean % CI trials links
dsd_uds_10mb_3k_timestamped_contexts_memory memory utilization +1.30 [+1.09, +1.50] 1 Logs
quality_gate_private_action_runner memory utilization +0.80 [+0.68, +0.91] 1 Logs bounds checks dashboard
quality_gate_idle memory utilization +0.68 [+0.64, +0.72] 1 Logs bounds checks dashboard
quality_gate_security_mean_fs_load memory utilization +0.60 [+0.57, +0.64] 1 Logs bounds checks dashboard
dsd_uds_10mb_3k_timestamped_contexts_cpu % cpu utilization +0.60 [+0.36, +0.84] 1 Logs
quality_gate_security_idle memory utilization +0.43 [+0.38, +0.49] 1 Logs bounds checks dashboard
quality_gate_security_no_fs_load memory utilization +0.42 [+0.35, +0.50] 1 Logs bounds checks dashboard
quality_gate_idle_all_features memory utilization +0.26 [+0.23, +0.30] 1 Logs bounds checks dashboard
quality_gate_metrics_logs memory utilization -0.39 [-0.62, -0.17] 1 Logs bounds checks dashboard
quality_gate_logs % cpu utilization -1.61 [-2.48, -0.73] 1 Logs bounds checks dashboard

Bounds Checks: ✅ Passed

perf experiment bounds_check_name replicates_passed observed_value links
quality_gate_idle intake_connections 10/10 4 = 4 bounds checks dashboard
quality_gate_idle memory_usage 10/10 173.03MiB ≤ 179MiB bounds checks dashboard
quality_gate_idle total_bytes_received 10/10 751.30KiB ≤ 819.20KiB bounds checks dashboard
quality_gate_idle_all_features intake_connections 10/10 4 = 4 bounds checks dashboard
quality_gate_idle_all_features memory_usage 10/10 526.42MiB ≤ 537MiB bounds checks dashboard
quality_gate_idle_all_features total_bytes_received 10/10 1.15MiB ≤ 1.25MiB bounds checks dashboard
quality_gate_logs intake_connections 10/10 19 ≤ 40 bounds checks dashboard
quality_gate_logs memory_usage 10/10 215.07MiB ≤ 228MiB bounds checks dashboard
quality_gate_logs missed_bytes 10/10 0B = 0B bounds checks dashboard
quality_gate_logs total_bytes_received 10/10 263.50MiB ≤ 292MiB bounds checks dashboard
quality_gate_metrics_logs cpu_usage 10/10 376.98 ≤ 2000 bounds checks dashboard
quality_gate_metrics_logs intake_connections 10/10 21 ≤ 40 bounds checks dashboard
quality_gate_metrics_logs memory_usage 10/10 394.36MiB ≤ 455MiB bounds checks dashboard
quality_gate_metrics_logs missed_bytes 10/10 0B = 0B bounds checks dashboard
quality_gate_metrics_logs total_bytes_received 10/10 0.94GiB ≤ 1.04GiB bounds checks dashboard
quality_gate_private_action_runner memory_usage 10/10 72.79MiB ≤ 75MiB bounds checks dashboard
quality_gate_security_idle cpu_usage 10/10 28.92 ≤ 100 bounds checks dashboard
quality_gate_security_idle memory_usage 10/10 329.22MiB ≤ 355MiB bounds checks dashboard
quality_gate_security_mean_fs_load cpu_usage 10/10 61.28 ≤ 200 bounds checks dashboard
quality_gate_security_mean_fs_load memory_usage 10/10 307.59MiB ≤ 335MiB bounds checks dashboard
quality_gate_security_no_fs_load cpu_usage 10/10 23.15 ≤ 100 bounds checks dashboard
quality_gate_security_no_fs_load memory_usage 10/10 310.81MiB ≤ 345MiB bounds checks dashboard

Explanation

Confidence level: 90.00%
Effect size tolerance: |Δ mean %| ≥ 5.00%

Performance changes are noted in the perf column of each table:

  • ✅ = significantly better comparison variant performance
  • ❌ = significantly worse comparison variant performance
  • ➖ = no significant change in performance

A regression test is an A/B test of target performance in a repeatable rig, where "performance" is measured as "comparison variant minus baseline variant" for an optimization goal (e.g., ingress throughput). Due to intrinsic variability in measuring that goal, we can only estimate its mean value for each experiment; we report uncertainty in that value as a 90.00% confidence interval denoted "Δ mean % CI".

For each experiment, we decide whether a change in performance is a "regression" -- a change worth investigating further -- if all of the following criteria are true:

  1. Its estimated |Δ mean %| ≥ 5.00%, indicating the change is big enough to merit a closer look.

  2. Its 90.00% confidence interval "Δ mean % CI" does not contain zero, indicating that if our statistical model is accurate, there is at least a 90.00% chance there is a difference in performance between baseline and comparison variants.

  3. Its configuration does not mark it "erratic".

CI Pass/Fail Decision

Passed. All Quality Gates passed.

  • quality_gate_idle_all_features, bounds check total_bytes_received: 10/10 replicas passed. Gate passed.
  • quality_gate_idle_all_features, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_idle_all_features, bounds check intake_connections: 10/10 replicas passed. Gate passed.
  • quality_gate_security_mean_fs_load, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_security_mean_fs_load, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_logs, bounds check total_bytes_received: 10/10 replicas passed. Gate passed.
  • quality_gate_logs, bounds check intake_connections: 10/10 replicas passed. Gate passed.
  • quality_gate_logs, bounds check missed_bytes: 10/10 replicas passed. Gate passed.
  • quality_gate_logs, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_metrics_logs, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_metrics_logs, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_metrics_logs, bounds check missed_bytes: 10/10 replicas passed. Gate passed.
  • quality_gate_metrics_logs, bounds check total_bytes_received: 10/10 replicas passed. Gate passed.
  • quality_gate_metrics_logs, bounds check intake_connections: 10/10 replicas passed. Gate passed.
  • quality_gate_security_idle, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_security_idle, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_private_action_runner, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_idle, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_idle, bounds check total_bytes_received: 10/10 replicas passed. Gate passed.
  • quality_gate_idle, bounds check intake_connections: 10/10 replicas passed. Gate passed.
  • quality_gate_security_no_fs_load, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_security_no_fs_load, bounds check cpu_usage: 10/10 replicas passed. Gate passed.

wynbennett added a commit that referenced this pull request Aug 28, 2026
…rders

Process and orchestrator forwarders create their own resolvers via
NewSingleDomainResolvers, which don't go through the main forwarder's
provider-wired resolver. This PR threads delegatedauth.Component into
both forwarders and calls ProvidersFor + SetCredentialProviders on
their resolvers, matching the pattern from PR #55480.

Process: comp/process/forwarders/impl/forwarders.go
Orchestrator: comp/forwarder/orchestrator/impl/forwarder_orchestrator.go
wynbennett added a commit that referenced this pull request Aug 28, 2026
Fix two findings from the Codex/Autotest review:

1. (P2) Delay completion when requeuing credential waits
   For a non-retryable transaction with ErrCredentialNotReady, the
   CompletionHandler was called before the requeue, and again when the
   retried transaction finished. Now the credential-not-ready check runs
   before the completion handler, so completion is suppressed until the
   transaction actually finishes.

2. (P2) Release payloads dropped while awaiting credentials
   When a delegated-auth sender's queue was full, the payload was
   abandoned without returning it to ppool or recording an
   eventTypeDropped event. Now the drop bookkeeping runs and the payload
   is returned to the pool, reducing GC pressure and fixing telemetry
   underreporting.
@wynbennett
wynbennett force-pushed the wyn.bennett/wif-credential-provider-consumers branch from da969c8 to 515bae2 Compare August 28, 2026 04:35
wynbennett added a commit that referenced this pull request Aug 28, 2026
…rders

Process and orchestrator forwarders create their own resolvers via
NewSingleDomainResolvers, which don't go through the main forwarder's
provider-wired resolver. This PR threads delegatedauth.Component into
both forwarders and calls ProvidersFor + SetCredentialProviders on
their resolvers, matching the pattern from PR #55480.

Process: comp/process/forwarders/impl/forwarders.go
Orchestrator: comp/forwarder/orchestrator/impl/forwarder_orchestrator.go
wynbennett added a commit that referenced this pull request Aug 28, 2026
Fix two findings from the Codex/Autotest review:

1. (P2) Delay completion when requeuing credential waits
   For a non-retryable transaction with ErrCredentialNotReady, the
   CompletionHandler was called before the requeue, and again when the
   retried transaction finished. Now the credential-not-ready check runs
   before the completion handler, so completion is suppressed until the
   transaction actually finishes.

2. (P2) Release payloads dropped while awaiting credentials
   When a delegated-auth sender's queue was full, the payload was
   abandoned without returning it to ppool or recording an
   eventTypeDropped event. Now the drop bookkeeping runs and the payload
   is returned to the pool, reducing GC pressure and fixing telemetry
   underreporting.
@wynbennett
wynbennett force-pushed the wyn.bennett/wif-credential-provider-consumers branch from 515bae2 to 20afbc1 Compare August 28, 2026 04:41
wynbennett added a commit that referenced this pull request Aug 28, 2026
…rders

Process and orchestrator forwarders create their own resolvers via
NewSingleDomainResolvers, which don't go through the main forwarder's
provider-wired resolver. This PR threads delegatedauth.Component into
both forwarders and calls ProvidersFor + SetCredentialProviders on
their resolvers, matching the pattern from PR #55480.

Process: comp/process/forwarders/impl/forwarders.go
Orchestrator: comp/forwarder/orchestrator/impl/forwarder_orchestrator.go
wynbennett added a commit that referenced this pull request Aug 28, 2026
Fix two findings from the Codex/Autotest review:

1. (P2) Delay completion when requeuing credential waits
   For a non-retryable transaction with ErrCredentialNotReady, the
   CompletionHandler was called before the requeue, and again when the
   retried transaction finished. Now the credential-not-ready check runs
   before the completion handler, so completion is suppressed until the
   transaction actually finishes.

2. (P2) Release payloads dropped while awaiting credentials
   When a delegated-auth sender's queue was full, the payload was
   abandoned without returning it to ppool or recording an
   eventTypeDropped event. Now the drop bookkeeping runs and the payload
   is returned to the pool, reducing GC pressure and fixing telemetry
   underreporting.
wynbennett added a commit that referenced this pull request Aug 31, 2026
Fix two findings from the Codex/Autotest review:

1. (P2) Delay completion when requeuing credential waits
   For a non-retryable transaction with ErrCredentialNotReady, the
   CompletionHandler was called before the requeue, and again when the
   retried transaction finished. Now the credential-not-ready check runs
   before the completion handler, so completion is suppressed until the
   transaction actually finishes.

2. (P2) Release payloads dropped while awaiting credentials
   When a delegated-auth sender's queue was full, the payload was
   abandoned without returning it to ppool or recording an
   eventTypeDropped event. Now the drop bookkeeping runs and the payload
   is returned to the pool, reducing GC pressure and fixing telemetry
   underreporting.
@wynbennett
wynbennett force-pushed the wyn.bennett/wif-credential-provider-consumers branch from 9b9a9e2 to 9d1ca50 Compare August 31, 2026 14:35
wynbennett added a commit that referenced this pull request Aug 31, 2026
…rders

Process and orchestrator forwarders create their own resolvers via
NewSingleDomainResolvers, which don't go through the main forwarder's
provider-wired resolver. This PR threads delegatedauth.Component into
both forwarders and calls ProvidersFor + SetCredentialProviders on
their resolvers, matching the pattern from PR #55480.

Process: comp/process/forwarders/impl/forwarders.go
Orchestrator: comp/forwarder/orchestrator/impl/forwarder_orchestrator.go
wynbennett added a commit that referenced this pull request Aug 31, 2026
Fix two findings from the Codex/Autotest review:

1. (P2) Delay completion when requeuing credential waits
   For a non-retryable transaction with ErrCredentialNotReady, the
   CompletionHandler was called before the requeue, and again when the
   retried transaction finished. Now the credential-not-ready check runs
   before the completion handler, so completion is suppressed until the
   transaction actually finishes.

2. (P2) Release payloads dropped while awaiting credentials
   When a delegated-auth sender's queue was full, the payload was
   abandoned without returning it to ppool or recording an
   eventTypeDropped event. Now the drop bookkeeping runs and the payload
   is returned to the pool, reducing GC pressure and fixing telemetry
   underreporting.
@wynbennett
wynbennett force-pushed the wyn.bennett/wif-credential-provider-consumers branch from 9d1ca50 to afb8e42 Compare August 31, 2026 15:16
wynbennett added a commit that referenced this pull request Aug 31, 2026
…rders

Process and orchestrator forwarders create their own resolvers via
NewSingleDomainResolvers, which don't go through the main forwarder's
provider-wired resolver. This PR threads delegatedauth.Component into
both forwarders and calls ProvidersFor + SetCredentialProviders on
their resolvers, matching the pattern from PR #55480.

Process: comp/process/forwarders/impl/forwarders.go
Orchestrator: comp/forwarder/orchestrator/impl/forwarder_orchestrator.go
wynbennett added a commit that referenced this pull request Aug 31, 2026
Fix two findings from the Codex/Autotest review:

1. (P2) Delay completion when requeuing credential waits
   For a non-retryable transaction with ErrCredentialNotReady, the
   CompletionHandler was called before the requeue, and again when the
   retried transaction finished. Now the credential-not-ready check runs
   before the completion handler, so completion is suppressed until the
   transaction actually finishes.

2. (P2) Release payloads dropped while awaiting credentials
   When a delegated-auth sender's queue was full, the payload was
   abandoned without returning it to ppool or recording an
   eventTypeDropped event. Now the drop bookkeeping runs and the payload
   is returned to the pool, reducing GC pressure and fixing telemetry
   underreporting.
@wynbennett
wynbennett force-pushed the wyn.bennett/wif-credential-provider-consumers branch from afb8e42 to 44acba4 Compare August 31, 2026 15:37
wynbennett added a commit that referenced this pull request Aug 31, 2026
…rders

Process and orchestrator forwarders create their own resolvers via
NewSingleDomainResolvers, which don't go through the main forwarder's
provider-wired resolver. This PR threads delegatedauth.Component into
both forwarders and calls ProvidersFor + SetCredentialProviders on
their resolvers, matching the pattern from PR #55480.

Process: comp/process/forwarders/impl/forwarders.go
Orchestrator: comp/forwarder/orchestrator/impl/forwarder_orchestrator.go
wynbennett added a commit that referenced this pull request Aug 31, 2026
Fix two findings from the Codex/Autotest review:

1. (P2) Delay completion when requeuing credential waits
   For a non-retryable transaction with ErrCredentialNotReady, the
   CompletionHandler was called before the requeue, and again when the
   retried transaction finished. Now the credential-not-ready check runs
   before the completion handler, so completion is suppressed until the
   transaction actually finishes.

2. (P2) Release payloads dropped while awaiting credentials
   When a delegated-auth sender's queue was full, the payload was
   abandoned without returning it to ppool or recording an
   eventTypeDropped event. Now the drop bookkeeping runs and the payload
   is returned to the pool, reducing GC pressure and fixing telemetry
   underreporting.
@wynbennett
wynbennett force-pushed the wyn.bennett/wif-credential-provider-consumers branch from 44acba4 to 82c87aa Compare August 31, 2026 15:41
wynbennett added a commit that referenced this pull request Aug 31, 2026
…rders

Process and orchestrator forwarders create their own resolvers via
NewSingleDomainResolvers, which don't go through the main forwarder's
provider-wired resolver. This PR threads delegatedauth.Component into
both forwarders and calls ProvidersFor + SetCredentialProviders on
their resolvers, matching the pattern from PR #55480.

Process: comp/process/forwarders/impl/forwarders.go
Orchestrator: comp/forwarder/orchestrator/impl/forwarder_orchestrator.go
…logs agent

This PR wires the credential Provider interface from delegatedauth into
the three data-plane consumers:

Forwarder:
- Forwarder takes credentials from providers, buffering until they resolve
- Resolver discovers credential providers for each endpoint
- Transactions carry credential context
- OTel sync forwarder accepts a delegated auth component
- HTTP transactions serializer hardened for credential backpressure

Trace writers:
- Trace writers take credentials from providers, holding payloads until resolve
- Sender resolves credentials before forwarding
- Pipeline stats skips delegated-auth endpoints (no API key)
- Trace agent impl and config wiring for credential providers

Logs agent:
- Logs endpoints take their credential from a provider
- Wire delegated auth into the logs agent end to end
- Stop logs TCP from leaking the directive on the wire
- Harden Authorize, fix serverless build
- Logs library HTTP destination supports credential providers
Fix two findings from the Codex/Autotest review:

1. (P2) Delay completion when requeuing credential waits
   For a non-retryable transaction with ErrCredentialNotReady, the
   CompletionHandler was called before the requeue, and again when the
   retried transaction finished. Now the credential-not-ready check runs
   before the completion handler, so completion is suppressed until the
   transaction actually finishes.

2. (P2) Release payloads dropped while awaiting credentials
   When a delegated-auth sender's queue was full, the payload was
   abandoned without returning it to ppool or recording an
   eventTypeDropped event. Now the drop bookkeeping runs and the payload
   is returned to the pool, reducing GC pressure and fixing telemetry
   underreporting.
The NewOTelSyncForwarder signature gained a delegatedauth.Component
parameter in this PR, but two callers in serializerexporter were not
updated:
- serializer.go: fx.Provide now accepts delegatedauth.Component and
  passes it to NewOTelSyncForwarder
- exporter_test.go: passes nil for the delegated auth component
- BUILD.bazel: added dep on delegatedauth/def
The NewOTelSyncForwarder signature gained a delegatedauth.Component
parameter, but the call in commonAgentFxOptions was not updated.
The fx.Provide now accepts delegatedauth.Component (still the noop at
this point) and passes it through. PR3 replaces the noop with the real
component.
Add tests to each consumer's credential provider test file verifying
that an ENC[...] key resolved by the secrets backend behaves as a
normal static key — the provider path does not interfere with it.

Forwarder: TestResolvedEncKeyUnaffectedByProvider
Trace writer: TestAuthorizeStampsResolvedEncKeyWhenThereIsNoProvider
Logs: TestAuthorizeStampsResolvedEncKey
Rebase onto foundation which added Refresh() to the Provider interface.
Update stubProvider implementations in resolver, logs, and trace writer
tests to satisfy the updated interface.

WIF-48
…ests

Replace the per-package stubProvider copies in resolver, logs, and trace
writer tests with the shared StubProvider from comp/core/delegatedauth/mock.

WIF-48
_test.go files are only visible within their own package. Move StubProvider
to a regular .go file so consumer test packages (resolver, logs, trace writer,
trace API) can import it from delegatedauth/mock.

WIF-48
- Resolver: CredentialProvider alias points to credential.Provider
- Logs: CredentialProvider alias, CredentialProviderLookup → credential.Lookup,
  isDelaDirective → credential.IsDirective
- Trace config: remove redeclared CredentialProvider interface, use credential.Provider
  alias; CredentialProviderFn → credential.Lookup
- Trace writer: apiKeyManager.Authorize → credential.StampAuth, remove headerAPIKey const
- Fix gofmt and test reference to removed headerAPIKey const
- Update go.mod replace directives for pkg/credential

WIF-48
…oint.Authorize

- Remove the isDelaDirective one-liner wrapper; call credential.IsDirective
  directly at all 4 call sites in endpoints.go and in the test
- Rewrite Endpoint.Authorize to use credential.StampAuth instead of the
  inline h.Set("DD-API-KEY", ...) pattern, keeping the credentialDirective
  guard as a logs-specific pre-check

WIF-48
@wynbennett
wynbennett force-pushed the wyn.bennett/wif-credential-provider-consumers branch from 82c87aa to 735c243 Compare August 31, 2026 15:49
wynbennett added a commit that referenced this pull request Aug 31, 2026
…rders

Process and orchestrator forwarders create their own resolvers via
NewSingleDomainResolvers, which don't go through the main forwarder's
provider-wired resolver. This PR threads delegatedauth.Component into
both forwarders and calls ProvidersFor + SetCredentialProviders on
their resolvers, matching the pattern from PR #55480.

Process: comp/process/forwarders/impl/forwarders.go
Orchestrator: comp/forwarder/orchestrator/impl/forwarder_orchestrator.go
@dd-octo-sts

dd-octo-sts Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Benchmarks

Benchmark execution time: 2026-08-31 19:23:29

Comparing candidate commit 35d25a7 in PR branch wyn.bennett/wif-credential-provider-consumers with baseline commit 64781ff in branch main.

📊 Benchmarking dashboard

Found 0 performance improvements and 0 performance regressions! Performance is the same for 3 metrics, 0 unstable metrics.

Explanation

This is an A/B test comparing a candidate commit's performance against that of a baseline commit. Performance changes are noted in the tables below as:

  • 🟩 = significantly better candidate vs. baseline
  • 🟥 = significantly worse candidate vs. baseline

We compute a confidence interval (CI) over the relative difference of means between metrics from the candidate and baseline commits, considering the baseline as the reference.

If the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD), the change is considered significant.

Feel free to reach out to #apm-benchmarking-platform on Slack if you have any questions.

More details about the CI and significant changes

You can imagine this CI as a range of values that is likely to contain the true difference of means between the candidate and baseline commits.

CIs of the difference of means are often centered around 0%, because often changes are not that big:

---------------------------------(------|---^--------)-------------------------------->
                              -0.6%    0%  0.3%     +1.2%
                                 |          |        |
         lower bound of the CI --'          |        |
sample mean (center of the CI) -------------'        |
         upper bound of the CI ----------------------'

As described above, a change is considered significant if the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD).

For instance, for an execution time metric, this confidence interval indicates a significantly worse performance:

----------------------------------------|---------|---(---------^---------)---------->
                                       0%        1%  1.3%      2.2%      3.1%
                                                  |   |         |         |
       significant impact threshold --------------'   |         |         |
                      lower bound of CI --------------'         |         |
       sample mean (center of the CI) --------------------------'         |
                      upper bound of CI ----------------------------------'

Gazelle requires this because credential_provider_test.go imports
pkg/credential for credential.IsDirective.

WIF-48
wynbennett added a commit that referenced this pull request Aug 31, 2026
…rders

Process and orchestrator forwarders create their own resolvers via
NewSingleDomainResolvers, which don't go through the main forwarder's
provider-wired resolver. This PR threads delegatedauth.Component into
both forwarders and calls ProvidersFor + SetCredentialProviders on
their resolvers, matching the pattern from PR #55480.

Process: comp/process/forwarders/impl/forwarders.go
Orchestrator: comp/forwarder/orchestrator/impl/forwarder_orchestrator.go
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

internal Identify a non-fork PR long review PR is complex, plan time to review it team/agent-apm trace-agent team/agent-log-pipelines team/agent-metric-pipelines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant