Skip to content

Commit

Permalink
chore: postgres_driver - acquire/release advisory lock when creating …
Browse files Browse the repository at this point in the history
…partitions (#2784)
  • Loading branch information
Ivansete-status authored Jun 7, 2024
1 parent 005349c commit c5d19c4
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion waku/waku_archive/driver/postgres_driver/postgres_driver.nim
Original file line number Diff line number Diff line change
Expand Up @@ -883,7 +883,7 @@ proc acquireDatabaseLock*(
proc releaseDatabaseLock*(
s: PostgresDriver, lockId: int = 841886
): Future[ArchiveDriverResult[void]] {.async.} =
## Acquire an advisory lock (useful to avoid more than one application running migrations at the same time)
## Release an advisory lock (useful to avoid more than one application running migrations at the same time)
let unlocked = (
await s.getStr(
fmt"""
Expand Down Expand Up @@ -930,6 +930,16 @@ proc addPartition(
"CREATE TABLE IF NOT EXISTS " & partitionName & " PARTITION OF " &
"messages FOR VALUES FROM ('" & fromInNanoSec & "') TO ('" & untilInNanoSec & "');"

# Lock the db
(await self.acquireDatabaseLock()).isOkOr:
error "failed to acquire lock", error = error
return err("failed to lock the db")

defer:
(await self.releaseDatabaseLock()).isOkOr:
error "failed to release lock", error = error
return err("failed to unlock the db.")

(await self.performWriteQuery(createPartitionQuery)).isOkOr:
if error.contains("already exists"):
debug "skip create new partition as it already exists: ", skipped_error = $error
Expand Down

0 comments on commit c5d19c4

Please sign in to comment.