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 {
|
} else {
|
||||||
peerIdx = peerIdx % len(availablePeers)
|
peerIdx = peerIdx % len(availablePeers)
|
||||||
msg, err = t.treeRequest(ctx, availablePeers[peerIdx])
|
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
|
return msg, err
|
||||||
}
|
}
|
||||||
peerIdx++
|
peerIdx++
|
||||||
@ -115,18 +117,11 @@ func (t treeRemoteGetter) getTree(ctx context.Context) (treeStorage treestorage.
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
switch {
|
fullSyncResp := resp.GetContent().GetFullSyncResponse()
|
||||||
case resp.GetContent().GetErrorResponse() != nil:
|
if fullSyncResp == nil {
|
||||||
errResp := resp.GetContent().GetErrorResponse()
|
|
||||||
err = rpcerr.Err(errResp.ErrCode)
|
|
||||||
return
|
|
||||||
case resp.GetContent().GetFullSyncResponse() == nil:
|
|
||||||
err = treechangeproto.ErrUnexpected
|
err = treechangeproto.ErrUnexpected
|
||||||
return
|
return
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
fullSyncResp := resp.GetContent().GetFullSyncResponse()
|
|
||||||
|
|
||||||
payload := treestorage.TreeStorageCreatePayload{
|
payload := treestorage.TreeStorageCreatePayload{
|
||||||
RootRawChange: resp.RootChange,
|
RootRawChange: resp.RootChange,
|
||||||
|
|||||||
@ -113,6 +113,18 @@ func TestTreeRemoteGetter(t *testing.T) {
|
|||||||
require.Equal(t, "id", resp.RootChange.Id)
|
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) {
|
t.Run("retry get peers success", func(t *testing.T) {
|
||||||
fx := newTreeRemoteGetterFixture(t)
|
fx := newTreeRemoteGetterFixture(t)
|
||||||
defer fx.stop()
|
defer fx.stop()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user