reset walked set as epoch boundaries are crossed
the walk is BFS, so we can do this!
This commit is contained in:
parent
49346f5679
commit
32d94d4e85
@ -616,7 +616,7 @@ func (s *SplitStore) endTxnProtect() {
|
|||||||
|
|
||||||
func (s *SplitStore) walkChain(ts *types.TipSet, inclState, inclMsgs abi.ChainEpoch,
|
func (s *SplitStore) walkChain(ts *types.TipSet, inclState, inclMsgs abi.ChainEpoch,
|
||||||
visitor ObjectVisitor, f func(cid.Cid) error) error {
|
visitor ObjectVisitor, f func(cid.Cid) error) error {
|
||||||
walked := cid.NewSet()
|
var walked *cid.Set
|
||||||
toWalk := ts.Cids()
|
toWalk := ts.Cids()
|
||||||
walkCnt := 0
|
walkCnt := 0
|
||||||
scanCnt := 0
|
scanCnt := 0
|
||||||
@ -687,6 +687,10 @@ func (s *SplitStore) walkChain(ts *types.TipSet, inclState, inclMsgs abi.ChainEp
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// the walk is BFS, so we can reset the walked set in every iteration and avoid building up
|
||||||
|
// a set that contains all blocks (1M epochs -> 5M blocks -> 200MB worth of memory and growing
|
||||||
|
// over time)
|
||||||
|
walked = cid.NewSet()
|
||||||
walking := toWalk
|
walking := toWalk
|
||||||
toWalk = nil
|
toWalk = nil
|
||||||
for _, c := range walking {
|
for _, c := range walking {
|
||||||
|
Loading…
Reference in New Issue
Block a user