629a1c9d06
This commit modifies the way the data paths are handled. Since there will ultimately be more data associated with each network than just the block database, the data path has been modified to be "namespaced" based on the network. This allows all data associated with a specific network to simply use the data path without having to worry about conflicts with data from other networks. In addition, this commit renames the block database to "blocks" plus a suffix which denotes the database type. This prevents issues that would otherwise arise if the user decides to use a different database type and a file/folder with the same name already eixsts but is of the old database type. For most users this won't matter, but it does provide nice properties for testing and development as well since it makes it easy to go back and forth between database types. This commit also includes code to upgrade the old database paths to the new ones so the change is seamless for the user. Finally, bump the version to 0.2.0.
76 lines
2.3 KiB
Go
76 lines
2.3 KiB
Go
// Copyright (c) 2013 Conformal Systems LLC.
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package main
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
// upgradeDBPathNet moves the database for a specific network from its
|
|
// location prior to btcd version 0.2.0 and uses heuristics to ascertain the old
|
|
// database type to rename to the new format.
|
|
func upgradeDBPathNet(oldDbPath, netName string) error {
|
|
// Prior to version 0.2.0, the database was named the same thing for
|
|
// both sqlite and leveldb. Use heuristics to figure out the type
|
|
// of the database and move it to the new path and name introduced with
|
|
// version 0.2.0 accordingly.
|
|
fi, err := os.Stat(oldDbPath)
|
|
if err == nil {
|
|
oldDbType := "sqlite"
|
|
if fi.IsDir() {
|
|
oldDbType = "leveldb"
|
|
}
|
|
|
|
// The new database name is based on the database type and
|
|
// resides in the a directory named after the network type.
|
|
newDbRoot := filepath.Join(filepath.Dir(cfg.DataDir), netName)
|
|
newDbName := blockDbNamePrefix + "_" + oldDbType
|
|
if oldDbType == "sqlite" {
|
|
newDbName = newDbName + ".db"
|
|
}
|
|
newDbPath := filepath.Join(newDbRoot, newDbName)
|
|
|
|
// Create the new path if needed.
|
|
err = os.MkdirAll(newDbRoot, 0700)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Move and rename the old database.
|
|
err := os.Rename(oldDbPath, newDbPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// upgradeDBPaths moves the databases from their locations prior to btcd
|
|
// version 0.2.0 to their new locations.
|
|
func upgradeDBPaths() error {
|
|
// Prior to version 0.2.0, the databases were in the "db" directory and
|
|
// their names were suffixed by "testnet" and "regtest" for their
|
|
// respective networks. Check for the old database and update it to the
|
|
// new path introduced with version 0.2.0 accodingly.
|
|
oldDbRoot := filepath.Join(btcdHomeDir(), "db")
|
|
upgradeDBPathNet(filepath.Join(oldDbRoot, "btcd.db"), "mainnet")
|
|
upgradeDBPathNet(filepath.Join(oldDbRoot, "btcd_testnet.db"), "testnet")
|
|
upgradeDBPathNet(filepath.Join(oldDbRoot, "btcd_regtest.db"), "regtest")
|
|
|
|
// Remove the old db directory.
|
|
err := os.RemoveAll(oldDbRoot)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// doUpgrades performs upgrades to btcd as new versions require it.
|
|
func doUpgrades() error {
|
|
return upgradeDBPaths()
|
|
}
|