mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00

* Add version file to database * Remove redundant code * Check for version before opening the database, create version file after * Create version file before opening the database
58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
package app
|
|
|
|
import (
|
|
"os"
|
|
"path"
|
|
"strconv"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
const currentDatabaseVersion = 1
|
|
|
|
func checkDatabaseVersion(dbPath string) (err error) {
|
|
versionFileName := versionFilePath(dbPath)
|
|
|
|
versionBytes, err := os.ReadFile(versionFileName)
|
|
if err != nil {
|
|
if os.IsNotExist(err) { // If version file doesn't exist, we assume that the database is new
|
|
return createDatabaseVersionFile(dbPath, versionFileName)
|
|
}
|
|
return err
|
|
}
|
|
|
|
databaseVersion, err := strconv.Atoi(string(versionBytes))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if databaseVersion != currentDatabaseVersion {
|
|
// TODO: Once there's more then one database version, it might make sense to add upgrade logic at this point
|
|
return errors.Errorf("Invalid database version %d. Expected version: %d", databaseVersion, currentDatabaseVersion)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func createDatabaseVersionFile(dbPath string, versionFileName string) error {
|
|
err := os.MkdirAll(dbPath, 0700)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
versionFile, err := os.Create(versionFileName)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
defer versionFile.Close()
|
|
|
|
versionString := strconv.Itoa(currentDatabaseVersion)
|
|
_, err = versionFile.Write([]byte(versionString))
|
|
return err
|
|
}
|
|
|
|
func versionFilePath(dbPath string) string {
|
|
dbVersionFileName := path.Join(dbPath, "version")
|
|
return dbVersionFileName
|
|
}
|