From 3541ccfe29002f2186c89510857ac820ecae085f Mon Sep 17 00:00:00 2001 From: Kayphoon <109347466+Kayphoon@users.noreply.github.com> Date: Fri, 25 Sep 2026 06:02:14 +0000 Subject: [PATCH] perf(usage): truncate usage_body_blobs in before-now cleanup to reclaim physical disk space --- .../adapters/postgres/src/usage/cleanup.rs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/crates/aether-data/adapters/postgres/src/usage/cleanup.rs b/crates/aether-data/adapters/postgres/src/usage/cleanup.rs index 21deef1b0..58e1c7d52 100644 --- a/crates/aether-data/adapters/postgres/src/usage/cleanup.rs +++ b/crates/aether-data/adapters/postgres/src/usage/cleanup.rs @@ -687,11 +687,31 @@ async fn cleanup_usage_raw_body_fields( Ok(total_cleaned) } +async fn truncate_usage_body_blobs_table(pool: &PostgresPool) -> Result<(), DataLayerError> { + let mut tx = pool.begin().await.map_err(postgres_error)?; + sqlx::query("SET LOCAL lock_timeout = '2s'") + .execute(&mut *tx) + .await + .map_err(postgres_error)?; + sqlx::query("TRUNCATE TABLE usage_body_blobs") + .execute(&mut *tx) + .await + .map_err(postgres_error)?; + tx.commit().await.map_err(postgres_error)?; + Ok(()) +} + async fn cleanup_usage_compressed_body_fields( pool: &PostgresPool, cutoff_time: DateTime, batch_size: usize, ) -> Result { + if let Err(err) = truncate_usage_body_blobs_table(pool).await { + warn!( + error = %err, + "usage cleanup truncate usage_body_blobs table failed or timed out, falling back to batch deletion" + ); + } let mut total_cleaned = 0usize; loop { let rows = fetch_usage_body_cleanup_rows(