mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 02:12:23 +00:00
trie: simplify parallelism signalling
This commit is contained in:
parent
dc9164d924
commit
3aa1cf71f7
2 changed files with 7 additions and 9 deletions
|
|
@ -31,26 +31,24 @@ type committer struct {
|
|||
nodes *trienode.NodeSet
|
||||
tracer *tracer
|
||||
collectLeaf bool
|
||||
parallel bool
|
||||
}
|
||||
|
||||
// newCommitter creates a new committer or picks one from the pool.
|
||||
func newCommitter(nodeset *trienode.NodeSet, tracer *tracer, collectLeaf bool, parallel bool) *committer {
|
||||
func newCommitter(nodeset *trienode.NodeSet, tracer *tracer, collectLeaf bool) *committer {
|
||||
return &committer{
|
||||
nodes: nodeset,
|
||||
tracer: tracer,
|
||||
collectLeaf: collectLeaf,
|
||||
parallel: parallel,
|
||||
}
|
||||
}
|
||||
|
||||
// Commit collapses a node down into a hash node.
|
||||
func (c *committer) Commit(n node) hashNode {
|
||||
return c.commit(nil, n, true).(hashNode)
|
||||
func (c *committer) Commit(n node, parallel bool) hashNode {
|
||||
return c.commit(nil, n, parallel).(hashNode)
|
||||
}
|
||||
|
||||
// commit collapses a node down into a hash node and returns it.
|
||||
func (c *committer) commit(path []byte, n node, topmost bool) node {
|
||||
func (c *committer) commit(path []byte, n node, parallel bool) node {
|
||||
// if this path is clean, use available cached data
|
||||
hash, dirty := n.cache()
|
||||
if hash != nil && !dirty {
|
||||
|
|
@ -76,7 +74,7 @@ func (c *committer) commit(path []byte, n node, topmost bool) node {
|
|||
}
|
||||
return collapsed
|
||||
case *fullNode:
|
||||
hashedKids := c.commitChildren(path, cn, topmost && c.parallel)
|
||||
hashedKids := c.commitChildren(path, cn, parallel)
|
||||
collapsed := cn.copy()
|
||||
collapsed.Children = hashedKids
|
||||
|
||||
|
|
@ -122,7 +120,7 @@ func (c *committer) commitChildren(path []byte, n *fullNode, parallel bool) [17]
|
|||
go func(index int) {
|
||||
p := append(path, byte(index))
|
||||
childSet := trienode.NewNodeSet(c.nodes.Owner)
|
||||
childComitter := newCommitter(childSet, c.tracer, c.collectLeaf, false)
|
||||
childComitter := newCommitter(childSet, c.tracer, c.collectLeaf)
|
||||
h := childComitter.commit(p, child, false)
|
||||
children[index] = h
|
||||
nodesMu.Lock()
|
||||
|
|
|
|||
|
|
@ -648,7 +648,7 @@ func (t *Trie) Commit(collectLeaf bool) (common.Hash, *trienode.NodeSet) {
|
|||
nodes.AddNode([]byte(path), trienode.NewDeleted())
|
||||
}
|
||||
// If the number of changes is below 100, we let one thread handle it
|
||||
t.root = newCommitter(nodes, t.tracer, collectLeaf, t.uncommitted > 100).Commit(t.root)
|
||||
t.root = newCommitter(nodes, t.tracer, collectLeaf).Commit(t.root, t.uncommitted > 100)
|
||||
t.uncommitted = 0
|
||||
return rootHash, nodes
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue