Prechádzať zdrojové kódy

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

pkg: plugins: fix and better handle errors
David Calavera 9 rokov pred
rodič
commit
d3fbd43432
1 zmenil súbory, kde vykonal 18 pridanie a 3 odobranie
  1. 18 3
      pkg/plugins/client.go

+ 18 - 3
pkg/plugins/client.go

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