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 d3fbd43432
1 changed files with 18 additions and 3 deletions

View File

@ -131,11 +131,26 @@ func (c *Client) callWithRetry(serviceMethod string, data io.Reader, retry bool)
}
if resp.StatusCode != http.StatusOK {
remoteErr, err := ioutil.ReadAll(resp.Body)
b, err := ioutil.ReadAll(resp.Body)
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
}