From aaa0abc8a957208f578841a763ab8c98a8f5ee37 Mon Sep 17 00:00:00 2001 From: ziggie Date: Tue, 19 Nov 2024 15:16:10 +0100 Subject: [PATCH] wtdb: export versions of wtclient.db We now make it possible to get the current db version of the wtclient.db. Moreover we can now fetch the latest available migration version for the client db. This allows us to compare whether the client.db has all the expected migrations applied. --- watchtower/wtdb/version.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/watchtower/wtdb/version.go b/watchtower/wtdb/version.go index dd9c55472..7267c4d79 100644 --- a/watchtower/wtdb/version.go +++ b/watchtower/wtdb/version.go @@ -78,6 +78,12 @@ func getLatestDBVersion(versions []version) uint32 { return uint32(len(versions)) } +// LatestDBMigrationVersion returns the number of the latest existing database +// migration version available. +func LatestDBMigrationVersion() uint32 { + return getLatestDBVersion(clientDBVersions) +} + // getMigrations returns a slice of all updates with a greater number that // curVersion that need to be applied to sync up with the latest version. func getMigrations(versions []version, curVersion uint32) []version { @@ -91,6 +97,27 @@ func getMigrations(versions []version, curVersion uint32) []version { return updates } +// CurrentDatabaseVersion reads the current database version from the database +// and returns it. +func CurrentDatabaseVersion(db kvdb.Backend) (uint32, error) { + var ( + version uint32 + err error + ) + + err = kvdb.View(db, func(tx kvdb.RTx) error { + version, err = getDBVersion(tx) + return err + }, func() { + version = 0 + }) + if err != nil { + return 0, err + } + + return version, nil +} + // getDBVersion retrieves the current database version from the metadata bucket // using the dbVersionKey. func getDBVersion(tx kvdb.RTx) (uint32, error) {