Repository navigation
Isolate unreadable tick history and keep dispatch faults recoverable - #135
Merged
Merged
Conversation
Skip schedules with unreadable tick history without abandoning other schedules or treating history as absent. Retry dispatch after unexpected exceptions and report failure categories and recovery. Skip rejected stored values and maximum boundary counts. Throttle boundary-heal diagnostics and escape schedule names in worker logs. Check legacy driver-tolerated values before upgrading. Stored reads use more CPU and reconciles use batched queries; dispatch statement counts are unchanged. Batch workers now remain alive after unexpected dispatch faults, including custom source failures. Wrappers need time limits and failure monitoring. No migration is required.
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.
What and why:
Skip only the schedule whose tick history cannot be read, including settings-declared anchor history. Report
schedule_tick_unreadable; do not treat that history as absent.Keep workers alive after unexpected dispatch exceptions. Report
schedule_dispatch_failedwith a category and retry next pass. Emitschedule_dispatch_resumedafter recovery.Name rejected stored fields, skip maximum boundary counts, throttle boundary-heal failures and escape schedule names before logging.
Compatibility: previously tolerated rows (psycopg2 infinity values, mysqlclient zero dates, SQLite BLOB text values) can now be skipped. Stored reads consume more CPU; full reconciles use batched queries. Dispatch statement counts are unchanged. Batch wrappers need a time limit and failure monitoring, including for custom source store failures. A clean exit does not prove successful dispatch. Caller-owned transactions must roll back database-raised source-read errors. No migration is required.
Tests: new tests in
tests/test_tick_history.pyandtests/test_tick_history_worker.py; 302 tests pass on SQLite with the docs and reader tests, ruff and format are clean, and the llms-full check passes. CI runs the full matrix.Changelog: not user-visible yet; the user-facing entry arrives with the release.