From c122f02485fb19401bf2dc3518482e451f035391 Mon Sep 17 00:00:00 2001 From: jolestar Date: Wed, 12 Jul 2017 18:05:43 +0800 Subject: [PATCH] enhancement wait utils. --- client/util.go | 3 ++- utils/wait.go | 14 +++++++++++++- utils/wait_test.go | 3 +++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/client/util.go b/client/util.go index cb9bcfd..959df6a 100644 --- a/client/util.go +++ b/client/util.go @@ -15,7 +15,8 @@ func WaitJob(jobService *service.JobService, jobID string, timeout time.Duration input := &service.DescribeJobsInput{Jobs: []*string{&jobID}} output, err := jobService.DescribeJobs(input) if err != nil { - return false, err + //network or api error, not considered job fail. + return false, nil } if len(output.JobSet) == 0 { return false, fmt.Errorf("Can not find job [%s]", jobID) diff --git a/utils/wait.go b/utils/wait.go index 2151d68..6d80961 100644 --- a/utils/wait.go +++ b/utils/wait.go @@ -5,6 +5,18 @@ import ( "time" ) +// An Error represents a timeout error. +type TimeoutError struct { + timeout time.Duration +} + +func (e *TimeoutError) Error() string { return fmt.Sprintf("Wait timeout [%s] ", e.timeout) } +func (e *TimeoutError) Timeout() time.Duration { return e.timeout } + +func NewTimeoutError(timeout time.Duration) *TimeoutError { + return &TimeoutError{timeout: timeout} +} + // WaitForSpecificOrError wait a function return true or error. func WaitForSpecificOrError(f func() (bool, error), timeout time.Duration, waitInterval time.Duration) error { ticker := time.NewTicker(waitInterval) @@ -23,7 +35,7 @@ func WaitForSpecificOrError(f func() (bool, error), timeout time.Duration, waitI return nil } case <-timer.C: - return fmt.Errorf("Wait timeout [%s] ", timeout) + return NewTimeoutError(timeout) } } } diff --git a/utils/wait_test.go b/utils/wait_test.go index 973d6d1..03f0e0a 100644 --- a/utils/wait_test.go +++ b/utils/wait_test.go @@ -42,5 +42,8 @@ func TestWaitForSpecificOrError(t *testing.T) { return false, nil }, timeout, waitInterval) assert.Error(t, err) + tErr, ok := err.(*TimeoutError) + assert.True(t, ok) + assert.Equal(t, timeout, tErr.timeout) assert.Equal(t, 10, times) }