From 9e7dd5aa27445b1fb12f5cb2d2d5be078051ffc7 Mon Sep 17 00:00:00 2001 From: Ta-Ching Chen Date: Sun, 7 Jul 2019 09:55:00 +0800 Subject: [PATCH] Fix nil pointer when CLI unable to get server version (#1223) --- pkg/controller/client/client.go | 10 +++++++++- pkg/fission-cli/util/version.go | 13 ++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/pkg/controller/client/client.go b/pkg/controller/client/client.go index a1390853..f8738a5f 100644 --- a/pkg/controller/client/client.go +++ b/pkg/controller/client/client.go @@ -18,12 +18,16 @@ package client import ( "bytes" + "context" "encoding/json" "errors" "fmt" "io/ioutil" "net/http" "strings" + "time" + + "golang.org/x/net/context/ctxhttp" ferror "github.com/fission/fission/pkg/error" "github.com/fission/fission/pkg/info" @@ -94,7 +98,11 @@ func (c *Client) handleCreateResponse(resp *http.Response) ([]byte, error) { func (c *Client) ServerInfo() (*info.ServerInfo, error) { url := fmt.Sprintf(c.Url) - resp, err := http.Get(url) + + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + defer cancel() + + resp, err := ctxhttp.Get(ctx, &http.Client{}, url) if err != nil { return nil, err } diff --git a/pkg/fission-cli/util/version.go b/pkg/fission-cli/util/version.go index 362e3e83..03d0c23a 100644 --- a/pkg/fission-cli/util/version.go +++ b/pkg/fission-cli/util/version.go @@ -18,27 +18,30 @@ type Versions struct { } func GetVersion(client *client.Client) []byte { - serverInfo, err := client.ServerInfo() - if err != nil { - log.Warn(fmt.Sprintf("Error getting Fission API version: %v", err)) - } - // Fetch client versions versions := Versions{ Client: map[string]info.BuildMeta{ "fission/core": info.BuildInfo(), }, } + for _, pmd := range plugin.FindAll() { versions.Client[pmd.Name] = info.BuildMeta{ Version: pmd.Version, } } + serverInfo, err := client.ServerInfo() + if err != nil { + log.Warn(fmt.Sprintf("Error getting Fission API version: %v", err)) + serverInfo = &info.ServerInfo{} + } + // Fetch server versions versions.Server = map[string]info.BuildMeta{ "fission/core": serverInfo.Build, } + // FUTURE: fetch versions of plugins server-side bs, err := yaml.Marshal(versions) if err != nil {