mirror of https://github.com/poanetwork/gecko.git
pre-allocate map capacity in consensus
This commit is contained in:
parent
875b2d0cab
commit
fa11fecbb0
|
@ -10,6 +10,10 @@ import (
|
|||
"github.com/ava-labs/gecko/snow/consensus/snowstorm"
|
||||
)
|
||||
|
||||
const (
|
||||
minMapSize = 16
|
||||
)
|
||||
|
||||
// TopologicalFactory implements Factory by returning a topological struct
|
||||
type TopologicalFactory struct{}
|
||||
|
||||
|
@ -65,12 +69,12 @@ func (ta *Topological) Initialize(ctx *snow.Context, params Parameters, frontier
|
|||
ta.ctx.Log.Error("%s", err)
|
||||
}
|
||||
|
||||
ta.nodes = make(map[[32]byte]Vertex)
|
||||
ta.nodes = make(map[[32]byte]Vertex, minMapSize)
|
||||
|
||||
ta.cg = &snowstorm.Directed{}
|
||||
ta.cg.Initialize(ctx, params.Parameters)
|
||||
|
||||
ta.frontier = make(map[[32]byte]Vertex)
|
||||
ta.frontier = make(map[[32]byte]Vertex, minMapSize)
|
||||
for _, vtx := range frontier {
|
||||
ta.frontier[vtx.ID().Key()] = vtx
|
||||
}
|
||||
|
@ -159,7 +163,7 @@ func (ta *Topological) Finalized() bool { return ta.cg.Finalized() }
|
|||
// the non-transitively applied votes. Also returns the list of leaf nodes.
|
||||
func (ta *Topological) calculateInDegree(
|
||||
responses ids.UniqueBag) (map[[32]byte]kahnNode, []ids.ID) {
|
||||
kahns := make(map[[32]byte]kahnNode)
|
||||
kahns := make(map[[32]byte]kahnNode, minMapSize)
|
||||
leaves := ids.Set{}
|
||||
|
||||
for _, vote := range responses.List() {
|
||||
|
@ -233,7 +237,7 @@ func (ta *Topological) pushVotes(
|
|||
kahnNodes map[[32]byte]kahnNode,
|
||||
leaves []ids.ID) ids.Bag {
|
||||
votes := make(ids.UniqueBag)
|
||||
txConflicts := make(map[[32]byte]ids.Set)
|
||||
txConflicts := make(map[[32]byte]ids.Set, minMapSize)
|
||||
|
||||
for len(leaves) > 0 {
|
||||
newLeavesSize := len(leaves) - 1
|
||||
|
@ -443,9 +447,9 @@ func (ta *Topological) updateFrontiers() error {
|
|||
ta.preferred.Clear()
|
||||
ta.virtuous.Clear()
|
||||
ta.orphans.Clear()
|
||||
ta.frontier = make(map[[32]byte]Vertex)
|
||||
ta.preferenceCache = make(map[[32]byte]bool)
|
||||
ta.virtuousCache = make(map[[32]byte]bool)
|
||||
ta.frontier = make(map[[32]byte]Vertex, minMapSize)
|
||||
ta.preferenceCache = make(map[[32]byte]bool, minMapSize)
|
||||
ta.virtuousCache = make(map[[32]byte]bool, minMapSize)
|
||||
|
||||
ta.orphans.Union(ta.cg.Virtuous()) // Initially, nothing is preferred
|
||||
|
||||
|
|
|
@ -9,6 +9,10 @@ import (
|
|||
"github.com/ava-labs/gecko/snow/consensus/snowball"
|
||||
)
|
||||
|
||||
const (
|
||||
minMapSize = 16
|
||||
)
|
||||
|
||||
// TopologicalFactory implements Factory by returning a topological struct
|
||||
type TopologicalFactory struct{}
|
||||
|
||||
|
@ -183,7 +187,7 @@ func (ts *Topological) Finalized() bool { return len(ts.blocks) == 1 }
|
|||
// the non-transitively applied votes. Also returns the list of leaf blocks.
|
||||
func (ts *Topological) calculateInDegree(
|
||||
votes ids.Bag) (map[[32]byte]kahnNode, []ids.ID) {
|
||||
kahns := make(map[[32]byte]kahnNode)
|
||||
kahns := make(map[[32]byte]kahnNode, minMapSize)
|
||||
leaves := ids.Set{}
|
||||
|
||||
for _, vote := range votes.List() {
|
||||
|
|
Loading…
Reference in New Issue