From 32a440c593a262d2498f835b9a2e9f918cbb27f3 Mon Sep 17 00:00:00 2001 From: --systemdf Date: Wed, 4 Jun 2025 14:53:09 +0100 Subject: [PATCH 1/3] fix query --- Cargo.lock | 2 +- auction-server/Cargo.toml | 2 +- auction-server/src/kernel/workers.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5043fae8..b5081a9c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -653,7 +653,7 @@ dependencies = [ [[package]] name = "auction-server" -version = "0.32.0" +version = "0.32.1" dependencies = [ "anchor-lang", "anchor-lang-idl", diff --git a/auction-server/Cargo.toml b/auction-server/Cargo.toml index 3ea5fbda..806d1743 100644 --- a/auction-server/Cargo.toml +++ b/auction-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "auction-server" -version = "0.32.0" +version = "0.32.1" edition = "2021" license-file = "license.txt" diff --git a/auction-server/src/kernel/workers.rs b/auction-server/src/kernel/workers.rs index e06b7a32..33261882 100644 --- a/auction-server/src/kernel/workers.rs +++ b/auction-server/src/kernel/workers.rs @@ -179,7 +179,7 @@ pub async fn delete_pg_db_opportunity_history( let threshold = OffsetDateTime::now_utc() - Duration::from_secs(delete_threshold_secs); let n_opportunities_deleted = sqlx::query!( "WITH rows_to_delete AS ( - SELECT id FROM opportunity WHERE chain_id = $1 AND creation_time < $2 LIMIT $3 + SELECT id FROM opportunity WHERE chain_id = $1 AND creation_time < $2 AND removal_time IS NOT NULL LIMIT $3 ) DELETE FROM opportunity WHERE id IN (SELECT id FROM rows_to_delete)", chain_id, PrimitiveDateTime::new(threshold.date(), threshold.time()), From 3a815f2d6a678a590830bebdc85c28901449cfe6 Mon Sep 17 00:00:00 2001 From: --systemdf Date: Wed, 4 Jun 2025 14:54:56 +0100 Subject: [PATCH 2/3] sqlx prepare --- ...589f0e0ec63e0279f9d057ee24ffe6e4ff10552d4650dd2a4cbc.json} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename auction-server/.sqlx/{query-da61b53df51ffad6f7ed8baa1dccd42901a70a3d1ff736d5cafc6aaa6edf3669.json => query-1a19c166fe39589f0e0ec63e0279f9d057ee24ffe6e4ff10552d4650dd2a4cbc.json} (50%) diff --git a/auction-server/.sqlx/query-da61b53df51ffad6f7ed8baa1dccd42901a70a3d1ff736d5cafc6aaa6edf3669.json b/auction-server/.sqlx/query-1a19c166fe39589f0e0ec63e0279f9d057ee24ffe6e4ff10552d4650dd2a4cbc.json similarity index 50% rename from auction-server/.sqlx/query-da61b53df51ffad6f7ed8baa1dccd42901a70a3d1ff736d5cafc6aaa6edf3669.json rename to auction-server/.sqlx/query-1a19c166fe39589f0e0ec63e0279f9d057ee24ffe6e4ff10552d4650dd2a4cbc.json index 5cffde84..2a100b42 100644 --- a/auction-server/.sqlx/query-da61b53df51ffad6f7ed8baa1dccd42901a70a3d1ff736d5cafc6aaa6edf3669.json +++ b/auction-server/.sqlx/query-1a19c166fe39589f0e0ec63e0279f9d057ee24ffe6e4ff10552d4650dd2a4cbc.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "WITH rows_to_delete AS (\n SELECT id FROM opportunity WHERE chain_id = $1 AND creation_time < $2 LIMIT $3\n ) DELETE FROM opportunity WHERE id IN (SELECT id FROM rows_to_delete)", + "query": "WITH rows_to_delete AS (\n SELECT id FROM opportunity WHERE chain_id = $1 AND creation_time < $2 AND removal_time IS NOT NULL LIMIT $3\n ) DELETE FROM opportunity WHERE id IN (SELECT id FROM rows_to_delete)", "describe": { "columns": [], "parameters": { @@ -12,5 +12,5 @@ }, "nullable": [] }, - "hash": "da61b53df51ffad6f7ed8baa1dccd42901a70a3d1ff736d5cafc6aaa6edf3669" + "hash": "1a19c166fe39589f0e0ec63e0279f9d057ee24ffe6e4ff10552d4650dd2a4cbc" } From 79213decfb057fbaba4b588ec5401722d08a8850 Mon Sep 17 00:00:00 2001 From: --systemdf Date: Wed, 4 Jun 2025 17:04:48 +0100 Subject: [PATCH 3/3] add comment --- auction-server/src/kernel/workers.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/auction-server/src/kernel/workers.rs b/auction-server/src/kernel/workers.rs index 33261882..f964d194 100644 --- a/auction-server/src/kernel/workers.rs +++ b/auction-server/src/kernel/workers.rs @@ -177,6 +177,9 @@ pub async fn delete_pg_db_opportunity_history( delete_threshold_secs: u64, ) -> anyhow::Result<()> { let threshold = OffsetDateTime::now_utc() - Duration::from_secs(delete_threshold_secs); + // TODO: we filter based on removal_time being not null because some Limo opportunities may be valid longer than the delete threshold. + // However, this makes it so that we don't delete opportunities that are not removed yet, including unremoved ones due to server restarts + // and bugs in the code. As this leads to a low memory leak, we should consider a better way to handle this in the future. let n_opportunities_deleted = sqlx::query!( "WITH rows_to_delete AS ( SELECT id FROM opportunity WHERE chain_id = $1 AND creation_time < $2 AND removal_time IS NOT NULL LIMIT $3