From d1ee81453ca393acce39e16ece3474fd3fb234cc Mon Sep 17 00:00:00 2001 From: Evan Hazlett Date: Thu, 29 Jan 2015 09:15:15 -0500 Subject: [PATCH 1/2] add timeout for b2d release check; warn instead of error if cannot check Signed-off-by: Evan Hazlett --- drivers/virtualbox/virtualbox.go | 2 +- drivers/vmwarefusion/fusion.go | 2 +- drivers/vmwarevsphere/vsphere.go | 2 +- utils/b2d.go | 20 +++++++++++++++++++- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/drivers/virtualbox/virtualbox.go b/drivers/virtualbox/virtualbox.go index c44f375eb2..2b8ae0ed5b 100644 --- a/drivers/virtualbox/virtualbox.go +++ b/drivers/virtualbox/virtualbox.go @@ -143,7 +143,7 @@ func (d *Driver) Create() error { // until then always use "latest" isoURL, err = utils.GetLatestBoot2DockerReleaseURL() if err != nil { - return err + log.Warnf("Unable to check for the latest release: %s", err) } // todo: use real constant for .docker diff --git a/drivers/vmwarefusion/fusion.go b/drivers/vmwarefusion/fusion.go index 391b3aeeb5..91048836f0 100644 --- a/drivers/vmwarefusion/fusion.go +++ b/drivers/vmwarefusion/fusion.go @@ -151,7 +151,7 @@ func (d *Driver) Create() error { // until then always use "latest" isoURL, err = utils.GetLatestBoot2DockerReleaseURL() if err != nil { - return err + log.Warnf("Unable to check for the latest release: %s", err) } // todo: use real constant for .docker diff --git a/drivers/vmwarevsphere/vsphere.go b/drivers/vmwarevsphere/vsphere.go index 9a35f4a0d3..09000c75d7 100644 --- a/drivers/vmwarevsphere/vsphere.go +++ b/drivers/vmwarevsphere/vsphere.go @@ -245,7 +245,7 @@ func (d *Driver) Create() error { // until then always use "latest" isoURL, err = utils.GetLatestBoot2DockerReleaseURL() if err != nil { - return err + log.Warnf("Unable to check for the latest release: %s", err) } rootPath := utils.GetDockerDir() diff --git a/utils/b2d.go b/utils/b2d.go index 4b200db0ca..e28d124cd5 100644 --- a/utils/b2d.go +++ b/utils/b2d.go @@ -5,15 +5,33 @@ import ( "fmt" "io" "io/ioutil" + "net" "net/http" "os" "path/filepath" + "time" ) +const ( + timeout = time.Second * 5 +) + +func defaultTimeout(network, addr string) (net.Conn, error) { + return net.DialTimeout(network, addr, timeout) +} + // Get the latest boot2docker release tag name (e.g. "v0.6.0"). // FIXME: find or create some other way to get the "latest release" of boot2docker since the GitHub API has a pretty low rate limit on API requests func GetLatestBoot2DockerReleaseURL() (string, error) { - rsp, err := http.Get("https://api.github.com/repos/boot2docker/boot2docker/releases") + transport := http.Transport{ + Dial: defaultTimeout, + } + + client := http.Client{ + Transport: &transport, + } + + rsp, err := client.Get("https://api.github.com/repos/boot2docker/boot2docker/releases") if err != nil { return "", err } From feb34030c233da368b16b861a8f949024c20ef7b Mon Sep 17 00:00:00 2001 From: Evan Hazlett Date: Fri, 30 Jan 2015 12:41:35 -0500 Subject: [PATCH 2/2] add timeout for b2d download Signed-off-by: Evan Hazlett --- utils/b2d.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/utils/b2d.go b/utils/b2d.go index e28d124cd5..b14a932aaa 100644 --- a/utils/b2d.go +++ b/utils/b2d.go @@ -20,9 +20,7 @@ func defaultTimeout(network, addr string) (net.Conn, error) { return net.DialTimeout(network, addr, timeout) } -// Get the latest boot2docker release tag name (e.g. "v0.6.0"). -// FIXME: find or create some other way to get the "latest release" of boot2docker since the GitHub API has a pretty low rate limit on API requests -func GetLatestBoot2DockerReleaseURL() (string, error) { +func getClient() *http.Client { transport := http.Transport{ Dial: defaultTimeout, } @@ -31,6 +29,14 @@ func GetLatestBoot2DockerReleaseURL() (string, error) { Transport: &transport, } + return &client +} + +// Get the latest boot2docker release tag name (e.g. "v0.6.0"). +// FIXME: find or create some other way to get the "latest release" of boot2docker since the GitHub API has a pretty low rate limit on API requests +func GetLatestBoot2DockerReleaseURL() (string, error) { + client := getClient() + rsp, err := client.Get("https://api.github.com/repos/boot2docker/boot2docker/releases") if err != nil { return "", err @@ -54,7 +60,9 @@ func GetLatestBoot2DockerReleaseURL() (string, error) { // Download boot2docker ISO image for the given tag and save it at dest. func DownloadISO(dir, file, url string) error { - rsp, err := http.Get(url) + client := getClient() + + rsp, err := client.Get(url) if err != nil { return err }