From 1dee9cb3f05ec00a599e7d923602b3e47d6e4a70 Mon Sep 17 00:00:00 2001 From: Nishant Totla Date: Fri, 8 Apr 2016 12:02:16 -0700 Subject: [PATCH] Returning and handling error from HTTPClientAndScheme Signed-off-by: Nishant Totla --- api/handlers.go | 12 ++++++------ api/utils.go | 6 +++++- cluster/engine.go | 6 +++--- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/api/handlers.go b/api/handlers.go index 8bc29ea1de..7bfd8febc8 100644 --- a/api/handlers.go +++ b/api/handlers.go @@ -484,9 +484,9 @@ func getContainerJSON(c *context, w http.ResponseWriter, r *http.Request) { return } - client, scheme := container.Engine.HTTPClientAndScheme() - if client == nil { - httpError(w, "Cannot connect to docker engine", http.StatusInternalServerError) + client, scheme, err := container.Engine.HTTPClientAndScheme() + if err != nil { + httpError(w, err.Error(), http.StatusInternalServerError) return } @@ -814,9 +814,9 @@ func postContainersExec(c *context, w http.ResponseWriter, r *http.Request) { return } - client, scheme := container.Engine.HTTPClientAndScheme() - if client == nil { - httpError(w, "Cannot connect to docker engine", http.StatusInternalServerError) + client, scheme, err := container.Engine.HTTPClientAndScheme() + if err != nil { + httpError(w, err.Error(), http.StatusInternalServerError) return } diff --git a/api/utils.go b/api/utils.go index 3eb33d8746..50cf1645c0 100644 --- a/api/utils.go +++ b/api/utils.go @@ -93,7 +93,11 @@ func proxyAsync(engine *cluster.Engine, w http.ResponseWriter, r *http.Request, // RequestURI may not be sent to client r.RequestURI = "" - client, scheme := engine.HTTPClientAndScheme() + client, scheme, err := engine.HTTPClientAndScheme() + + if err != nil { + return err + } r.URL.Scheme = scheme r.URL.Host = engine.Addr diff --git a/cluster/engine.go b/cluster/engine.go index ddf6ed6010..b20c3404ad 100644 --- a/cluster/engine.go +++ b/cluster/engine.go @@ -147,11 +147,11 @@ func NewEngine(addr string, overcommitRatio float64, opts *EngineOpts) *Engine { } // HTTPClientAndScheme returns the underlying HTTPClient and the scheme used by the engine -func (e *Engine) HTTPClientAndScheme() (*http.Client, string) { +func (e *Engine) HTTPClientAndScheme() (*http.Client, string, error) { if dc, ok := e.client.(*dockerclient.DockerClient); ok { - return dc.HTTPClient, dc.URL.Scheme + return dc.HTTPClient, dc.URL.Scheme, nil } - return nil, "" + return nil, "", fmt.Errorf("Possibly lost connection to Engine (name: %s, ID: %s) ", e.Name, e.ID) } // Connect will initialize a connection to the Docker daemon running on the