core: switched to proper LRU
This commit is contained in:
parent
4460dc9d1a
commit
6ca3a44638
|
@ -21,7 +21,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/params"
|
"github.com/ethereum/go-ethereum/params"
|
||||||
"github.com/ethereum/go-ethereum/pow"
|
"github.com/ethereum/go-ethereum/pow"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
"github.com/golang/groupcache/lru"
|
"github.com/hashicorp/golang-lru"
|
||||||
"github.com/syndtr/goleveldb/leveldb"
|
"github.com/syndtr/goleveldb/leveldb"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -121,13 +121,14 @@ type ChainManager struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewChainManager(genesis *types.Block, blockDb, stateDb common.Database, pow pow.PoW, mux *event.TypeMux) (*ChainManager, error) {
|
func NewChainManager(genesis *types.Block, blockDb, stateDb common.Database, pow pow.PoW, mux *event.TypeMux) (*ChainManager, error) {
|
||||||
|
cache, _ := lru.New(blockCacheLimit)
|
||||||
bc := &ChainManager{
|
bc := &ChainManager{
|
||||||
blockDb: blockDb,
|
blockDb: blockDb,
|
||||||
stateDb: stateDb,
|
stateDb: stateDb,
|
||||||
genesisBlock: GenesisBlock(42, stateDb),
|
genesisBlock: GenesisBlock(42, stateDb),
|
||||||
eventMux: mux,
|
eventMux: mux,
|
||||||
quit: make(chan struct{}),
|
quit: make(chan struct{}),
|
||||||
cache: lru.New(blockCacheLimit),
|
cache: cache,
|
||||||
pow: pow,
|
pow: pow,
|
||||||
}
|
}
|
||||||
// Check the genesis block given to the chain manager. If the genesis block mismatches block number 0
|
// Check the genesis block given to the chain manager. If the genesis block mismatches block number 0
|
||||||
|
@ -172,7 +173,7 @@ func (bc *ChainManager) SetHead(head *types.Block) {
|
||||||
bc.removeBlock(block)
|
bc.removeBlock(block)
|
||||||
}
|
}
|
||||||
|
|
||||||
bc.cache = lru.New(blockCacheLimit)
|
bc.cache, _ = lru.New(blockCacheLimit)
|
||||||
bc.currentBlock = head
|
bc.currentBlock = head
|
||||||
bc.makeCache()
|
bc.makeCache()
|
||||||
|
|
||||||
|
@ -260,9 +261,7 @@ func (bc *ChainManager) setLastState() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bc *ChainManager) makeCache() {
|
func (bc *ChainManager) makeCache() {
|
||||||
if bc.cache == nil {
|
bc.cache, _ = lru.New(blockCacheLimit)
|
||||||
bc.cache = lru.New(blockCacheLimit)
|
|
||||||
}
|
|
||||||
// load in last `blockCacheLimit` - 1 blocks. Last block is the current.
|
// load in last `blockCacheLimit` - 1 blocks. Last block is the current.
|
||||||
ancestors := bc.GetAncestors(bc.currentBlock, blockCacheLimit-1)
|
ancestors := bc.GetAncestors(bc.currentBlock, blockCacheLimit-1)
|
||||||
ancestors = append(ancestors, bc.currentBlock)
|
ancestors = append(ancestors, bc.currentBlock)
|
||||||
|
@ -279,9 +278,7 @@ func (bc *ChainManager) Reset() {
|
||||||
bc.removeBlock(block)
|
bc.removeBlock(block)
|
||||||
}
|
}
|
||||||
|
|
||||||
if bc.cache == nil {
|
bc.cache, _ = lru.New(blockCacheLimit)
|
||||||
bc.cache = lru.New(blockCacheLimit)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prepare the genesis block
|
// Prepare the genesis block
|
||||||
bc.write(bc.genesisBlock)
|
bc.write(bc.genesisBlock)
|
||||||
|
|
Loading…
Reference in New Issue