mirror of
https://github.com/temporalio/temporal.git
synced 2026-08-30 18:41:49 -07:00
## What changed? Adds two limits on the memory held by in-flight buffer for paginated RespondWorkflowTaskCompleted requests: - Process-wide limit on the total bytes buffered across all workflows on a history host. Dynamic config is `WorkflowTaskCompletionBufferTotalSizeLimit` - Per-namespace share of that process-wide limit (expressed as a ratio), so a single namespace can't consume the entire host budget. `WorkflowTaskCompletionBufferNamespaceRatio` When buffering a page would push either limit over the top, the page is rejected with the existing transient buffer-lost signal and the in-progress buffer is dropped. ## Why? Pagination lets one workflow task ship large volume of commands split across several requests, which the server holds in memory until the final page arrives. Without a ceiling, many concurrent large completions or one heavy namespace could exhaust a history host's memory. The process-wide limit bounds total exposure, and the per-namespace share keeps one namespace from starving the others. ## How did you test it? - [X] built - [X] run locally and tested manually - [X] covered by existing tests - [X] added new unit test(s) - [X] added new functional test(s) ## Potential risks * Gated behind the pagination feature flag (off by default), so there's no effect until pagination is enabled for a namespace. * The limit is enforced per process; a namespace that stays over its share will keep hitting buffer-lost and retrying until its in-flight buffers drain. This is recoverable but could show up as retry churn if a limit is set too low.