Retry fail on treechangeproto.ErrGetTree

This commit is contained in:
mcrakhman 2023-06-13 18:14:13 +02:00
parent 759c48c6b7
commit 060c6d1231
No known key found for this signature in database
GPG Key ID: DED12CFEF5B8396B
2 changed files with 17 additions and 10 deletions

View File

@ -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,

View File

@ -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()