change retries to actually mean retries

This commit is contained in:
Asim Aslam 2018-05-28 16:01:04 +01:00
parent f409468ccd
commit ba8582a47a
2 changed files with 43 additions and 2 deletions

View File

@ -313,7 +313,7 @@ func (r *rpcClient) Call(ctx context.Context, request Request, response interfac
ch := make(chan error, callOpts.Retries) ch := make(chan error, callOpts.Retries)
var gerr error var gerr error
for i := 0; i < callOpts.Retries; i++ { for i := 0; i <= callOpts.Retries; i++ {
go func() { go func() {
ch <- call(i) ch <- call(i)
}() }()
@ -411,7 +411,7 @@ func (r *rpcClient) Stream(ctx context.Context, request Request, opts ...CallOpt
ch := make(chan response, callOpts.Retries) ch := make(chan response, callOpts.Retries)
var grr error var grr error
for i := 0; i < callOpts.Retries; i++ { for i := 0; i <= callOpts.Retries; i++ {
go func() { go func() {
s, err := call(i) s, err := call(i)
ch <- response{s, err} ch <- response{s, err}

View File

@ -2,6 +2,7 @@ package client
import ( import (
"context" "context"
"errors"
"fmt" "fmt"
"testing" "testing"
@ -56,6 +57,46 @@ func TestCallAddress(t *testing.T) {
} }
} }
func TestCallRetry(t *testing.T) {
service := "test.service"
method := "Test.Method"
address := "10.1.10.1:8080"
var called int
wrap := func(cf CallFunc) CallFunc {
return func(ctx context.Context, addr string, req Request, rsp interface{}, opts CallOptions) error {
called++
if called == 1 {
return errors.New("retry request")
}
// don't do the call
return nil
}
}
r := mock.NewRegistry()
c := NewClient(
Registry(r),
WrapCall(wrap),
)
c.Options().Selector.Init(selector.Registry(r))
req := c.NewRequest(service, method, nil)
// test calling remote address
if err := c.Call(context.Background(), req, nil, WithAddress(address)); err != nil {
t.Fatal("call with address error", err)
}
// num calls
if called < c.Options().CallOptions.Retries+1 {
t.Fatal("request not retried")
}
}
func TestCallWrapper(t *testing.T) { func TestCallWrapper(t *testing.T) {
var called bool var called bool
id := "test.1" id := "test.1"