From 0305a3c0a03439759ea5bd7ac6f68eabad0ec8df Mon Sep 17 00:00:00 2001 From: Fabiana Cecin Date: Tue, 16 Dec 2025 15:46:20 -0300 Subject: [PATCH 1/2] fix: prevent race condition in postgres driver tests * add PostgresDriver.waitForPartition * wait for a partition for 5s in archive driver tests setup --- tests/waku_archive/test_driver_postgres.nim | 2 ++ .../waku_archive/test_driver_postgres_query.nim | 2 ++ .../driver/postgres_driver/postgres_driver.nim | 16 ++++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/tests/waku_archive/test_driver_postgres.nim b/tests/waku_archive/test_driver_postgres.nim index 34a428615..78b71d707 100644 --- a/tests/waku_archive/test_driver_postgres.nim +++ b/tests/waku_archive/test_driver_postgres.nim @@ -23,6 +23,8 @@ suite "Postgres driver": driver = PostgresDriver(driverRes.get()) + (await driver.waitForPartition()).expect("Test has no DB partition") + asyncTeardown: let resetRes = await driver.reset() if resetRes.isErr(): diff --git a/tests/waku_archive/test_driver_postgres_query.nim b/tests/waku_archive/test_driver_postgres_query.nim index 8bbdc52c0..872580737 100644 --- a/tests/waku_archive/test_driver_postgres_query.nim +++ b/tests/waku_archive/test_driver_postgres_query.nim @@ -38,6 +38,8 @@ suite "Postgres driver - queries": driver = PostgresDriver(driverRes.get()) + (await driver.waitForPartition()).expect("Test has no DB partition") + asyncTeardown: let resetRes = await driver.reset() diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index 9b0e14c84..fb23e583a 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -1422,6 +1422,22 @@ proc removeOldestPartition( proc containsAnyPartition*(self: PostgresDriver): bool = return not self.partitionMngr.isEmpty() +proc waitForPartition*( + self: PostgresDriver, timeout = chronos.seconds(5) +): Future[ArchiveDriverResult[void]] {.async.} = + + let pollInterval = chronos.milliseconds(100) + var elapsed = chronos.milliseconds(0) + + while elapsed < timeout: + if self.containsAnyPartition(): + return ok() + + await sleepAsync(pollInterval) + elapsed += pollInterval + + return err("PostgresDriver.waitForPartition() timed out after " & $timeout) + method decreaseDatabaseSize*( driver: PostgresDriver, targetSizeInBytes: int64, forceRemoval: bool = false ): Future[ArchiveDriverResult[void]] {.async.} = From 56fd4ed639b30036cea182cb7158c517770f44d1 Mon Sep 17 00:00:00 2001 From: Fabiana Cecin Date: Tue, 16 Dec 2025 16:39:19 -0300 Subject: [PATCH 2/2] fix linter complaint --- waku/waku_archive/driver/postgres_driver/postgres_driver.nim | 1 - 1 file changed, 1 deletion(-) diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index fb23e583a..84da050ce 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -1425,7 +1425,6 @@ proc containsAnyPartition*(self: PostgresDriver): bool = proc waitForPartition*( self: PostgresDriver, timeout = chronos.seconds(5) ): Future[ArchiveDriverResult[void]] {.async.} = - let pollInterval = chronos.milliseconds(100) var elapsed = chronos.milliseconds(0)