Skip to content

Commit 79f8e0e

Browse files
committed
fix: Remove multi-parts for deleted objects
1 parent 37f1bf9 commit 79f8e0e

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

components/data_proxy/src/caching/cache.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use super::grpc_query_handler::GrpcQueryHandler;
22
use crate::auth::auth::AuthHandler;
33
use crate::caching::grpc_query_handler::sort_objects;
44
use crate::data_backends::storage_backend::StorageBackend;
5-
use crate::database::persistence::delete_parts_by_upload_id;
5+
use crate::database::persistence::{delete_parts_by_object_id, delete_parts_by_upload_id};
66
use crate::replication::replication_handler::ReplicationMessage;
77
use crate::s3_frontend::data_handler::DataHandler;
88
use crate::structs::{
@@ -813,6 +813,7 @@ impl Cache {
813813
let transaction = client.transaction().await?;
814814
let transaction_client = transaction.client();
815815

816+
delete_parts_by_object_id(transaction_client, &id).await?;
816817
ObjectLocation::delete(&id, transaction_client).await?;
817818
Object::delete(&id, transaction_client).await?;
818819

@@ -835,6 +836,9 @@ impl Cache {
835836
return Ok(());
836837
};
837838

839+
self.multi_parts
840+
.retain(|_, v| v.first().map_or(true, |e| e.object_id != id));
841+
838842
let object = old.1 .0.read().await;
839843
for p in self
840844
.get_name_trees(&TypedId::from(object.deref()), object.name.clone(), None)

components/data_proxy/src/database/persistence.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,14 @@ pub async fn _get_parts_by_upload_id(
218218
pub async fn delete_parts_by_upload_id(client: &Client, upload_id: String) -> Result<()> {
219219
let query = "DELETE FROM multiparts WHERE data->>'upload_id' = $1;";
220220
let prepared = client.prepare(query).await?;
221-
let deleted = client.execute(&prepared, &[&upload_id]).await?;
222-
debug!("Deleted {} parts for {}", deleted, upload_id);
221+
client.execute(&prepared, &[&upload_id]).await?;
222+
Ok(())
223+
}
224+
225+
pub async fn delete_parts_by_object_id(client: &Client, object_id: &DieselUlid) -> Result<()> {
226+
let query = "DELETE FROM multiparts WHERE data->>'object_id' = $1;";
227+
let prepared = client.prepare(query).await?;
228+
client.execute(&prepared, &[&object_id.to_string()]).await?;
223229
Ok(())
224230
}
225231

0 commit comments

Comments
 (0)