Skip to content

Commit 95d405a

Browse files
authored
Merge pull request #398 from OffchainLabs/triedb_commit_maintenance
Flush triedb function
2 parents 2bbf552 + 92e3134 commit 95d405a

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

core/blockchain.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ var (
7878

7979
triedbCommitTimer = metrics.NewRegisteredResettingTimer("chain/triedb/commits", nil)
8080

81+
triedbSizeGauge = metrics.NewRegisteredGauge("chain/triedb/size", nil)
82+
triedbGCProcGauge = metrics.NewRegisteredGauge("chain/triedb/gcproc", nil)
83+
8184
blockInsertTimer = metrics.NewRegisteredResettingTimer("chain/inserts", nil)
8285
blockValidationTimer = metrics.NewRegisteredResettingTimer("chain/validation", nil)
8386
blockExecutionTimer = metrics.NewRegisteredResettingTimer("chain/execution", nil)
@@ -1654,6 +1657,11 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types.
16541657
bc.triedb.Dereference(prevEntry.Root)
16551658
}
16561659
}
1660+
1661+
_, dirtyNodesBufferedSize, _ := bc.triedb.Size()
1662+
triedbSizeGauge.Update(int64(dirtyNodesBufferedSize))
1663+
triedbGCProcGauge.Update(int64(bc.gcproc))
1664+
16571665
return nil
16581666
}
16591667

core/blockchain_arbitrum.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,51 @@ package core
1919

2020
import (
2121
"fmt"
22+
"sync"
2223
"time"
2324

25+
"github.com/ethereum/go-ethereum/common"
26+
"github.com/ethereum/go-ethereum/core/rawdb"
2427
"github.com/ethereum/go-ethereum/core/state"
2528
"github.com/ethereum/go-ethereum/core/types"
2629
"github.com/ethereum/go-ethereum/log"
2730
"github.com/ethereum/go-ethereum/rpc"
2831
)
2932

33+
func (bc *BlockChain) FlushTrieDB(advanceBlockChainMutex *sync.Mutex, capLimit common.StorageSize) error {
34+
if bc.triedb.Scheme() == rawdb.PathScheme {
35+
return nil
36+
}
37+
38+
advanceBlockChainMutex.Lock()
39+
defer advanceBlockChainMutex.Unlock()
40+
41+
if !bc.triegc.Empty() {
42+
_, triegcBlockNumber := bc.triegc.Peek()
43+
blockNumber := uint64(-triegcBlockNumber)
44+
45+
header := bc.GetHeaderByNumber(blockNumber)
46+
if header == nil {
47+
log.Warn("Reorg in progress, trie commit postponed")
48+
} else {
49+
err := bc.triedb.Commit(header.Root, true)
50+
if err != nil {
51+
return err
52+
}
53+
54+
bc.gcproc = 0
55+
bc.lastWrite = blockNumber
56+
}
57+
}
58+
59+
err := bc.triedb.Cap(capLimit)
60+
if err != nil {
61+
return err
62+
}
63+
64+
return nil
65+
}
66+
3067
// WriteBlockAndSetHeadWithTime also counts processTime, which will cause intermittent TrieDirty cache writes
3168
func (bc *BlockChain) WriteBlockAndSetHeadWithTime(block *types.Block, receipts []*types.Receipt, logs []*types.Log, state *state.StateDB, emitHeadEvent bool, processTime time.Duration) (status WriteStatus, err error) {
3269
if !bc.chainmu.TryLock() {

0 commit comments

Comments
 (0)