client: return context.DeadlineExceeded instead of ClusterError

This is done to match user expectation to see context.DeadlineExceeded
when it reaches deadline.
release-2.2
Yicheng Qin 2015-08-11 10:18:38 -07:00
parent 1fe52e1ec3
commit a1ef699aeb
2 changed files with 5 additions and 11 deletions

View File

@ -275,14 +275,9 @@ func (c *httpClusterClient) Do(ctx context.Context, act httpAction) (*http.Respo
resp, body, err = hc.Do(ctx, action)
if err != nil {
cerr.Errors = append(cerr.Errors, err)
// mask previous errors with canceled error if the user explicitly canceled the request
if err == context.Canceled {
return nil, nil, context.Canceled
}
// TODO: deal with deadline error when we improve the deadline handling.
if err == context.DeadlineExceeded {
return nil, nil, cerr
// mask previous errors with context error, which is controlled by user
if err == context.Canceled || err == context.DeadlineExceeded {
return nil, nil, err
}
continue
}

View File

@ -459,9 +459,8 @@ func TestHTTPClusterClientDoDeadlineExceedContext(t *testing.T) {
select {
case err := <-errc:
werr := &ClusterError{Errors: []error{context.DeadlineExceeded}}
if !reflect.DeepEqual(err, werr) {
t.Errorf("err = %+v, want %+v", err, werr)
if err != context.DeadlineExceeded {
t.Errorf("err = %+v, want %+v", err, context.DeadlineExceeded)
}
case <-time.After(time.Second):
t.Fatalf("unexpected timeout when waitting for request to deadline exceed")