blocksync: retry GetBlocks with many peers
This commit is contained in:
parent
2f5cdf1d15
commit
e27d435848
@ -10,6 +10,7 @@ import (
|
|||||||
bserv "github.com/ipfs/go-blockservice"
|
bserv "github.com/ipfs/go-blockservice"
|
||||||
"github.com/libp2p/go-libp2p-core/host"
|
"github.com/libp2p/go-libp2p-core/host"
|
||||||
"github.com/libp2p/go-libp2p-core/protocol"
|
"github.com/libp2p/go-libp2p-core/protocol"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-lotus/chain/store"
|
"github.com/filecoin-project/go-lotus/chain/store"
|
||||||
"github.com/filecoin-project/go-lotus/chain/types"
|
"github.com/filecoin-project/go-lotus/chain/types"
|
||||||
@ -220,9 +221,19 @@ func (bs *BlockSync) GetBlocks(ctx context.Context, tipset []cid.Cid, count int)
|
|||||||
Options: BSOptBlocks,
|
Options: BSOptBlocks,
|
||||||
}
|
}
|
||||||
|
|
||||||
res, err := bs.sendRequestToPeer(ctx, peers[perm[0]], req)
|
var err error
|
||||||
|
var res *BlockSyncResponse
|
||||||
|
for _, p := range perm {
|
||||||
|
res, err = bs.sendRequestToPeer(ctx, peers[p], req)
|
||||||
|
if err == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
log.Warnf("BlockSync request failed for peer %s: %s", peers[p].String(), err)
|
||||||
|
|
||||||
|
//TODO: also do the status check here
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, xerrors.Errorf("GetBlocks failed with all peers: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
switch res.Status {
|
switch res.Status {
|
||||||
|
Loading…
Reference in New Issue
Block a user