Documentation Index
Fetch the complete documentation index at: https://docs.goldsky.com/llms.txt
Use this file to discover all available pages before exploring further.
Overview
By default, pipelines run as long-running deployments that continuously process data. Job mode allows you to run a pipeline as a one-time task that runs to completion and then exits.Job mode requires sources that can signal completion. Solana datasets always support this, as do EVM datasets configured for fast scan (a
filter: expression with start_at: earliest or omitted). Plain EVM datasets without fast scan cannot be used with job: true — see limitations below.When to use job mode
Use job mode for:- Historical Solana backfills: Process a specific range of Solana blocks using
end_block— the pipeline self-terminates when the range completes. - Historical EVM backfills: Backfill filtered EVM data using fast scan. Include an upper bound on
block_numberinside thefilter:expression (e.g.,... AND block_number <= 20000000) and the pipeline self-terminates once the bounded scan is complete.end_blockis not supported on EVM sources. - One-time data migrations: Move data from one system to another.
- Testing and development: Quick runs without maintaining a long-running deployment.
Configuration
Addjob: true to your pipeline configuration along with end_block on your Solana source:
How termination works
Job mode requires every source in the pipeline to be bounded — to have a finite end so the pipeline knows when it’s done. The engine rejectsjob: true at deploy time otherwise with an error naming the offending sources.
Two ways to produce a bounded source:
- Solana datasets are bounded by
start_block+end_block(orblock_rangesfor multiple windows). - EVM datasets with fast scan — a
filter:expression withstart_at: earliest(or omitted) — are bounded by including an upper limit onblock_numberinside thefilter:(e.g.,... AND block_number <= 20000000). The top-levelend_blockfield is not supported on EVM dataset sources; it is silently ignored.
- The source processes blocks up to and including the upper bound (Solana
end_blockor theblock_numberlimit in an EVMfilter:). - The engine waits for the checkpoint covering that bound to finalize, ensuring data is fully persisted to sinks.
- The pipeline process exits cleanly.
job: true deploys the pipeline as a Kubernetes Job instead of a Deployment, which means:
- No automatic restarts on failure (
backoff_limit: 0). - Auto-cleanup 1 hour after the process exits (success or failure).
Job behavior
Whenjob: true is set:
- No restarts: Failed jobs do not automatically restart (unlike deployments)
- Auto-cleanup: Jobs are automatically deleted 1 hour after termination (success or failure)
- No restart command:
goldsky turbo restartis not supported for jobs — delete and re-apply instead - Cannot switch modes in place: A pipeline name deployed as a job cannot be redeployed as a deployment (or vice versa) — you must delete it first
Example: Solana block range processing
Example: EVM fast-scan backfill
filter + start_at: earliest combination enables fast scan, which bounds the source to a backfill over the Goldsky data lake. The block_number <= 20000000 clause inside the filter makes the backfill finite, so the pipeline terminates cleanly once block 20,000,000 is processed.
EVM dataset sources do not support the top-level
end_block field — it is silently ignored. Always express the upper block bound inside the filter: expression. end_block works for Solana sources only.Limitations
Job mode requires every source in the pipeline to be bounded. In practice that means:- Plain EVM datasets cannot use job mode. Without a
filter:, an EVM dataset is a continuous stream from the chain tip with no end. Applying it withjob: trueis rejected at deploy time with a validation error. - Not every chain supports fast scan. Even with a
filter:, EVM job mode only works on chains where the underlying datasets support fast scan. Check the Fast Scan column in supported chains — chains marked✗, or specific datasets marked with an asterisk*, do not support fast scan and cannot be used withjob: true. - SQL-level filtering does not bound a source.
WHERE block_number BETWEEN ...in a transform filters rows but does not cause the source to stop — the pipeline keeps consuming data indefinitely. To terminate, the bound must be on the source itself: ablock_numberclause inside an EVMfilter:(fast scan), orend_blockon a Solana source. end_blockis Solana-only. The top-levelend_blockfield on EVM dataset sources is silently ignored. Express the upper bound inside thefilter:expression.
block_number upper bound in the filter:
Monitoring job status
View job status with:--follow is not useful for job logs — for a completed job the stream returns immediately, and for a failed job logs are unavailable (status is Failed, which rejects log requests). Logs are also deleted when the job is auto-cleaned up 1 hour after termination, so retrieve any logs you need before that window closes.Job vs deployment
| Feature | Job (job: true) | Deployment (job: false, default) |
|---|---|---|
| Duration | Runs to completion (bounded sources) | Continuous processing |
| Restart on failure | No | Yes (automatic) |
| Resource cleanup | Auto-deleted 1 hour after termination | Persists until deleted |
goldsky turbo restart | Not supported | Supported |
| Use case | Solana backfills; EVM fast-scan backfills | Real-time streaming |
| Switch to the other mode | Must delete first | Must delete first |
Best practices
Bound the run so the pipeline terminates cleanly
Bound the run so the pipeline terminates cleanly
For Solana sources, always define For EVM sources, use fast scan (
start_block and end_block:filter + start_at: earliest) and put the upper block_number bound inside the filter: expression. end_block is not supported on EVM dataset sources — it is silently ignored.Use appropriate resource sizes
Use appropriate resource sizes
For large backfills, use larger resource sizes to process data faster:
Monitor completion
Monitor completion
Jobs auto-delete 1 hour after termination — fetch logs before the cleanup window closes:
Delete before redeployment
Delete before redeployment
Always delete completed jobs before redeploying: