forked from cerc-io/plugeth
Merge pull request #3721 from karalabe/drop-legacy-db-updates
core, eth: drop database block splitting upgrader
This commit is contained in:
commit
d4f60d362b
@ -539,24 +539,6 @@ func DeleteReceipt(db ethdb.Database, hash common.Hash) {
|
|||||||
db.Delete(append(receiptsPrefix, hash.Bytes()...))
|
db.Delete(append(receiptsPrefix, hash.Bytes()...))
|
||||||
}
|
}
|
||||||
|
|
||||||
// [deprecated by the header/block split, remove eventually]
|
|
||||||
// GetBlockByHashOld returns the old combined block corresponding to the hash
|
|
||||||
// or nil if not found. This method is only used by the upgrade mechanism to
|
|
||||||
// access the old combined block representation. It will be dropped after the
|
|
||||||
// network transitions to eth/63.
|
|
||||||
func GetBlockByHashOld(db ethdb.Database, hash common.Hash) *types.Block {
|
|
||||||
data, _ := db.Get(append(oldBlockHashPrefix, hash[:]...))
|
|
||||||
if len(data) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
var block types.StorageBlock
|
|
||||||
if err := rlp.Decode(bytes.NewReader(data), &block); err != nil {
|
|
||||||
log.Error(fmt.Sprintf("invalid block RLP for hash %x: %v", hash, err))
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return (*types.Block)(&block)
|
|
||||||
}
|
|
||||||
|
|
||||||
// returns a formatted MIP mapped key by adding prefix, canonical number and level
|
// returns a formatted MIP mapped key by adding prefix, canonical number and level
|
||||||
//
|
//
|
||||||
// ex. fn(98, 1000) = (prefix || 1000 || 0)
|
// ex. fn(98, 1000) = (prefix || 1000 || 0)
|
||||||
|
@ -176,9 +176,6 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) {
|
|||||||
solcPath: config.SolcPath,
|
solcPath: config.SolcPath,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := upgradeChainDatabase(chainDb); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if err := addMipmapBloomBins(chainDb); err != nil {
|
if err := addMipmapBloomBins(chainDb); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -252,65 +252,6 @@ func upgradeSequentialBlockData(db ethdb.Database, hash []byte) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// upgradeChainDatabase ensures that the chain database stores block split into
|
|
||||||
// separate header and body entries.
|
|
||||||
func upgradeChainDatabase(db ethdb.Database) error {
|
|
||||||
// Short circuit if the head block is stored already as separate header and body
|
|
||||||
data, err := db.Get([]byte("LastBlock"))
|
|
||||||
if err != nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
head := common.BytesToHash(data)
|
|
||||||
|
|
||||||
if block := core.GetBlockByHashOld(db, head); block == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
// At least some of the database is still the old format, upgrade (skip the head block!)
|
|
||||||
log.Info(fmt.Sprint("Old database detected, upgrading..."))
|
|
||||||
|
|
||||||
if db, ok := db.(*ethdb.LDBDatabase); ok {
|
|
||||||
blockPrefix := []byte("block-hash-")
|
|
||||||
for it := db.NewIterator(); it.Next(); {
|
|
||||||
// Skip anything other than a combined block
|
|
||||||
if !bytes.HasPrefix(it.Key(), blockPrefix) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
// Skip the head block (merge last to signal upgrade completion)
|
|
||||||
if bytes.HasSuffix(it.Key(), head.Bytes()) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
// Load the block, split and serialize (order!)
|
|
||||||
block := core.GetBlockByHashOld(db, common.BytesToHash(bytes.TrimPrefix(it.Key(), blockPrefix)))
|
|
||||||
|
|
||||||
if err := core.WriteTd(db, block.Hash(), block.NumberU64(), block.DeprecatedTd()); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := core.WriteBody(db, block.Hash(), block.NumberU64(), block.Body()); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := core.WriteHeader(db, block.Header()); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := db.Delete(it.Key()); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Lastly, upgrade the head block, disabling the upgrade mechanism
|
|
||||||
current := core.GetBlockByHashOld(db, head)
|
|
||||||
|
|
||||||
if err := core.WriteTd(db, current.Hash(), current.NumberU64(), current.DeprecatedTd()); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := core.WriteBody(db, current.Hash(), current.NumberU64(), current.Body()); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := core.WriteHeader(db, current.Header()); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func addMipmapBloomBins(db ethdb.Database) (err error) {
|
func addMipmapBloomBins(db ethdb.Database) (err error) {
|
||||||
const mipmapVersion uint = 2
|
const mipmapVersion uint = 2
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user