mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-14 08:52:56 +00:00
- Introduce another UploadQueue::Stopped enum variant to indicate the state where the UploadQueue is shut down. - In perform_upload_task, wait concurrently for tenant/timeline shutdown. If we are requested to shut down, the first in-progress tasks that notices the shutdown request transitions the queue from UploadQueue::Initialized to UploadQueue::Stopped state. This involves dropping all the queued ops that are not yet in progress, which conveniently unblocks wait_completion() calls that are waiting for their barrier to be executed. They will receive an Err(), and do something sensible. Right now, wait_completion() is only used by tests, but I suspect that we should be using it in wherever we delete layer files, e.g., GC and compaction, as explained in the storage_sync.rs block comment section "Consistency". This change also fixes test_timeline_deletion_with_files_stuck_in_upload_queue which I added in the previous commit. Before, timeline delete would wait until all in-progress tasks and queued tasks were done. If, like in the test, a task was stuck due to upload error, timeline deletion would wait forever. Now it gets an error. Co-authored-by: Heikki Linnakangas <heikki@neon.tech>