Repository navigation
Treat oversized requests as invalid and stop the backoff loop in flows - #8
Merged
Merged
Conversation
liran
force-pushed
the
fix/oversized-input-and-backoff-loop
branch
from
November 5, 2026 20:14
87a6e43 to
ab363f8
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A request over gRPC's 4MiB message limit is refused before it reaches Temporal, with
ResourceExhausted, the code Temporal also uses for rate limits, soIsInvalidConfigErrormissed it and a caller that retries everything else, like a queue consumer, retried it forever. It now recognizes the refusal by its gRPC message, as the SDK does, and an integration test sends 3MiB and 5MiB inputs to a real server.The total backoff behind a step's overall timeout was a loop over every retry inside the flow, so millions of attempts with delays too small to grow tripped the deadlock detector. It is now summed in closed form and rounded up, so it never falls short of the delays Temporal waits, and it only feeds a timeout, which replay does not compare.