Skip to content

WIP: Add scale_decisions to WorkerPollerInfo#823

Open
veeral-patel wants to merge 1 commit into
mainfrom
veeral/poller-scale-decisions
Open

WIP: Add scale_decisions to WorkerPollerInfo#823
veeral-patel wants to merge 1 commit into
mainfrom
veeral/poller-scale-decisions

Conversation

@veeral-patel

@veeral-patel veeral-patel commented Jul 9, 2026

Copy link
Copy Markdown

What changed

Adds a map<string, int64> scale_decisions field (tag 4) to WorkerPollerInfo.

It carries a per-poller-type breakdown of poller autoscaler scale decisions since the last heartbeat, keyed by reason:
server_up, server_up_suppressed, server_down, empty_poll_down, re_halve, error_down. Only set when the poller count is auto-scaled.

Why

Poller autoscaling decisions (including when a server-requested scale-up is suppressed because the worker's throughput gate is closed) are currently only visible via SDK metrics. Surfacing them in the worker heartbeat makes scaling behavior observable server-side without a metrics pipeline.

Consumer

Go SDK: temporalio/sdk-go (companion PR wires up the SDK to populate this field per interval).

@veeral-patel veeral-patel requested review from a team July 9, 2026 19:07
@veeral-patel veeral-patel changed the title Add scale_decisions to WorkerPollerInfo WIP: Add scale_decisions to WorkerPollerInfo Jul 9, 2026
veeral-patel added a commit to temporalio/sdk-go that referenced this pull request Jul 9, 2026
The poller autoscaler now counts its scale decisions internally (keyed by
reason: server_up, server_up_suppressed, server_down, empty_poll_down,
re_halve, error_down, clamp_min, clamp_max). Each worker heartbeat reports
the per-interval breakdown per poller type via the new
WorkerPollerInfo.scale_decisions field, so scaling behavior — including
server-requested scale-ups suppressed by the throughput gate — is
observable server-side without a metrics pipeline.

Requires the scale_decisions field from temporalio/api#823.
veeral-patel added a commit to temporalio/sdk-go that referenced this pull request Jul 9, 2026
The poller autoscaler now counts its scale decisions internally (keyed by
reason: server_up, server_up_suppressed, server_down, empty_poll_down,
re_halve, error_down, clamp_min, clamp_max). Each worker heartbeat reports
the per-interval breakdown per poller type via the new
WorkerPollerInfo.scale_decisions field, so scaling behavior — including
server-requested scale-ups suppressed by the throughput gate — is
observable server-side without a metrics pipeline.

Requires the scale_decisions field from temporalio/api#823.
veeral-patel added a commit to temporalio/sdk-go that referenced this pull request Jul 9, 2026
The poller autoscaler now counts its scale decisions, keyed by reason
(server_up, server_up_suppressed, server_down, empty_poll_down, re_halve,
error_down). Each worker heartbeat reports the per-interval breakdown per
poller type via the new WorkerPollerInfo.scale_decisions field, so scaling
behavior — including server-requested scale-ups suppressed by the
throughput gate — is observable server-side without a metrics pipeline.

Requires the scale_decisions field from temporalio/api#823.
Adds a per-poller-type breakdown of poller autoscaler scale decisions
since the last heartbeat (keyed by reason, e.g. server_up,
server_up_suppressed, empty_poll_down, re_halve) to the worker heartbeat,
so scaling behavior is observable server-side without a metrics pipeline.
@veeral-patel veeral-patel force-pushed the veeral/poller-scale-decisions branch from a8a27ca to 70de22e Compare July 9, 2026 19:45
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