mirror of https://github.com/waku-org/nwaku.git
chore: postgres_driver - acquire/release advisory lock when creating partitions (#2784)
This commit is contained in:
parent
005349ccfe
commit
c5d19c4491
|
@ -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"""
|
||||
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue