Skip to content

fix(agentex): only bracket IPv6 literals when building the OTLP metrics URL#323

Open
parveshsaini wants to merge 2 commits into
scaleapi:mainfrom
parveshsaini:parveshsaini/fix/otlp-metrics-ipv6-brackets
Open

fix(agentex): only bracket IPv6 literals when building the OTLP metrics URL#323
parveshsaini wants to merge 2 commits into
scaleapi:mainfrom
parveshsaini:parveshsaini/fix/otlp-metrics-ipv6-brackets

Conversation

@parveshsaini

@parveshsaini parveshsaini commented Jun 17, 2026

Copy link
Copy Markdown

What

run_worker built the worker's OTLP metrics endpoint by unconditionally wrapping DD_AGENT_HOST in IPv6 literal brackets:

metrics_url = f"http://[{host_url}]:4317" if host_url else None

This change extracts a small build_metrics_url helper that brackets the host only when it is an IPv6 literal (i.e. it contains a colon), and uses the host as-is otherwise.

Why

Per RFC 3986, brackets are only valid around an IPv6 literal. For the common cases, a hostname (localhost), a Kubernetes service name (datadog-agent), or an IPv4 literal (10.0.0.5) - the old code produced a malformed URL like http://[localhost]:4317.

That metrics_url flows into TemporalClientFactory.create_client_from_env(...)create_client(...)OpenTelemetryConfig(url=metrics_url). The Temporal SDK validates the URL eagerly when building the Runtime, raising Invalid OTel URL: invalid IPv6 address. Because that construction is inside the try block in create_client, it is re-raised as TemporalConnectionError, so the worker fails to start entirely whenever DD_AGENT_HOST is set to anything other than a bare IPv6 literal.

This also matches how DD_AGENT_HOST is already used elsewhere in the repo without brackets (e.g. app.py's statsd_host=os.getenv("DD_AGENT_HOST", "localhost")).

How it was verified

Reproduced on Linux (WSL Ubuntu, Python 3.12, temporalio 1.23.0 per uv.lock): feeding http://[localhost]:4317 / http://[datadog-agent]:4317 / http://[10.0.0.5]:4317 to OpenTelemetryConfig raises Invalid OTel URL: invalid IPv6 address; the bracket-less forms are accepted.

Added tests/unit/temporal/test_run_worker_metrics_url.py covering hostname / IPv4 (not bracketed), IPv6 literal (bracketed), and the unset case (None). The hostname/IPv4 assertions fail against the previous always-bracket behavior and pass with this change.

uv run ruff check src/temporal/run_worker.py tests/unit/temporal/test_run_worker_metrics_url.py   # All checks passed!
uv run ruff format --check ...                                                                     # 2 files already formatted
uv run pytest tests/unit/temporal/test_run_worker_metrics_url.py -m unit -q                        # 6 passed

Closes #313

Greptile Summary

  • Adds a build_metrics_url helper for constructing the worker OTLP metrics endpoint from DD_AGENT_HOST.
  • Brackets IPv6 literals while leaving hostnames and IPv4 addresses unbracketed.
  • Adds unit tests covering unset hosts, hostnames, IPv4, IPv6, explicit ports, and already-bracketed IPv6 inputs.

Confidence Score: 5/5

The change is narrowly scoped to OTLP metrics URL construction and is covered by focused unit tests for the relevant host forms.

The helper behavior matches the described URL requirements, and the tests exercise unset, hostname, IPv4, IPv6, explicit port, and already-bracketed IPv6 cases.

T-Rex T-Rex Logs

What T-Rex did

  • T-Rex captured the baseline metrics URL state as documented in the before-state log.
  • T-Rex captured the post-change metrics URL state as documented in the after-state log.
  • T-Rex compared the before and after outputs to confirm the updated host formatting and URL expansion.

View all artifacts

T-Rex Ran code and verified through T-Rex

Reviews (2): Last reviewed commit: "fix(agentex): handle host:port and brack..." | Re-trigger Greptile

@parveshsaini parveshsaini requested a review from a team as a code owner June 17, 2026 19:03
Comment thread agentex/src/temporal/run_worker.py Outdated
@parveshsaini

Copy link
Copy Markdown
Author

Hey Team! If the proposed changes looks right, can we have a quick review here please?

Thanks! @danielmillerp @RoxyFarhad @smoreinis @MichaelSun48 @declan-scale

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG]: run_worker wraps DD_AGENT_HOST in IPv6 brackets, producing an invalid OTLP metrics URL that crashes the worker

1 participant