diff --git a/services/backup/src/database/mod.rs b/services/backup/src/database/mod.rs --- a/services/backup/src/database/mod.rs +++ b/services/backup/src/database/mod.rs @@ -229,14 +229,19 @@ /// Backup log functions impl DatabaseClient { - pub async fn put_log_item(&self, log_item: LogItem) -> Result<(), Error> { + pub async fn put_log_item( + &self, + log_item: LogItem, + blob_client: &BlobServiceClient, + ) -> Result<(), Error> { let item = log_item.into(); - self + let result = self .client .put_item() .table_name(log_table::TABLE_NAME) .set_item(Some(item)) + .return_values(ReturnValue::AllOld) .send() .await .map_err(|e| { @@ -244,6 +249,17 @@ Error::AwsSdk(e.into()) })?; + let Some(replaced_log_attrs) = result.attributes else { + return Ok(()); + }; + + let Ok(replaced_log) = LogItem::try_from(replaced_log_attrs) else { + warn!("Couldn't parse replaced log item"); + return Ok(()); + }; + + replaced_log.revoke_holders(blob_client); + Ok(()) } diff --git a/services/backup/src/http/handlers/log.rs b/services/backup/src/http/handlers/log.rs --- a/services/backup/src/http/handlers/log.rs +++ b/services/backup/src/http/handlers/log.rs @@ -170,7 +170,7 @@ }; log_item.ensure_size_constraints(&blob_client).await?; - db_client.put_log_item(log_item).await?; + db_client.put_log_item(log_item, &blob_client).await?; Ok(vec![LogWSResponse::LogUploaded { backup_id, log_id }]) }