fix(pageserver): do not allow delete to bypass upload metadata

Signed-off-by: Alex Chi Z <chi@neon.tech>
This commit is contained in:
Alex Chi Z
2025-07-02 13:55:31 -07:00
parent 8b4fbefc29
commit 6c81cf3892

View File

@@ -544,12 +544,8 @@ impl UploadOp {
let uname = u.layer_desc().layer_name();
!i.references(&uname, umeta) && !index.references(&uname, umeta)
}
(UploadOp::Delete(d), UploadOp::UploadMetadata { uploaded: i })
| (UploadOp::UploadMetadata { uploaded: i }, UploadOp::Delete(d)) => {
d.layers.iter().all(|(dname, dmeta)| {
!i.references(dname, dmeta) && !index.references(dname, dmeta)
})
}
(UploadOp::Delete(_), UploadOp::UploadMetadata { .. })
| (UploadOp::UploadMetadata { .. }, UploadOp::Delete(_)) => false,
// Indexes can never bypass each other. They can coalesce though, and
// `UploadQueue::next_ready()` currently does this when possible.