diff --git a/pkg/apiserver/apiserver.go b/pkg/apiserver/apiserver.go index 74db2f4e3b6..4d68b44fb05 100644 --- a/pkg/apiserver/apiserver.go +++ b/pkg/apiserver/apiserver.go @@ -169,7 +169,7 @@ func (s *APIServer) write(statusCode int, object interface{}, w http.ResponseWri func (s *APIServer) writeRawJSON(statusCode int, object interface{}, w http.ResponseWriter) { output, err := json.Marshal(object) if err != nil { - s.error(err, w) + internalError(err, w) return } w.Header().Set("Content-Type", "application/json") @@ -177,16 +177,6 @@ func (s *APIServer) writeRawJSON(statusCode int, object interface{}, w http.Resp w.Write(output) } -func (s *APIServer) error(err error, w http.ResponseWriter) { - w.WriteHeader(http.StatusInternalServerError) - fmt.Fprintf(w, "Internal Error: %#v", err) -} - -func (s *APIServer) readBody(req *http.Request) ([]byte, error) { - defer req.Body.Close() - return ioutil.ReadAll(req.Body) -} - // finishReq finishes up a request, waiting until the operation finishes or, after a timeout, creating an // Operation to receive the result and returning its ID down the writer. func (s *APIServer) finishReq(out <-chan interface{}, sync bool, timeout time.Duration, w http.ResponseWriter) { @@ -247,12 +237,12 @@ func (s *APIServer) handleREST(parts []string, req *http.Request, w http.Respons case 1: selector, err := labels.ParseSelector(req.URL.Query().Get("labels")) if err != nil { - s.error(err, w) + internalError(err, w) return } list, err := storage.List(selector) if err != nil { - s.error(err, w) + internalError(err, w) return } s.write(http.StatusOK, list, w) @@ -263,7 +253,7 @@ func (s *APIServer) handleREST(parts []string, req *http.Request, w http.Respons return } if err != nil { - s.error(err, w) + internalError(err, w) return } s.write(http.StatusOK, item, w) @@ -275,9 +265,9 @@ func (s *APIServer) handleREST(parts []string, req *http.Request, w http.Respons notFound(w, req) return } - body, err := s.readBody(req) + body, err := readBody(req) if err != nil { - s.error(err, w) + internalError(err, w) return } obj, err := storage.Extract(body) @@ -286,7 +276,7 @@ func (s *APIServer) handleREST(parts []string, req *http.Request, w http.Respons return } if err != nil { - s.error(err, w) + internalError(err, w) return } out, err := storage.Create(obj) @@ -295,7 +285,7 @@ func (s *APIServer) handleREST(parts []string, req *http.Request, w http.Respons return } if err != nil { - s.error(err, w) + internalError(err, w) return } s.finishReq(out, sync, timeout, w) @@ -310,7 +300,7 @@ func (s *APIServer) handleREST(parts []string, req *http.Request, w http.Respons return } if err != nil { - s.error(err, w) + internalError(err, w) return } s.finishReq(out, sync, timeout, w) @@ -319,9 +309,9 @@ func (s *APIServer) handleREST(parts []string, req *http.Request, w http.Respons notFound(w, req) return } - body, err := s.readBody(req) + body, err := readBody(req) if err != nil { - s.error(err, w) + internalError(err, w) return } obj, err := storage.Extract(body) @@ -330,7 +320,7 @@ func (s *APIServer) handleREST(parts []string, req *http.Request, w http.Respons return } if err != nil { - s.error(err, w) + internalError(err, w) return } out, err := storage.Update(obj) @@ -339,7 +329,7 @@ func (s *APIServer) handleREST(parts []string, req *http.Request, w http.Respons return } if err != nil { - s.error(err, w) + internalError(err, w) return } s.finishReq(out, sync, timeout, w) @@ -408,7 +398,7 @@ func (s *APIServer) handleWatch(w http.ResponseWriter, req *http.Request) { watching, err = watcher.WatchAll() } if err != nil { - s.error(err, w) + internalError(err, w) return } @@ -425,3 +415,8 @@ func (s *APIServer) handleWatch(w http.ResponseWriter, req *http.Request) { notFound(w, req) } + +func readBody(req *http.Request) ([]byte, error) { + defer req.Body.Close() + return ioutil.ReadAll(req.Body) +} diff --git a/pkg/apiserver/errors.go b/pkg/apiserver/errors.go index 60a84529e90..6e01a092fbd 100644 --- a/pkg/apiserver/errors.go +++ b/pkg/apiserver/errors.go @@ -21,6 +21,11 @@ import ( "net/http" ) +func internalError(err error, w http.ResponseWriter) { + w.WriteHeader(http.StatusInternalServerError) + fmt.Fprintf(w, "Internal Error: %#v", err) +} + // notFound renders a simple not found error func notFound(w http.ResponseWriter, req *http.Request) { w.WriteHeader(http.StatusNotFound)