Merge pull request #472 from ywk253100/dev

Support job retrying
This commit is contained in:
Wenkai Yin 2016-07-04 21:54:27 +08:00 committed by GitHub
commit b269ca1888
4 changed files with 60 additions and 2 deletions

23
job/error/error.go Normal file
View File

@ -0,0 +1,23 @@
/*
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package error
// RetryChecker checks whether a job should retry if encounters an error
type RetryChecker interface {
// Retry : if the error can be disappear after retrying the job, Retry
// returns true
Retry(error) bool
}

36
job/replication/error.go Normal file
View File

@ -0,0 +1,36 @@
/*
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package replication
import (
"net"
)
// ReplicaRetryChecker determines whether a job should be retried when an error occurred
type ReplicaRetryChecker struct {
}
// Retry ...
func (r *ReplicaRetryChecker) Retry(err error) bool {
return isTemporary(err)
}
func isTemporary(err error) bool {
if netErr, ok := err.(net.Error); ok {
return netErr.Temporary()
}
return false
}

View File

@ -226,7 +226,7 @@ func (c *Checker) projectExist() (exist, canWrite bool, err error) {
} }
if resp.StatusCode == http.StatusOK { if resp.StatusCode == http.StatusOK {
projects := make([]models.Project, 1) var projects []models.Project
if err = json.Unmarshal(data, &projects); err != nil { if err = json.Unmarshal(data, &projects); err != nil {
return return
} }

View File

@ -90,7 +90,6 @@ func parseError(err error) error {
if regErr, ok := urlErr.Err.(*registry_error.Error); ok { if regErr, ok := urlErr.Err.(*registry_error.Error); ok {
return regErr return regErr
} }
return urlErr.Err
} }
return err return err
} }