From b95eef522bbd48117285be20b511fe4ef97bd66a Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Fri, 13 Jun 2014 14:58:08 -0700 Subject: [PATCH] Add nice(r) error message on api server panic. Fix nil ptr derefs. --- pkg/apiserver/api_server.go | 7 +++++++ pkg/registry/controller_registry.go | 3 +++ pkg/registry/service_registry.go | 6 ++++++ 3 files changed, 16 insertions(+) diff --git a/pkg/apiserver/api_server.go b/pkg/apiserver/api_server.go index ceea578605e..14aaa642f06 100644 --- a/pkg/apiserver/api_server.go +++ b/pkg/apiserver/api_server.go @@ -70,6 +70,13 @@ func (server *ApiServer) handleIndex(w http.ResponseWriter) { // HTTP Handler interface func (server *ApiServer) ServeHTTP(w http.ResponseWriter, req *http.Request) { + defer func() { + if x := recover(); x != nil { + w.WriteHeader(http.StatusInternalServerError) + fmt.Fprint(w, "apiserver panic. Look in log for details.") + log.Printf("ApiServer panic'd: %#v\n", x) + } + }() log.Printf("%s %s", req.Method, req.RequestURI) url, err := url.ParseRequestURI(req.RequestURI) if err != nil { diff --git a/pkg/registry/controller_registry.go b/pkg/registry/controller_registry.go index c60b93ce022..13f22a44857 100644 --- a/pkg/registry/controller_registry.go +++ b/pkg/registry/controller_registry.go @@ -49,6 +49,9 @@ func (storage *ControllerRegistryStorage) List(*url.URL) (interface{}, error) { func (storage *ControllerRegistryStorage) Get(id string) (interface{}, error) { controller, err := storage.registry.GetController(id) + if err != nil { + return nil, err + } controller.Kind = "cluster#replicationController" return controller, err } diff --git a/pkg/registry/service_registry.go b/pkg/registry/service_registry.go index de3b018b570..218cc0eb4cc 100644 --- a/pkg/registry/service_registry.go +++ b/pkg/registry/service_registry.go @@ -61,12 +61,18 @@ func GetServiceEnvironmentVariables(registry ServiceRegistry, machine string) ([ func (sr *ServiceRegistryStorage) List(*url.URL) (interface{}, error) { list, err := sr.registry.ListServices() + if err != nil { + return nil, err + } list.Kind = "cluster#serviceList" return list, err } func (sr *ServiceRegistryStorage) Get(id string) (interface{}, error) { service, err := sr.registry.GetService(id) + if err != nil { + return nil, err + } service.Kind = "cluster#service" return service, err }