<aside> 🚧
This document is a Work In Progress
</aside>
The processing pipeline handles all of the logic to download, index, query, and persist data for a single ExecutionResult. See Result Processing for protocol design.
The pipeline will be implemented as a state machine, with the following states:
ready → This is the initial state after instantiation and before downloading has begun.downloading → BlockExecutionData download is in progress.indexing → BlockExecutionData is being indexed.waiting_persist → All data is indexed, but conditions to persist are not met.persisting → Persist conditions are all met, and the indexed data is being persisted to storage.complete → All prior steps completed successfully.canceled → Processing was aborted. This is generally because it no longer descends from the latest persisted sealed result.The following conditions must be met before transitioning to the next state:
ready → downloading
ExecutionResult descends from the last persisted sealed result.downloading, indexing, waiting_persist, persisting, or complete.downloading → indexing
ExecutionResult descends from the last persisted sealed result.canceled.indexing → waiting_persist
ExecutionResult descends from the last persisted sealed result.canceled.waiting_persist → persisting
ExecutionResult is sealedcompletepersisting → complete
canceled
ExecutionResult does NOT descend from the last persisted sealed result.