Skip to content

Commit ca7d82f

Browse files
Merge branch 'master' into opt-destroy-no-storage
2 parents d9957d0 + 95d405a commit ca7d82f

File tree

3 files changed

+49
-4
lines changed

3 files changed

+49
-4
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() {

triedb/hashdb/database.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,15 @@ var (
4646
memcacheDirtyReadMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/read", nil)
4747
memcacheDirtyWriteMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/write", nil)
4848

49-
memcacheFlushTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/flush/time", nil)
49+
memcacheFlushTimeTimer = metrics.NewRegisteredTimer("hashdb/memcache/flush/time", nil)
5050
memcacheFlushNodesMeter = metrics.NewRegisteredMeter("hashdb/memcache/flush/nodes", nil)
5151
memcacheFlushBytesMeter = metrics.NewRegisteredMeter("hashdb/memcache/flush/bytes", nil)
5252

5353
memcacheGCTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/gc/time", nil)
5454
memcacheGCNodesMeter = metrics.NewRegisteredMeter("hashdb/memcache/gc/nodes", nil)
5555
memcacheGCBytesMeter = metrics.NewRegisteredMeter("hashdb/memcache/gc/bytes", nil)
5656

57-
memcacheCommitTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/commit/time", nil)
57+
memcacheCommitTimeTimer = metrics.NewRegisteredTimer("hashdb/memcache/commit/time", nil)
5858
memcacheCommitNodesMeter = metrics.NewRegisteredMeter("hashdb/memcache/commit/nodes", nil)
5959
memcacheCommitBytesMeter = metrics.NewRegisteredMeter("hashdb/memcache/commit/bytes", nil)
6060
)
@@ -401,7 +401,7 @@ func (db *Database) Cap(limit common.StorageSize) error {
401401
memcacheFlushBytesMeter.Mark(int64(storage - db.dirtiesSize))
402402
memcacheFlushNodesMeter.Mark(int64(nodes - len(db.dirties)))
403403

404-
log.Debug("Persisted nodes from memory database", "nodes", nodes-len(db.dirties), "size", storage-db.dirtiesSize, "time", time.Since(start),
404+
log.Info("Persisted nodes from memory database", "nodes", nodes-len(db.dirties), "size", storage-db.dirtiesSize, "time", time.Since(start),
405405
"flushnodes", db.flushnodes, "flushsize", db.flushsize, "flushtime", db.flushtime, "livenodes", len(db.dirties), "livesize", db.dirtiesSize)
406406

407407
return nil
@@ -453,7 +453,7 @@ func (db *Database) Commit(node common.Hash, report bool) error {
453453
if !report {
454454
logger = log.Debug
455455
}
456-
logger("Persisted trie from memory database", "nodes", nodes-len(db.dirties)+int(db.flushnodes), "size", storage-db.dirtiesSize+db.flushsize, "time", time.Since(start)+db.flushtime,
456+
logger("Persisted trie from memory database", "nodes", nodes-len(db.dirties), "flushnodes", db.flushnodes, "size", storage-db.dirtiesSize, "flushsize", db.flushsize, "time", time.Since(start), "flushtime", db.flushtime,
457457
"gcnodes", db.gcnodes, "gcsize", db.gcsize, "gctime", db.gctime, "livenodes", len(db.dirties), "livesize", db.dirtiesSize)
458458

459459
// Reset the garbage collection statistics

0 commit comments

Comments
 (0)