Merge pull request #4074 from filecoin-project/refactor/chain-store-ts-parallel

fetch tipset blocks in parallel
This commit is contained in:
Łukasz Magiera 2020-09-28 18:43:43 +02:00 committed by GitHub
commit b84cc46c3d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -10,6 +10,8 @@ import (
"strconv" "strconv"
"sync" "sync"
"golang.org/x/sync/errgroup"
"github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/crypto"
"github.com/minio/blake2b-simd" "github.com/minio/blake2b-simd"
@ -467,14 +469,25 @@ func (cs *ChainStore) LoadTipSet(tsk types.TipSetKey) (*types.TipSet, error) {
return v.(*types.TipSet), nil return v.(*types.TipSet), nil
} }
var blks []*types.BlockHeader // Fetch tipset block headers from blockstore in parallel
for _, c := range tsk.Cids() { var eg errgroup.Group
b, err := cs.GetBlock(c) cids := tsk.Cids()
if err != nil { blks := make([]*types.BlockHeader, len(cids))
return nil, xerrors.Errorf("get block %s: %w", c, err) for i, c := range cids {
} i, c := i, c
eg.Go(func() error {
b, err := cs.GetBlock(c)
if err != nil {
return xerrors.Errorf("get block %s: %w", c, err)
}
blks = append(blks, b) blks[i] = b
return nil
})
}
err := eg.Wait()
if err != nil {
return nil, err
} }
ts, err := types.NewTipSet(blks) ts, err := types.NewTipSet(blks)