提交 3cf2a212 编写于 作者: J Jimmi Dyson 提交者: GitHub

Merge pull request #454 from dlorenc/log

Don't drop errors during creation retries.
......@@ -22,7 +22,7 @@ import (
"strconv"
"strings"
"github.com/docker/go-units"
units "github.com/docker/go-units"
"github.com/docker/machine/libmachine"
"github.com/docker/machine/libmachine/host"
"github.com/golang/glog"
......@@ -75,6 +75,9 @@ func runStart(cmd *cobra.Command, args []string) {
var host *host.Host
start := func() (err error) {
host, err = cluster.StartHost(api, config)
if err != nil {
glog.Errorf("Error starting host: %s. Retrying.\n", err)
}
return err
}
err := util.Retry(3, start)
......
......@@ -111,35 +111,13 @@ func StopHost(api libmachine.API) error {
return nil
}
type multiError struct {
Errors []error
}
func (m *multiError) Collect(err error) {
if err != nil {
m.Errors = append(m.Errors, err)
}
}
func (m multiError) ToError() error {
if len(m.Errors) == 0 {
return nil
}
errStrings := []string{}
for _, err := range m.Errors {
errStrings = append(errStrings, err.Error())
}
return fmt.Errorf(strings.Join(errStrings, "\n"))
}
// DeleteHost deletes the host VM.
func DeleteHost(api libmachine.API) error {
host, err := api.Load(constants.MachineName)
if err != nil {
return err
}
m := multiError{}
m := util.MultiError{}
m.Collect(host.Driver.Remove())
m.Collect(api.Remove(constants.MachineName))
return m.ToError()
......
......@@ -234,26 +234,6 @@ func TestStopHost(t *testing.T) {
if s, _ := h.Driver.GetState(); s != state.Stopped {
t.Fatalf("Machine not stopped. Currently in state: %s", s)
}
}
func TestMultiError(t *testing.T) {
m := multiError{}
m.Collect(fmt.Errorf("Error 1"))
m.Collect(fmt.Errorf("Error 2"))
err := m.ToError()
expected := `Error 1
Error 2`
if err.Error() != expected {
t.Fatalf("%s != %s", err, expected)
}
m = multiError{}
if err := m.ToError(); err != nil {
t.Fatalf("Unexpected error: %s", err)
}
}
func TestDeleteHost(t *testing.T) {
......
......@@ -73,14 +73,16 @@ func Retry(attempts int, callback func() error) (err error) {
}
func RetryAfter(attempts int, callback func() error, d time.Duration) (err error) {
m := MultiError{}
for i := 0; i < attempts; i++ {
err = callback()
if err == nil {
return nil
}
m.Collect(err)
time.Sleep(d)
}
return err
return m.ToError()
}
func GetLocalkubeDownloadURL(versionOrURL string, filename string) (string, error) {
......@@ -102,3 +104,25 @@ func GetLocalkubeDownloadURL(versionOrURL string, filename string) (string, erro
}
return fmt.Sprintf("%s%s/%s", constants.LocalkubeDownloadURLPrefix, versionOrURL, filename), nil
}
type MultiError struct {
Errors []error
}
func (m *MultiError) Collect(err error) {
if err != nil {
m.Errors = append(m.Errors, err)
}
}
func (m MultiError) ToError() error {
if len(m.Errors) == 0 {
return nil
}
errStrings := []string{}
for _, err := range m.Errors {
errStrings = append(errStrings, err.Error())
}
return fmt.Errorf(strings.Join(errStrings, "\n"))
}
......@@ -89,3 +89,22 @@ func TestGetLocalkubeDownloadURL(t *testing.T) {
}
}
}
func TestMultiError(t *testing.T) {
m := MultiError{}
m.Collect(fmt.Errorf("Error 1"))
m.Collect(fmt.Errorf("Error 2"))
err := m.ToError()
expected := `Error 1
Error 2`
if err.Error() != expected {
t.Fatalf("%s != %s", err, expected)
}
m = MultiError{}
if err := m.ToError(); err != nil {
t.Fatalf("Unexpected error: %s", err)
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册