core, eth: fix database version (#18429)
* core, eth: fix database version * eth: polish error message
This commit is contained in:
parent
2eb838ed97
commit
d5cad488be
@ -65,7 +65,7 @@ const (
|
|||||||
triesInMemory = 128
|
triesInMemory = 128
|
||||||
|
|
||||||
// BlockChainVersion ensures that an incompatible database forces a resync from scratch.
|
// BlockChainVersion ensures that an incompatible database forces a resync from scratch.
|
||||||
BlockChainVersion = 3
|
BlockChainVersion uint64 = 3
|
||||||
)
|
)
|
||||||
|
|
||||||
// CacheConfig contains the configuration values for the trie caching/pruning
|
// CacheConfig contains the configuration values for the trie caching/pruning
|
||||||
|
@ -26,19 +26,27 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// ReadDatabaseVersion retrieves the version number of the database.
|
// ReadDatabaseVersion retrieves the version number of the database.
|
||||||
func ReadDatabaseVersion(db DatabaseReader) int {
|
func ReadDatabaseVersion(db DatabaseReader) *uint64 {
|
||||||
var version int
|
var version uint64
|
||||||
|
|
||||||
enc, _ := db.Get(databaseVerisionKey)
|
enc, _ := db.Get(databaseVerisionKey)
|
||||||
rlp.DecodeBytes(enc, &version)
|
if len(enc) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if err := rlp.DecodeBytes(enc, &version); err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
return version
|
return &version
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteDatabaseVersion stores the version number of the database
|
// WriteDatabaseVersion stores the version number of the database
|
||||||
func WriteDatabaseVersion(db DatabaseWriter, version int) {
|
func WriteDatabaseVersion(db DatabaseWriter, version uint64) {
|
||||||
enc, _ := rlp.EncodeToBytes(version)
|
enc, err := rlp.EncodeToBytes(version)
|
||||||
if err := db.Put(databaseVerisionKey, enc); err != nil {
|
if err != nil {
|
||||||
|
log.Crit("Failed to encode database version", "err", err)
|
||||||
|
}
|
||||||
|
if err = db.Put(databaseVerisionKey, enc); err != nil {
|
||||||
log.Crit("Failed to store the database version", "err", err)
|
log.Crit("Failed to store the database version", "err", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -143,8 +143,10 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) {
|
|||||||
|
|
||||||
if !config.SkipBcVersionCheck {
|
if !config.SkipBcVersionCheck {
|
||||||
bcVersion := rawdb.ReadDatabaseVersion(chainDb)
|
bcVersion := rawdb.ReadDatabaseVersion(chainDb)
|
||||||
if bcVersion != core.BlockChainVersion && bcVersion != 0 {
|
if bcVersion != nil && *bcVersion > core.BlockChainVersion {
|
||||||
return nil, fmt.Errorf("Blockchain DB version mismatch (%d / %d).\n", bcVersion, core.BlockChainVersion)
|
return nil, fmt.Errorf("database version is v%d, Geth %s only supports v%d", *bcVersion, params.VersionWithMeta, core.BlockChainVersion)
|
||||||
|
} else if bcVersion != nil && *bcVersion < core.BlockChainVersion {
|
||||||
|
log.Warn("Upgrade blockchain database version", "from", *bcVersion, "to", core.BlockChainVersion)
|
||||||
}
|
}
|
||||||
rawdb.WriteDatabaseVersion(chainDb, core.BlockChainVersion)
|
rawdb.WriteDatabaseVersion(chainDb, core.BlockChainVersion)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user