mirror of
https://github.com/waku-org/nwaku.git
synced 2025-01-21 04:10:49 +00:00
f54ba10bc7
* queue driver refactor (#2753) * chore(archive): archive refactor (#2752) * chore(archive): sqlite driver refactor (#2754) * chore(archive): postgres driver refactor (#2755) * chore(archive): renaming & copies (#2751) * posgres legacy: stop using the storedAt field * migration script 6: we still need the id column The id column is needed because it contains the message digest which is used in store v2, and we need to keep support to store v2 for a while * legacy archive: set target migration version to 6 * waku_node: try to use wakuLegacyArchive if wakuArchive is nil * node_factory, waku_node: mount legacy and future store simultaneously We want the nwaku node to simultaneously support store-v2 requests and store-v3 requests. Only the legacy archive is in charge of archiving messages, and the archived information is suitable to fulfill both store-v2 and store-v3 needs. * postgres_driver: adding temporary code until store-v2 is removed --------- Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Co-authored-by: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Co-authored-by: Ivan Folgueira Bande <ivansete@status.im>
90 lines
2.7 KiB
Nim
90 lines
2.7 KiB
Nim
{.push raises: [].}
|
|
|
|
import std/strutils, results, chronicles, chronos
|
|
import
|
|
../../../common/databases/common,
|
|
../../../../migrations/message_store_postgres/pg_migration_manager,
|
|
../postgres_driver
|
|
|
|
logScope:
|
|
topics = "waku archive migration"
|
|
|
|
const SchemaVersion* = 6 # increase this when there is an update in the database schema
|
|
|
|
proc breakIntoStatements*(script: string): seq[string] =
|
|
## Given a full migration script, that can potentially contain a list
|
|
## of SQL statements, this proc splits it into the contained isolated statements
|
|
## that should be executed one after the other.
|
|
var statements = newSeq[string]()
|
|
|
|
let lines = script.split('\n')
|
|
|
|
var simpleStmt: string
|
|
var plSqlStatement: string
|
|
var insidePlSqlScript = false
|
|
for line in lines:
|
|
if line.strip().len == 0:
|
|
continue
|
|
|
|
if insidePlSqlScript:
|
|
if line.contains("END $$"):
|
|
## End of the Pl/SQL script
|
|
plSqlStatement &= line
|
|
statements.add(plSqlStatement)
|
|
plSqlStatement = ""
|
|
insidePlSqlScript = false
|
|
continue
|
|
else:
|
|
plSqlStatement &= line & "\n"
|
|
|
|
if line.contains("DO $$"):
|
|
## Beginning of the Pl/SQL script
|
|
insidePlSqlScript = true
|
|
plSqlStatement &= line & "\n"
|
|
|
|
if not insidePlSqlScript:
|
|
if line.contains(';'):
|
|
## End of simple statement
|
|
simpleStmt &= line
|
|
statements.add(simpleStmt)
|
|
simpleStmt = ""
|
|
else:
|
|
simpleStmt &= line & "\n"
|
|
|
|
return statements
|
|
|
|
proc migrate*(
|
|
driver: PostgresDriver, targetVersion = SchemaVersion
|
|
): Future[DatabaseResult[void]] {.async.} =
|
|
debug "starting message store's postgres database migration"
|
|
|
|
let currentVersion = (await driver.getCurrentVersion()).valueOr:
|
|
return err("migrate error could not retrieve current version: " & $error)
|
|
|
|
if currentVersion == targetVersion:
|
|
debug "database schema is up to date",
|
|
currentVersion = currentVersion, targetVersion = targetVersion
|
|
return ok()
|
|
|
|
info "database schema is outdated",
|
|
currentVersion = currentVersion, targetVersion = targetVersion
|
|
|
|
# Load migration scripts
|
|
let scripts = pg_migration_manager.getMigrationScripts(currentVersion, targetVersion)
|
|
|
|
# Run the migration scripts
|
|
for script in scripts:
|
|
for statement in script.breakIntoStatements():
|
|
debug "executing migration statement", statement = statement
|
|
|
|
(await driver.performWriteQuery(statement)).isOkOr:
|
|
error "failed to execute migration statement",
|
|
statement = statement, error = error
|
|
return err("failed to execute migration statement")
|
|
|
|
debug "migration statement executed succesfully", statement = statement
|
|
|
|
debug "finished message store's postgres database migration"
|
|
|
|
return ok()
|