浏览代码

client: return context.DeadlineExceeded instead of ClusterError

This is done to match user expectation to see context.DeadlineExceeded
when it reaches deadline.
Yicheng Qin 10 年之前
父节点
当前提交
a1ef699aeb
共有 2 个文件被更改,包括 5 次插入11 次删除
  1. 3 8
      client/client.go
  2. 2 3
      client/client_test.go

+ 3 - 8
client/client.go

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

+ 2 - 3
client/client_test.go

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