Merge pull request #18677 from runcom/fix-plugins-error

pkg: plugins: fix and better handle errors
This commit is contained in:
David Calavera 2015-12-15 14:17:52 -08:00
commit 54ce12da10

View file

@ -131,11 +131,26 @@ func (c *Client) callWithRetry(serviceMethod string, data io.Reader, retry bool)
} }
if resp.StatusCode != http.StatusOK { if resp.StatusCode != http.StatusOK {
remoteErr, err := ioutil.ReadAll(resp.Body) b, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
return nil, &remoteError{err.Error(), serviceMethod} return nil, &remoteError{method: serviceMethod, err: err.Error()}
} }
return nil, &remoteError{string(remoteErr), serviceMethod}
// Plugins' Response(s) should have an Err field indicating what went
// wrong. Try to unmarshal into ResponseErr. Otherwise fallback to just
// return the string(body)
type responseErr struct {
Err string
}
remoteErr := responseErr{}
if err := json.Unmarshal(b, &remoteErr); err != nil {
return nil, &remoteError{method: serviceMethod, err: err.Error()}
}
if remoteErr.Err != "" {
return nil, &remoteError{method: serviceMethod, err: remoteErr.Err}
}
// old way...
return nil, &remoteError{method: serviceMethod, err: string(b)}
} }
return resp.Body, nil return resp.Body, nil
} }