Retry fail on treechangeproto.ErrGetTree
This commit is contained in:
parent
759c48c6b7
commit
060c6d1231
@ -78,7 +78,9 @@ func (t treeRemoteGetter) treeRequestLoop(ctx context.Context, retryTimeout time
|
||||
} else {
|
||||
peerIdx = peerIdx % len(availablePeers)
|
||||
msg, err = t.treeRequest(ctx, availablePeers[peerIdx])
|
||||
if err == nil || retryTimeout == 0 {
|
||||
// if no error or it doesn't make sense to retry
|
||||
err = rpcerr.Unwrap(err)
|
||||
if err == nil || err == treechangeproto.ErrGetTree || retryTimeout == 0 {
|
||||
return msg, err
|
||||
}
|
||||
peerIdx++
|
||||
@ -115,18 +117,11 @@ func (t treeRemoteGetter) getTree(ctx context.Context) (treeStorage treestorage.
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
switch {
|
||||
case resp.GetContent().GetErrorResponse() != nil:
|
||||
errResp := resp.GetContent().GetErrorResponse()
|
||||
err = rpcerr.Err(errResp.ErrCode)
|
||||
return
|
||||
case resp.GetContent().GetFullSyncResponse() == nil:
|
||||
fullSyncResp := resp.GetContent().GetFullSyncResponse()
|
||||
if fullSyncResp == nil {
|
||||
err = treechangeproto.ErrUnexpected
|
||||
return
|
||||
default:
|
||||
break
|
||||
}
|
||||
fullSyncResp := resp.GetContent().GetFullSyncResponse()
|
||||
|
||||
payload := treestorage.TreeStorageCreatePayload{
|
||||
RootRawChange: resp.RootChange,
|
||||
|
||||
@ -113,6 +113,18 @@ func TestTreeRemoteGetter(t *testing.T) {
|
||||
require.Equal(t, "id", resp.RootChange.Id)
|
||||
})
|
||||
|
||||
t.Run("no retry request if error get tree", func(t *testing.T) {
|
||||
fx := newTreeRemoteGetterFixture(t)
|
||||
defer fx.stop()
|
||||
mockPeer := mock_peer.NewMockPeer(fx.ctrl)
|
||||
mockPeer.EXPECT().Id().AnyTimes().Return(peerId)
|
||||
fx.peerGetterMock.EXPECT().GetResponsiblePeers(ctx).AnyTimes().Return([]peer.Peer{mockPeer}, nil)
|
||||
fx.syncClientMock.EXPECT().CreateNewTreeRequest().AnyTimes().Return(treeRequest)
|
||||
fx.syncClientMock.EXPECT().SendRequest(ctx, peerId, fx.treeGetter.treeId, treeRequest).Times(1).Return(nil, treechangeproto.ErrGetTree)
|
||||
_, err := fx.treeGetter.treeRequestLoop(ctx, retryTimeout)
|
||||
require.Equal(t, treechangeproto.ErrGetTree, err)
|
||||
})
|
||||
|
||||
t.Run("retry get peers success", func(t *testing.T) {
|
||||
fx := newTreeRemoteGetterFixture(t)
|
||||
defer fx.stop()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user