Merge pull request #21 from yunify/fix-lb
Fix lb backends output and enhancement wait utils
This commit is contained in:
commit
f8a0f37a27
|
@ -36,8 +36,19 @@ const (
|
|||
//LoadBalancerStatusCeased ceased
|
||||
LoadBalancerStatusCeased = "ceased"
|
||||
|
||||
//JobStatusUnknown unknown
|
||||
JobStatusUnknown = "unknown"
|
||||
//JobStatusSuccessful successful
|
||||
JobStatusSuccessful = "successful"
|
||||
//JobStatusFailed failed
|
||||
JobStatusFailed = "failed"
|
||||
//JobStatusPending pending
|
||||
JobStatusPending = "pending"
|
||||
//JobStatusWorking working
|
||||
JobStatusWorking = "working"
|
||||
|
||||
defaultOpTimeout = 180 * time.Second
|
||||
defaultWaitInterval = 5 * time.Second
|
||||
defaultWaitInterval = 10 * time.Second
|
||||
)
|
||||
|
||||
// QingCloudClient QingCloud IaaS Advanced Client
|
||||
|
|
|
@ -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)
|
||||
|
@ -39,6 +40,24 @@ func WaitJob(jobService *service.JobService, jobID string, timeout time.Duration
|
|||
}, timeout, waitInterval)
|
||||
}
|
||||
|
||||
// CheckJobStatus get job status
|
||||
func CheckJobStatus(jobService *service.JobService, jobID string) (string,error) {
|
||||
input := &service.DescribeJobsInput{Jobs: []*string{&jobID}}
|
||||
output, err := jobService.DescribeJobs(input)
|
||||
if err != nil {
|
||||
return JobStatusUnknown, nil
|
||||
}
|
||||
if len(output.JobSet) == 0 {
|
||||
return "", fmt.Errorf("Can not find job [%s]", jobID)
|
||||
}
|
||||
j := output.JobSet[0]
|
||||
if j.Status == nil {
|
||||
logger.Error("Job [%s] status is nil ", jobID)
|
||||
return JobStatusUnknown, nil
|
||||
}
|
||||
return *j.Status, nil
|
||||
}
|
||||
|
||||
func describeInstance(instanceService *service.InstanceService, instanceID string) (*service.Instance, error) {
|
||||
input := &service.DescribeInstancesInput{Instances: []*string{&instanceID}}
|
||||
output, err := instanceService.DescribeInstances(input)
|
||||
|
|
|
@ -5,6 +5,20 @@ import (
|
|||
"time"
|
||||
)
|
||||
|
||||
// TimeoutError An Error represents a timeout error.
|
||||
type TimeoutError struct {
|
||||
timeout time.Duration
|
||||
}
|
||||
// Error message
|
||||
func (e *TimeoutError) Error() string { return fmt.Sprintf("Wait timeout [%s] ", e.timeout) }
|
||||
// Timeout duration
|
||||
func (e *TimeoutError) Timeout() time.Duration { return e.timeout }
|
||||
|
||||
// NewTimeoutError create a new TimeoutError
|
||||
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 +37,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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue