mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #1422 from unihorn/187
etcdserver: parse context error for better message
This commit is contained in:
commit
ee27846d5b
@ -64,6 +64,8 @@ var (
|
||||
ErrIDRemoved = errors.New("etcdserver: ID removed")
|
||||
ErrIDExists = errors.New("etcdserver: ID exists")
|
||||
ErrIDNotFound = errors.New("etcdserver: ID not found")
|
||||
ErrCanceled = errors.New("etcdserver: request cancelled")
|
||||
ErrTimeout = errors.New("etcdserver: request timed out")
|
||||
|
||||
storeMembersPrefix = path.Join(StoreAdminPrefix, "members")
|
||||
storeRemovedMembersPrefix = path.Join(StoreAdminPrefix, "removed_members")
|
||||
@ -383,7 +385,7 @@ func (s *EtcdServer) Do(ctx context.Context, r pb.Request) (Response, error) {
|
||||
return resp, resp.err
|
||||
case <-ctx.Done():
|
||||
s.w.Trigger(r.ID, nil) // GC wait
|
||||
return Response{}, ctx.Err()
|
||||
return Response{}, parseCtxErr(ctx.Err())
|
||||
case <-s.done:
|
||||
return Response{}, ErrStopped
|
||||
}
|
||||
@ -477,7 +479,7 @@ func (s *EtcdServer) configure(ctx context.Context, cc raftpb.ConfChange) error
|
||||
return nil
|
||||
case <-ctx.Done():
|
||||
s.w.Trigger(cc.ID, nil) // GC wait
|
||||
return ctx.Err()
|
||||
return parseCtxErr(ctx.Err())
|
||||
case <-s.done:
|
||||
return ErrStopped
|
||||
}
|
||||
@ -752,6 +754,17 @@ func GenID() (n uint64) {
|
||||
return
|
||||
}
|
||||
|
||||
func parseCtxErr(err error) error {
|
||||
switch err {
|
||||
case context.Canceled:
|
||||
return ErrCanceled
|
||||
case context.DeadlineExceeded:
|
||||
return ErrTimeout
|
||||
default:
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
func getBool(v *bool) (vv bool, set bool) {
|
||||
if v == nil {
|
||||
return false, false
|
||||
|
@ -614,8 +614,8 @@ func TestDoProposalCancelled(t *testing.T) {
|
||||
if len(gaction) != 0 {
|
||||
t.Errorf("len(action) = %v, want 0", len(gaction))
|
||||
}
|
||||
if err != context.Canceled {
|
||||
t.Fatalf("err = %v, want %v", err, context.Canceled)
|
||||
if err != ErrCanceled {
|
||||
t.Fatalf("err = %v, want %v", err, ErrCanceled)
|
||||
}
|
||||
w := []action{action{name: "Register1"}, action{name: "Trigger1"}}
|
||||
if !reflect.DeepEqual(wait.action, w) {
|
||||
@ -623,6 +623,18 @@ func TestDoProposalCancelled(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestDoProposalTimeout(t *testing.T) {
|
||||
ctx, _ := context.WithTimeout(context.Background(), 0)
|
||||
srv := &EtcdServer{
|
||||
node: &nodeRecorder{},
|
||||
w: &waitRecorder{},
|
||||
}
|
||||
_, err := srv.Do(ctx, pb.Request{Method: "PUT", ID: 1})
|
||||
if err != ErrTimeout {
|
||||
t.Fatalf("err = %v, want %v", err, ErrTimeout)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDoProposalStopped(t *testing.T) {
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
Loading…
x
Reference in New Issue
Block a user