Fix #204 (full Multipart Uploads semantics) #553

Merged
lx merged 20 commits from nlnet-task1 into next 2023-06-09 15:34:10 +00:00
Showing only changes of commit 75a0e01372 - Show all commits

View file

@ -107,28 +107,29 @@ impl Worker for RepairVersionsWorker {
let version = Version::decode(&item_bytes).ok_or_message("Cannot decode Version")?; let version = Version::decode(&item_bytes).ok_or_message("Cannot decode Version")?;
if !version.deleted.get() { if !version.deleted.get() {
let object = self let version_exists = match &version.backlink {
.garage VersionBacklink::Object { bucket_id, key } => {
.object_table let object = self.garage.object_table.get(&bucket_id, &key).await?;
.get(&version.bucket_id, &version.key) match object {
.await?; Some(o) => o.versions().iter().any(|x| {
let version_exists = match object { x.uuid == version.uuid && x.state != ObjectVersionState::Aborted
Some(o) => o }),
.versions() None => false,
.iter() }
.any(|x| x.uuid == version.uuid && x.state != ObjectVersionState::Aborted), }
None => false, VersionBacklink::MultipartUpload { upload_id } => {
let mpu = self.garage.mpu_table.get(&upload_id, &EmptyKey).await?;
match mpu {
Some(u) => !u.deleted.get(),
None => false,
}
}
}; };
if !version_exists { if !version_exists {
info!("Repair versions: marking version as deleted: {:?}", version); info!("Repair versions: marking version as deleted: {:?}", version);
self.garage self.garage
.version_table .version_table
.insert(&Version::new( .insert(&Version::new(version.uuid, version.backlink, true))
version.uuid,
version.bucket_id,
version.key,
true,
))
.await?; .await?;
} }
} }