Skip to content

Expose runner identity in orchestrator discovery - #1

Closed
mikezupper wants to merge 2 commits into
mainfrom
tasks/mz/discovery-runner-id
Closed

mikezupper wants to merge 2 commits into
mainfrom
tasks/mz/discovery-runner-id

Conversation

@mikezupper

@mikezupper mikezupper commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator

Native gateway admission binds approvals to a runner ID, but discovery omitted that ID and every candidate was rejected. Include the registered runner_id in each discovery record so clients can match identity without deriving it from a proxy URL or confusing it with the app name.

Validation: JSON serialization regression; go test -race ./... (umask 022); live RTX 5090 acceptance with vLLM, SGLang and Ollama through the corrected node image, including paid request/error/disconnect accounting. On-chain redemption finality is tracked separately.

Follow-up: runner identity now also survives the signer discovery collector and /discover-orchestrators. Regression coverage uses a single-shot proxy hostname and explicitly checks runner_id in both direct and signer discovery. Full go test -race ./... passes. Commit e75e5b6 is published as registry.livepeer.tools/ne-build-track/inference-node:native-vllm-20261027, manifest sha256:6042f62ea94213c700c57e4d7e1ae1fab8bfb07f4055a140552708e6eedd4561; the binary embeds that commit. The final candidate passes vLLM cancellation/recovery and sequential requests. Live signer-path acceptance remains distinct from the covered HTTP regression tests.

@cursor cursor 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.

runner_id is on the orchestrator GET /discovery record, and standalone discovery keeps the raw JSON, so that path is fine. The pinned Python client does not read that response. TestPinnedPythonSignerDiscovery calls discover_runners(signer_url=...), and GET /discover-orchestrators rebuilds each runner as discoveredRunner, which has no runner_id and no raw-record passthrough. The identity is gone before the client that is supposed to bind admission can see it.

The new test only marshals Registry.Discovery() for a non-proxy single-shot runner (/apps/gpu-runner/app), so it stays green when the signer drops the field and when the advertised URL is a proxy host.

Open in Web View Automation 

Sent by Cursor Automation: build-track code reviews

Comment thread orchestrator/registry.go Resolved
Comment thread orchestrator/http_test.go Resolved
@sonarqubecloud

Copy link
Copy Markdown

@cursor cursor 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.

runner_id now survives both hops a client actually reads.

Orchestrator GET /discovery emits the registry key on discoveryRunner. For a single-shot proxy runner that key is independent of the advertised URL: discoveryURL uses proxyURL(id), and TestRunnerGPUIsPreservedForPythonDiscovery registers gpu-runner with proxy:true and https://{proxy}.example, then checks the JSON for runner_id gpu-runner and URL https://gpu-runner.example.

Signer discoveredRunner keeps runner_id, and GET /discover-orchestrators re-encodes that struct. TestSignerDiscovery advertises that same identity and proxy-shaped URL (direct source and the standalone discovery cache, which still returns the raw record) and requires both fields on the response. Duplicate selection is unchanged: DiscoveryIdentity is still URL, app, and observed_at.

go test ./orchestrator/ ./signer/ -run 'TestRunnerGPUIsPreservedForPythonDiscovery|TestSignerDiscovery$|TestDiscoveryLocalInventory|TestRunnerProxyRoutingMatrix|TestDomainProxyRunnerIDs' passed. No Co-Authored-By on dfcf033..e75e5b6.

Open in Web View Automation 

Sent by Cursor Automation: build-track code reviews

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.

1 participant