mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
don't dump whole block+witness to disk. instead, log detailed summary for block+witness size breakdown.
This commit is contained in:
parent
adcc2bc9da
commit
d6ee7eb99c
2 changed files with 49 additions and 6 deletions
|
|
@ -1852,8 +1852,10 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error)
|
||||||
} else {
|
} else {
|
||||||
status, err = bc.writeBlockAndSetHead(block, receipts, logs, statedb, false)
|
status, err = bc.writeBlockAndSetHead(block, receipts, logs, statedb, false)
|
||||||
}
|
}
|
||||||
statedb.GetWitness().Dump()
|
|
||||||
state.DumpBlockWithWitnessToFile(statedb.GetWitness(), block)
|
statedb.GetWitness().SetBlock(block)
|
||||||
|
fmt.Printf("block %d summary:\n%s", block.NumberU64(), statedb.GetWitness().Summary())
|
||||||
|
//state.DumpBlockWithWitnessToFile(statedb.GetWitness(), block)
|
||||||
|
|
||||||
followupInterrupt.Store(true)
|
followupInterrupt.Store(true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Witness struct {
|
type Witness struct {
|
||||||
|
block *types.Block
|
||||||
blockHashes map[uint64]common.Hash
|
blockHashes map[uint64]common.Hash
|
||||||
codes map[common.Hash]Code
|
codes map[common.Hash]Code
|
||||||
root common.Hash
|
root common.Hash
|
||||||
|
|
@ -169,6 +170,40 @@ func (w *Witness) Dump() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *Witness) Summary() string {
|
||||||
|
b := new(bytes.Buffer)
|
||||||
|
xx, _ := rlp.EncodeToBytes(w.block)
|
||||||
|
totBlock := len(xx)
|
||||||
|
|
||||||
|
yy, _ := rlp.EncodeToBytes(w)
|
||||||
|
totWit := len(yy)
|
||||||
|
|
||||||
|
totCode := 0
|
||||||
|
for _, c := range w.codes {
|
||||||
|
totCode += len(c)
|
||||||
|
}
|
||||||
|
totNodes := 0
|
||||||
|
totPaths := 0
|
||||||
|
nodePathCount := 0
|
||||||
|
for _, ownerPaths := range w.lists {
|
||||||
|
for path, node := range ownerPaths {
|
||||||
|
nodePathCount++
|
||||||
|
totNodes += len(node)
|
||||||
|
totPaths += len(path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Fprintf(b, "%4d hashes: %v\n", len(w.blockHashes), common.StorageSize(len(w.blockHashes)*32))
|
||||||
|
fmt.Fprintf(b, "%4d owners: %v\n", len(w.lists), common.StorageSize(len(w.lists)*32))
|
||||||
|
fmt.Fprintf(b, "%4d nodes: %v\n", nodePathCount, common.StorageSize(totNodes))
|
||||||
|
fmt.Fprintf(b, "%4d paths: %v\n", nodePathCount, common.StorageSize(totPaths))
|
||||||
|
fmt.Fprintf(b, "%4d codes: %v\n", len(w.codes), common.StorageSize(totCode))
|
||||||
|
fmt.Fprintf(b, "%4d codeHashes: %v\n", len(w.codes), common.StorageSize(len(w.codes)*32))
|
||||||
|
fmt.Fprintf(b, "block (%4d txs): %v\n", len(w.block.Transactions()), common.StorageSize(totBlock))
|
||||||
|
fmt.Fprintf(b, "Total size: %v\n ", common.StorageSize(totWit))
|
||||||
|
return b.String()
|
||||||
|
}
|
||||||
|
|
||||||
func (w *Witness) PopulateMemoryDB() ethdb.Database {
|
func (w *Witness) PopulateMemoryDB() ethdb.Database {
|
||||||
db := rawdb.NewMemoryDatabase()
|
db := rawdb.NewMemoryDatabase()
|
||||||
for codeHash, code := range w.codes {
|
for codeHash, code := range w.codes {
|
||||||
|
|
@ -184,14 +219,20 @@ func (w *Witness) PopulateMemoryDB() ethdb.Database {
|
||||||
return db
|
return db
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *Witness) SetBlock(b *types.Block) {
|
||||||
|
w.block = b
|
||||||
|
}
|
||||||
|
|
||||||
func NewWitness() *Witness {
|
func NewWitness() *Witness {
|
||||||
return &Witness{
|
return &Witness{
|
||||||
make(map[uint64]common.Hash),
|
block: nil,
|
||||||
make(map[common.Hash]Code),
|
blockHashes: make(map[uint64]common.Hash),
|
||||||
common.Hash{},
|
codes: make(map[common.Hash]Code),
|
||||||
make(map[common.Hash]map[string][]byte),
|
root: common.Hash{},
|
||||||
|
lists: make(map[common.Hash]map[string][]byte),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func DumpBlockWithWitnessToFile(w *Witness, b *types.Block) {
|
func DumpBlockWithWitnessToFile(w *Witness, b *types.Block) {
|
||||||
enc := w.EncodeRLP(b)
|
enc := w.EncodeRLP(b)
|
||||||
path, _ := os.Getwd() //"/datadrive/"
|
path, _ := os.Getwd() //"/datadrive/"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue