client: consume json error and return ErrInvaildJSON
The default JSON error is not very readable. We let client consume the error and return a more understandable error in the context of etcd. Fix #3120release-2.2
parent
6317abf7e4
commit
d2dac0fe59
|
@ -16,6 +16,7 @@ package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
@ -60,6 +61,10 @@ func (e Error) Error() string {
|
||||||
return fmt.Sprintf("%v: %v (%v) [%v]", e.Code, e.Message, e.Cause, e.Index)
|
return fmt.Sprintf("%v: %v (%v) [%v]", e.Code, e.Message, e.Cause, e.Index)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
ErrInvalidJSON = errors.New("client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint.")
|
||||||
|
)
|
||||||
|
|
||||||
// PrevExistType is used to define an existence condition when setting
|
// PrevExistType is used to define an existence condition when setting
|
||||||
// or deleting Nodes.
|
// or deleting Nodes.
|
||||||
type PrevExistType string
|
type PrevExistType string
|
||||||
|
@ -589,7 +594,7 @@ func unmarshalSuccessfulKeysResponse(header http.Header, body []byte) (*Response
|
||||||
var res Response
|
var res Response
|
||||||
err := json.Unmarshal(body, &res)
|
err := json.Unmarshal(body, &res)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, ErrInvalidJSON
|
||||||
}
|
}
|
||||||
if header.Get("X-Etcd-Index") != "" {
|
if header.Get("X-Etcd-Index") != "" {
|
||||||
res.Index, err = strconv.ParseUint(header.Get("X-Etcd-Index"), 10, 64)
|
res.Index, err = strconv.ParseUint(header.Get("X-Etcd-Index"), 10, 64)
|
||||||
|
@ -603,7 +608,7 @@ func unmarshalSuccessfulKeysResponse(header http.Header, body []byte) (*Response
|
||||||
func unmarshalFailedKeysResponse(body []byte) error {
|
func unmarshalFailedKeysResponse(body []byte) error {
|
||||||
var etcdErr Error
|
var etcdErr Error
|
||||||
if err := json.Unmarshal(body, &etcdErr); err != nil {
|
if err := json.Unmarshal(body, &etcdErr); err != nil {
|
||||||
return err
|
return ErrInvalidJSON
|
||||||
}
|
}
|
||||||
return etcdErr
|
return etcdErr
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue