Resume interrupted S3 transfers
Godwit Sync stores task statuses and multipart upload IDs in SQLite. Resume requeues unfinished and failed tasks, leaves completed objects untouched, and queries the destination for existing multipart parts.
Multipart resume reuses completed parts
Incomplete single-part objects restart from byte zero. Multipart uploads reuse the saved upload ID, skip parts accepted by the destination, and retransmit the interrupted part.
- Preserves completed transfer progress
- Retries unfinished transfers
- Confirms source access
- Recreates missing multipart sessions
- Continues checksum verification
# Inspect the tasks that resume will queue again
$ godwit plan list objects pending+running+failed \
--run-id nightly-backup \
--json \
--state-path ./state.db
# Abridged JSON output
[
{
"key": "media/archive-042.tar",
"status": "running",
"version_id": "null"
},
{
"key": "exports/customers.parquet",
"status": "failed",
"error": "destination write interrupted",
"version_id": "null"
}
]Resume boundary details
What data is sent again after an interruption?
Completed objects and multipart parts are skipped. The interrupted multipart part is sent again, while an incomplete single-part object restarts from the beginning.
Does resume scan the buckets again?
No, resume reads the saved plan rather than rebuilding it or listing the destination. It still checks source access and reads unfinished source objects for transfer and checksum calculation.
What must remain available for resume?
Keep the SQLite state file, run ID, source, and destination available. godwit plan verify --resume uses the same run ID and skips checksum checks already recorded as successful.
Explore related capabilities
Continue the saved plan after an interruption.
Keep the state database and run ID with the job that created them.