Update delete code

This commit is contained in:
Alex Auvolat 2020-04-26 19:11:19 +00:00
parent 0a283e4e70
commit 1999c0ae51

View File

@ -155,26 +155,30 @@ impl BodyChunker {
}
pub async fn handle_delete(garage: Arc<Garage>, bucket: &str, key: &str) -> Result<UUID, Error> {
let exists = match garage
let object = match garage
.object_table
.get(&bucket.to_string(), &key.to_string())
.await?
{
None => false,
Some(o) => {
let mut has_active_version = false;
for v in o.versions().iter() {
if v.data != ObjectVersionData::DeleteMarker {
has_active_version = true;
break;
}
}
has_active_version
None => {
// No need to delete
return Ok([0u8; 32].into());
}
Some(o) => o,
};
if !exists {
// No need to delete
let interesting_versions = object.versions().iter().filter(|v| {
v.data != ObjectVersionData::DeleteMarker && v.state != ObjectVersionState::Aborted
});
let mut must_delete = false;
let mut timestamp = now_msec();
for v in interesting_versions {
must_delete = true;
timestamp = std::cmp::max(timestamp, v.timestamp + 1);
}
if !must_delete {
return Ok([0u8; 32].into());
}