Repository navigation
fix(settlement): add retry columns and bounded retry policy - #1547
Merged
greatest0fallt1me merged 1 commit intoOct 21, 2026
Merged
greatest0fallt1me merged 1 commit into
greatest0fallt1me merged 1 commit into
Conversation
|
@0darkside0rbit-star Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
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.
closes #1497
PR description
Fixes #1497 by adding the missing settlement retry schema and enforcing bounded retry transitions.
Summary
This change adds the missing
retry_after,retry_count, andlast_errorcolumns to thesettlementstable, restores aretryablestatus in the CHECK constraint, and adds a partial index for the pending retry query path. It also moves retry exhaustion and retry scheduling into the store so the settlement state transition is atomic and cannot violate the ledger constraints.Why this fixes the bug
Previously, the store code selected
retry_after/retry_countand scheduled rows asretryable, but the database schema never created those columns or allowed the status. That caused PostgreSQL errors like:column "retry_after" does not existnew row for relation "settlements" violates check constraintThis patch makes the schema and runtime contract match again, so reconciliation can safely re-check
tx_failed_too_earlysettlements without crashing.Changes
0026_settlement_retry_policy.sql0026_settlement_retry_policy.down.sqlretry_after TIMESTAMP NULLretry_count INTEGER NOT NULL DEFAULT 0last_error TEXT NULLretryableidx_settlements_retry_afteronsettlements(retry_after)wherestatus = 'retryable'SETTLEMENT_MAX_RETRIES = 5failedwithlast_errorset in the same SQL updatescheduleRetry()only applies topending/retryablerowsEXPLAINplanValidation
Verified with:
npx jest --runInBand --forceExitsettlementStore.test.tssettlementStatusSyncJob.test.tstests/integration/settlementStoreSchema.test.tsResult:
Notes
This is a safe forward migration for populated tables and keeps the pending settlement query fast via the new partial retry index.