refactor: extract shared request-termination helper - #448
Merged
Conversation
Extract the duplicated "transition a request to a terminal state and publish its terminal log" logic into a single TerminateRequest helper in submitqueue/core/request, and route conclude, dlq, cancel, and validate through it.
Changes:
- Add corerequest.TerminateRequest(ctx, store, registry, requestID, targetState, lastError, metadata) that performs the idempotent 3-way CAS (reconcile / already-terminal / diverged / not-found), publishes the terminal RequestLog, and returns a TerminationResult{Outcome, BeforeState, AfterState} plus a separate error. Version arithmetic stays caller-side and storage.ErrVersionMismatch is passed through as retryable.
- Replace terminalStateToStatus's switch with a terminalStatusByState map lookup.
- conclude: reconcile each batch member through the helper, keeping per-outcome logs and metrics at the call site. A request referenced by the batch but missing from the store stays a hard error (retry, eventually DLQ).
- dlq: failRequest now delegates to the helper, keeping its NotFound tolerance and its reconcile/divergence log messages.
- cancel: cancelRequest delegates to the helper (Cancelling to Cancelled); the helper's re-read reports divergence cleanly instead of a spurious version-mismatch retry.
- validate: on an expected rejection (duplicate detected or custom validator failure), terminate the request to Error and ack instead of dead-lettering it; genuine infra failures still return errors.
- Add table-driven tests for TerminateRequest and update the conclude, cancel, and validate tests.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
ubettigole
force-pushed
the
abettigole/request_terminator
branch
from
July 27, 2026 23:37
074719d to
c8f16da
Compare
ubettigole
marked this pull request as ready for review
July 27, 2026 23:37
ubettigole
requested review from
a team,
behinddwalls and
sbalabanov
as code owners
July 27, 2026 23:37
…ller Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
behinddwalls
approved these changes
Jul 28, 2026
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.
Summary
Extract the duplicated "transition a request to a terminal state and publish its terminal log" logic into a single TerminateRequest helper in submitqueue/core/request, and route conclude, dlq, cancel, and validate through it.
Changes:
Co-Authored-By: Claude Opus 4.8 (1M context) [email protected]
Test Plan
Unit tests
Issues