Skip to content

Commit 60c0f7f

Browse files
committed
core, eth: fix database version
1 parent 38cce9a commit 60c0f7f

File tree

3 files changed

+20
-10
lines changed

3 files changed

+20
-10
lines changed

core/blockchain.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ const (
6565
triesInMemory = 128
6666

6767
// BlockChainVersion ensures that an incompatible database forces a resync from scratch.
68-
BlockChainVersion = 3
68+
BlockChainVersion uint64 = 3
6969
)
7070

7171
// CacheConfig contains the configuration values for the trie caching/pruning

core/rawdb/accessors_metadata.go

+15-7
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,27 @@ import (
2626
)
2727

2828
// ReadDatabaseVersion retrieves the version number of the database.
29-
func ReadDatabaseVersion(db DatabaseReader) int {
30-
var version int
29+
func ReadDatabaseVersion(db DatabaseReader) *uint64 {
30+
var version uint64
3131

3232
enc, _ := db.Get(databaseVerisionKey)
33-
rlp.DecodeBytes(enc, &version)
33+
if len(enc) == 0 {
34+
return nil
35+
}
36+
if err := rlp.DecodeBytes(enc, &version); err != nil {
37+
return nil
38+
}
3439

35-
return version
40+
return &version
3641
}
3742

3843
// WriteDatabaseVersion stores the version number of the database
39-
func WriteDatabaseVersion(db DatabaseWriter, version int) {
40-
enc, _ := rlp.EncodeToBytes(version)
41-
if err := db.Put(databaseVerisionKey, enc); err != nil {
44+
func WriteDatabaseVersion(db DatabaseWriter, version uint64) {
45+
enc, err := rlp.EncodeToBytes(version)
46+
if err != nil {
47+
log.Crit("Failed to encode database version", "err", err)
48+
}
49+
if err = db.Put(databaseVerisionKey, enc); err != nil {
4250
log.Crit("Failed to store the database version", "err", err)
4351
}
4452
}

eth/backend.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,10 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) {
143143

144144
if !config.SkipBcVersionCheck {
145145
bcVersion := rawdb.ReadDatabaseVersion(chainDb)
146-
if bcVersion != core.BlockChainVersion && bcVersion != 0 {
147-
return nil, fmt.Errorf("Blockchain DB version mismatch (%d / %d).\n", bcVersion, core.BlockChainVersion)
146+
if bcVersion != nil && *bcVersion > core.BlockChainVersion {
147+
return nil, fmt.Errorf("Blockchain DB version mismatch (%d / %d).\n", *bcVersion, core.BlockChainVersion)
148+
} else if bcVersion != nil && *bcVersion < core.BlockChainVersion {
149+
log.Warn("Upgrade blockchain DB version", "from", *bcVersion, "to", core.BlockChainVersion)
148150
}
149151
rawdb.WriteDatabaseVersion(chainDb, core.BlockChainVersion)
150152
}

0 commit comments

Comments
 (0)