Commit 6ca3a446 authored by obscuren's avatar obscuren Committed by Jeffrey Wilcke

core: switched to proper LRU

parent 4460dc9d
...@@ -21,7 +21,7 @@ import ( ...@@ -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 { ...@@ -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) { ...@@ -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() { ...@@ -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() { ...@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment