Skip to content

[FEATURE]: Expose instance TCP transport addresses on Client (Python bindings) #11543

Description

@jyizheng

Feature request

Expose a Python API on Client that returns the TCP transport addresses of an endpoint's currently-registered instances, e.g.:

client = await endpoint.client()
addrs = client.instance_tcp_addresses()
# ["10.0.0.12:9401/ns/component/endpoint", ...]

The binding would read the runtime Client's watched instance set (client.instances()) and return each instance's TransportType::Tcp address string. Non-TCP transports (e.g. NATS) are skipped. Like instance_ids(), the result is a snapshot; callers can pair it with wait_for_instances() to block until instances exist.

Describe the problem you're encountering

From Python there is currently no dynamo API to learn where an endpoint's peer instances are running (their node addresses). Client.instance_ids() only returns opaque instance IDs.

A concrete use case: in a disaggregated deployment, a worker wants to run a startup RDMA connectivity check against its peer workers, which requires the peer node IPs. Today the only way to get them is to read the discovery/etcd registry layout directly and parse the registered instance records, which couples user code to dynamo's internal registry schema and can break on upgrades.

Environment: any deployment using the Python bindings (dynamo._core.Client); observed on Linux with recent main.

Describe alternatives you've tried

  • Reading the etcd/discovery registry directly from Python and parsing the instance JSON to extract the transport address. This works but depends on the internal key layout and record schema, which are not a public contract.
  • Passing peer addresses out-of-band via deployment configuration (env vars / operator-rendered config). This duplicates information dynamo already tracks and goes stale when instances are rescheduled.

Implementation is proposed in PR #11540.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions