From f2047cc503421e99f9dad66e1fe95e660ade9ea3 Mon Sep 17 00:00:00 2001 From: Elizabeth Engelman Date: Thu, 14 Feb 2019 15:46:03 -0600 Subject: [PATCH] Address PR comments --- cmd/geth/config.go | 9 ++++----- core/blockchain.go | 26 ++++++++------------------ 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/cmd/geth/config.go b/cmd/geth/config.go index 54575ecb2b62..aafaa1375f82 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -155,12 +155,14 @@ func makeFullNode(ctx *cli.Context) *node.Node { if ctx.GlobalIsSet(utils.ConstantinopleOverrideFlag.Name) { cfg.Eth.ConstantinopleOverride = new(big.Int).SetUint64(ctx.GlobalUint64(utils.ConstantinopleOverrideFlag.Name)) } + + utils.RegisterEthService(stack, &cfg.Eth) + if ctx.GlobalBool(utils.StateDiffFlag.Name) { cfg.Eth.StateDiff = true + utils.RegisterStateDiffService(stack, ctx) } - utils.RegisterEthService(stack, &cfg.Eth) - if ctx.GlobalBool(utils.DashboardEnabledFlag.Name) { utils.RegisterDashboardService(stack, &cfg.Dashboard, gitCommit) } @@ -185,9 +187,6 @@ func makeFullNode(ctx *cli.Context) *node.Node { utils.RegisterEthStatsService(stack, cfg.Ethstats.URL) } - if ctx.GlobalBool(utils.StateDiffFlag.Name) { - utils.RegisterStateDiffService(stack, ctx) - } return stack } diff --git a/core/blockchain.go b/core/blockchain.go index 601a141181b8..ba96e69aeb3c 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -929,9 +929,6 @@ func (bc *BlockChain) WriteBlockWithoutState(block *types.Block, td *big.Int) (e func (bc *BlockChain) AddToStateDiffProcessedCollection(hash common.Hash) { count, ok := bc.stateDiffsProcessed[hash] - if count > 1 { - log.Error("count is too high", "count", count, "hash", hash.Hex()) - } if ok { count++ @@ -1015,28 +1012,14 @@ func (bc *BlockChain) WriteBlockWithState(block *types.Block, receipts []*types. } if bc.cacheConfig.ProcessStateDiffs { - count, ok := bc.stateDiffsProcessed[root.(common.Hash)] - //if we haven't processed the statediff for a given state root and it's child, don't dereference it yet - if !ok { - log.Debug("Current root NOT found root in stateDiffsProcessed", "root", root.(common.Hash).Hex()) - bc.triegc.Push(root, number) - break - } - if count < 2 { - log.Debug("Current root has not yet been processed for it's child", "root", root.(common.Hash).Hex()) + if !bc.allowedRootToBeDereferenced(root.(common.Hash)) { bc.triegc.Push(root, number) break } else { - log.Debug("Current root found in stateDiffsProcessed collection with a count of 2, okay to dereference", - "root", root.(common.Hash).Hex(), - "blockNumber", uint64(-number), - "size of stateDiffsProcessed", len(bc.stateDiffsProcessed)) - delete(bc.stateDiffsProcessed, root.(common.Hash)) } } - log.Debug("Dereferencing", "root", root.(common.Hash).Hex()) triedb.Dereference(root.(common.Hash)) } } @@ -1091,6 +1074,13 @@ func (bc *BlockChain) WriteBlockWithState(block *types.Block, receipts []*types. return status, nil } +//if we haven't processed the statediff for a given state root and it's child, don't dereference it yet +func (bc *BlockChain) allowedRootToBeDereferenced(root common.Hash) bool { + diffProcessedForSelfAndChildCount := 2 + count := bc.stateDiffsProcessed[root] + return count >= diffProcessedForSelfAndChildCount +} + // addFutureBlock checks if the block is within the max allowed window to get // accepted for future processing, and returns an error if the block is too far // ahead and was not added.