本文整理汇总了Golang中github.com/evergreen-ci/evergreen/util.RetriableFunc函数的典型用法代码示例。如果您正苦于以下问题:Golang RetriableFunc函数的具体用法?Golang RetriableFunc怎么用?Golang RetriableFunc使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了RetriableFunc函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: GetProjectRef
// GetProjectConfig loads the communicator's task's project from the API server.
func (h *HTTPCommunicator) GetProjectRef() (*model.ProjectRef, error) {
projectRef := &model.ProjectRef{}
retriableGet := util.RetriableFunc(
func() error {
resp, err := h.tryGet("project_ref")
if resp != nil {
defer resp.Body.Close()
}
if resp != nil && resp.StatusCode == http.StatusConflict {
// Something very wrong, fail now with no retry.
return fmt.Errorf("conflict - wrong secret!")
}
if err != nil {
// Some generic error trying to connect - try again
return util.RetriableError{err}
}
if resp == nil {
return util.RetriableError{fmt.Errorf("empty response")}
} else {
err = util.ReadJSONInto(resp.Body, projectRef)
if err != nil {
return util.RetriableError{err}
}
return nil
}
},
)
retryFail, err := util.Retry(retriableGet, h.MaxAttempts, h.RetrySleep)
if retryFail {
return nil, fmt.Errorf("getting project ref failed after %v tries: %v", h.MaxAttempts, err)
}
return projectRef, nil
}
开发者ID:MauroJr,项目名称:evergreen,代码行数:35,代码来源:http.go
示例2: Log
// Log sends a batch of log messages for the task's logs to the API server.
func (h *HTTPCommunicator) Log(messages []model.LogMessage) error {
outgoingData := model.TaskLog{
TaskId: h.TaskId,
Timestamp: time.Now(),
MessageCount: len(messages),
Messages: messages,
}
retriableLog := util.RetriableFunc(
func() error {
resp, err := h.TryPostJSON("log", outgoingData)
if resp != nil {
defer resp.Body.Close()
}
if err != nil {
return util.RetriableError{err}
}
if resp.StatusCode == http.StatusInternalServerError {
return util.RetriableError{fmt.Errorf("http status %v response body %v", resp.StatusCode, resp.Body)}
}
return nil
},
)
retryFail, err := util.Retry(retriableLog, h.MaxAttempts, h.RetrySleep)
if retryFail {
return fmt.Errorf("logging failed after %vtries: %v",
h.MaxAttempts, err)
}
return err
}
开发者ID:tychoish,项目名称:evergreen,代码行数:31,代码来源:http.go
示例3: PostTaskFiles
// PostTaskFiles is used by the PluginCommunicator interface for attaching task files.
func (t *TaskJSONCommunicator) PostTaskFiles(task_files []*artifact.File) error {
retriableSendFile := util.RetriableFunc(
func() error {
resp, err := t.TryPostJSON("files", task_files)
if resp != nil {
defer resp.Body.Close()
}
if err != nil {
err := fmt.Errorf("error posting results: %v", err)
return util.RetriableError{err}
}
body, readAllErr := ioutil.ReadAll(resp.Body)
bodyErr := fmt.Errorf("error posting results (%v): %v",
resp.StatusCode, string(body))
if readAllErr != nil {
return bodyErr
}
switch resp.StatusCode {
case http.StatusOK:
return nil
case http.StatusBadRequest:
return bodyErr
default:
return util.RetriableError{bodyErr}
}
},
)
retryFail, err := util.RetryArithmeticBackoff(retriableSendFile, 10, 1)
if retryFail {
return fmt.Errorf("attaching task files failed after %v tries: %v", 10, err)
}
return nil
}
开发者ID:tychoish,项目名称:evergreen,代码行数:34,代码来源:task_json.go
示例4: TaskPostResults
// TaskPostResults posts a set of test results for the communicator's task.
func (t *TaskJSONCommunicator) TaskPostResults(results *model.TestResults) error {
retriableSendFile := util.RetriableFunc(
func() error {
resp, err := t.tryPostJSON("results", results)
if resp != nil {
defer resp.Body.Close()
}
if err != nil {
err := fmt.Errorf("error posting results: %v", err)
return util.RetriableError{err}
}
body, _ := ioutil.ReadAll(resp.Body)
bodyErr := fmt.Errorf("error posting results (%v): %v",
resp.StatusCode, string(body))
switch resp.StatusCode {
case http.StatusOK:
return nil
case http.StatusBadRequest:
return bodyErr
default:
return util.RetriableError{bodyErr}
}
},
)
retryFail, err := util.RetryArithmeticBackoff(retriableSendFile, 10, 1)
if retryFail {
return fmt.Errorf("attaching test results failed after %v tries: %v", 10, err)
}
return nil
}
开发者ID:MauroJr,项目名称:evergreen,代码行数:31,代码来源:http.go
示例5: postJSON
func (h *HTTPCommunicator) postJSON(path string, data interface{}) (
resp *http.Response, retryFail bool, err error) {
retriablePost := util.RetriableFunc(
func() error {
resp, err = h.tryPostJSON(path, data)
if err == nil && resp.StatusCode == http.StatusOK {
return nil
}
if resp != nil && resp.StatusCode == http.StatusConflict {
h.Logger.Logf(slogger.ERROR, "received 409 conflict error")
return HTTPConflictError
}
if err != nil {
h.Logger.Logf(slogger.ERROR, "HTTP Post failed on '%v': %v",
path, err)
return util.RetriableError{err}
} else {
h.Logger.Logf(slogger.ERROR, "bad response '%v' posting to "+
"'%v'", resp.StatusCode, path)
return util.RetriableError{fmt.Errorf("unexpected status "+
"code: %v", resp.StatusCode)}
}
},
)
retryFail, err = util.Retry(retriablePost, h.MaxAttempts, h.RetrySleep)
return resp, retryFail, err
}
开发者ID:MauroJr,项目名称:evergreen,代码行数:27,代码来源:http.go
示例6: PutWithRetry
// Wrapper around the Put() function to retry it
func (s3pc *S3PutCommand) PutWithRetry(log plugin.Logger, com plugin.PluginCommunicator) error {
retriablePut := util.RetriableFunc(
func() error {
err := s3pc.Put()
if err != nil {
if err == errSkippedFile {
return err
}
log.LogExecution(slogger.ERROR, "Error putting to s3 bucket: %v", err)
return util.RetriableError{err}
}
return nil
},
)
retryFail, err := util.RetryArithmeticBackoff(retriablePut, maxS3PutAttempts, s3PutSleep)
if err == errSkippedFile {
log.LogExecution(slogger.INFO, "S3 put skipped optional missing file.")
return nil
}
if retryFail {
log.LogExecution(slogger.ERROR, "S3 put failed with error: %v", err)
return err
}
return s3pc.AttachTaskFiles(log, com)
}
开发者ID:himanshugpt,项目名称:evergreen,代码行数:27,代码来源:put_command.go
示例7: tryGithubPost
// tryGithubPost posts the data to the Github api endpoint with the url given
func tryGithubPost(url string, oauthToken string, data interface{}) (resp *http.Response, err error) {
evergreen.Logger.Logf(slogger.ERROR, "Attempting GitHub API POST at ‘%v’", url)
retriableGet := util.RetriableFunc(
func() (retryError error) {
resp, err = githubRequest("POST", url, oauthToken, data)
if err != nil {
evergreen.Logger.Logf(slogger.ERROR, "failed trying to call github POST on %v: %v", url, err)
return util.RetriableError{err}
}
if resp.StatusCode == http.StatusUnauthorized {
err = fmt.Errorf("Calling github POST on %v failed: got 'unauthorized' response", url)
evergreen.Logger.Logf(slogger.ERROR, err.Error())
return err
}
if resp.StatusCode != http.StatusOK {
err = fmt.Errorf("Calling github POST on %v got a bad response code: %v", url, resp.StatusCode)
}
// read the results
rateMessage, loglevel := getGithubRateLimit(resp.Header)
evergreen.Logger.Logf(loglevel, "Github API response: %v. %v", resp.Status, rateMessage)
return nil
},
)
retryFail, err := util.Retry(retriableGet, NumGithubRetries, GithubSleepTimeSecs*time.Second)
if err != nil {
// couldn't post it
if retryFail {
evergreen.Logger.Logf(slogger.ERROR, "Github POST on %v used up all retries.")
}
return nil, err
}
return
}
开发者ID:tychoish,项目名称:evergreen,代码行数:36,代码来源:github.go
示例8: tryGithubGet
func tryGithubGet(oauthToken, url string) (resp *http.Response, err error) {
evergreen.Logger.Logf(slogger.INFO, "Attempting GitHub API call at ‘%v’", url)
retriableGet := util.RetriableFunc(
func() error {
resp, err = githubRequest("GET", url, oauthToken, nil)
if err != nil {
evergreen.Logger.Logf(slogger.ERROR, "failed trying to call github GET on %v: %v", url, err)
return util.RetriableError{err}
}
if resp.StatusCode == http.StatusUnauthorized {
err = fmt.Errorf("Calling github GET on %v failed: got 'unauthorized' response", url)
evergreen.Logger.Logf(slogger.ERROR, err.Error())
return err
}
if resp.StatusCode != http.StatusOK {
err = fmt.Errorf("Calling github GET on %v got a bad response code: %v", url, resp.StatusCode)
}
// read the results
rateMessage, _ := getGithubRateLimit(resp.Header)
evergreen.Logger.Logf(slogger.DEBUG, "Github API repsonse: %v. %v", resp.Status, rateMessage)
return nil
},
)
retryFail, err := util.Retry(retriableGet, NumGithubRetries, GithubSleepTimeSecs*time.Second)
if err != nil {
// couldn't get it
if retryFail {
evergreen.Logger.Logf(slogger.ERROR, "Github GET on %v used up all retries.", err)
}
return nil, err
}
return
}
开发者ID:tychoish,项目名称:evergreen,代码行数:35,代码来源:github.go
示例9: Execute
func (jsc *JSONSendCommand) Execute(log plugin.Logger, com plugin.PluginCommunicator, conf *model.TaskConfig, stop chan bool) error {
if jsc.File == "" {
return fmt.Errorf("'file' param must not be blank")
}
if jsc.DataName == "" {
return fmt.Errorf("'name' param must not be blank")
}
errChan := make(chan error)
go func() {
// attempt to open the file
fileLoc := filepath.Join(conf.WorkDir, jsc.File)
jsonFile, err := os.Open(fileLoc)
if err != nil {
errChan <- fmt.Errorf("Couldn't open json file: '%v'", err)
return
}
jsonData := map[string]interface{}{}
err = util.ReadJSONInto(jsonFile, &jsonData)
if err != nil {
errChan <- fmt.Errorf("File contained invalid json: %v", err)
return
}
retriablePost := util.RetriableFunc(
func() error {
log.LogTask(slogger.INFO, "Posting JSON")
resp, err := com.TaskPostJSON(fmt.Sprintf("data/%v", jsc.DataName), jsonData)
if resp != nil {
defer resp.Body.Close()
}
if err != nil {
return util.RetriableError{err}
}
if resp.StatusCode != http.StatusOK {
return util.RetriableError{fmt.Errorf("unexpected status code %v", resp.StatusCode)}
}
return nil
},
)
_, err = util.Retry(retriablePost, 10, 3*time.Second)
errChan <- err
}()
select {
case err := <-errChan:
if err != nil {
log.LogTask(slogger.ERROR, "Sending json data failed: %v", err)
}
return err
case <-stop:
log.LogExecution(slogger.INFO, "Received abort signal, stopping.")
return nil
}
}
开发者ID:sr527,项目名称:json,代码行数:57,代码来源:json.go
示例10: FetchExpansionVars
// FetchExpansionVars loads expansions for a communicator's task from the API server.
func (h *HTTPCommunicator) FetchExpansionVars() (*apimodels.ExpansionVars, error) {
resultVars := &apimodels.ExpansionVars{}
retriableGet := util.RetriableFunc(
func() error {
resp, err := h.tryGet("fetch_vars")
if resp != nil {
defer resp.Body.Close()
}
if err != nil {
// Some generic error trying to connect - try again
h.Logger.Logf(slogger.ERROR, "failed trying to call fetch GET: %v", err)
return util.RetriableError{err}
}
if resp.StatusCode == http.StatusUnauthorized {
err = fmt.Errorf("fetching expansions failed: got 'unauthorized' response.")
h.Logger.Logf(slogger.ERROR, err.Error())
return err
}
if resp.StatusCode != http.StatusOK {
err = fmt.Errorf("failed trying fetch GET, got bad response code: %v", resp.StatusCode)
h.Logger.Logf(slogger.ERROR, err.Error())
return util.RetriableError{err}
}
if resp == nil {
err = fmt.Errorf("empty response fetching expansions")
h.Logger.Logf(slogger.ERROR, err.Error())
return util.RetriableError{err}
}
// got here safely, so all is good - read the results
err = util.ReadJSONInto(resp.Body, resultVars)
if err != nil {
err = fmt.Errorf("failed to read vars from response: %v", err)
h.Logger.Logf(slogger.ERROR, err.Error())
return err
}
return nil
},
)
retryFail, err := util.Retry(retriableGet, 10, 1*time.Second)
if err != nil {
// stop trying to make fetch happen, it's not going to happen
if retryFail {
h.Logger.Logf(slogger.ERROR, "Fetching vars used up all retries.")
}
return nil, err
}
return resultVars, err
}
开发者ID:MauroJr,项目名称:evergreen,代码行数:51,代码来源:http.go
示例11: GetProjectConfig
// GetProjectConfig loads the communicator's task's project from the API server.
func (h *HTTPCommunicator) GetProjectConfig() (*model.Project, error) {
projectConfig := &model.Project{}
retriableGet := util.RetriableFunc(
func() error {
resp, err := h.tryGet("version")
if resp != nil {
defer resp.Body.Close()
}
if resp != nil && resp.StatusCode == http.StatusConflict {
// Something very wrong, fail now with no retry.
return fmt.Errorf("conflict - wrong secret!")
}
if err != nil {
// Some generic error trying to connect - try again
return util.RetriableError{err}
}
if resp == nil {
return util.RetriableError{fmt.Errorf("empty response")}
} else {
v := &version.Version{}
err = util.ReadJSONInto(resp.Body, v)
if err != nil {
h.Logger.Errorf(slogger.ERROR,
"unable to read project version response: %v\n", err)
return util.RetriableError{fmt.Errorf("unable to read "+
"project version response: %v\n", err)}
}
err = model.LoadProjectInto([]byte(v.Config), v.Project, projectConfig)
if err != nil {
h.Logger.Errorf(slogger.ERROR,
"unable to unmarshal project config: %v\n", err)
return util.RetriableError{fmt.Errorf("unable to "+
"unmarshall project config: %v\n", err)}
}
return nil
}
},
)
retryFail, err := util.Retry(retriableGet, h.MaxAttempts, h.RetrySleep)
if retryFail {
return nil, fmt.Errorf("getting project configuration failed after %v "+
"tries: %v", h.MaxAttempts, err)
}
return projectConfig, nil
}
开发者ID:MauroJr,项目名称:evergreen,代码行数:47,代码来源:http.go
示例12: GetVersion
// GetVersion loads the communicator's task's version from the API server.
func (h *HTTPCommunicator) GetVersion() (*version.Version, error) {
v := &version.Version{}
retriableGet := util.RetriableFunc(
func() error {
resp, err := h.TryGet("version")
if resp != nil {
defer resp.Body.Close()
}
if resp != nil {
if resp.StatusCode == http.StatusConflict {
// Something very wrong, fail now with no retry.
return fmt.Errorf("conflict - wrong secret!")
}
if resp.StatusCode != http.StatusOK {
msg, _ := ioutil.ReadAll(resp.Body) // ignore ReadAll error
return util.RetriableError{
fmt.Errorf("bad status code %v: %v", resp.StatusCode, string(msg)),
}
}
}
if err != nil {
// Some generic error trying to connect - try again
return util.RetriableError{err}
}
if resp == nil {
return util.RetriableError{fmt.Errorf("empty response")}
} else {
err = util.ReadJSONInto(resp.Body, v)
if err != nil {
h.Logger.Errorf(slogger.ERROR,
"unable to read project version response: %v\n", err)
return fmt.Errorf("unable to read project version response: %v\n", err)
}
return nil
}
},
)
retryFail, err := util.Retry(retriableGet, h.MaxAttempts, h.RetrySleep)
if retryFail {
return nil, fmt.Errorf("getting project configuration failed after %v "+
"tries: %v", h.MaxAttempts, err)
}
return v, nil
}
开发者ID:tychoish,项目名称:evergreen,代码行数:46,代码来源:http.go
示例13: getPatchContents
// getPatchContents() dereferences any patch files that are stored externally, fetching them from
// the API server, and setting them into the patch object.
func (gapc GitApplyPatchCommand) getPatchContents(conf *model.TaskConfig, com plugin.PluginCommunicator, log plugin.Logger, p *patch.Patch) error {
for i, patchPart := range p.Patches {
// If the patch isn't stored externally, no need to do anything.
if patchPart.PatchSet.PatchFileId == "" {
continue
}
// otherwise, fetch the contents and load it into the patch object
log.LogExecution(slogger.INFO, "Fetching patch contents for %v", patchPart.PatchSet.PatchFileId)
var result []byte
retriableGet := util.RetriableFunc(
func() error {
resp, err := com.TaskGetJSON(fmt.Sprintf("%s/%s", GitPatchFilePath, patchPart.PatchSet.PatchFileId))
if resp != nil {
defer resp.Body.Close()
}
if err != nil {
//Some generic error trying to connect - try again
log.LogExecution(slogger.WARN, "Error connecting to API server: %v", err)
return util.RetriableError{err}
}
if resp != nil && resp.StatusCode != http.StatusOK {
log.LogExecution(slogger.WARN, "Unexpected status code %v, retrying", resp.StatusCode)
resp.Body.Close()
return util.RetriableError{fmt.Errorf("Unexpected status code %v", resp.StatusCode)}
}
result, err = ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
return nil
})
_, err := util.RetryArithmeticBackoff(retriableGet, 5, 5*time.Second)
if err != nil {
return err
}
p.Patches[i].PatchSet.Patch = string(result)
}
return nil
}
开发者ID:tessavitabile,项目名称:evergreen,代码行数:42,代码来源:git_apply_patch.go
示例14: TaskPostTestLog
// TaskPostTestLog posts a test log for a communicator's task.
func (t *TaskJSONCommunicator) TaskPostTestLog(log *model.TestLog) (string, error) {
var logId string
retriableSendFile := util.RetriableFunc(
func() error {
resp, err := t.TryPostJSON("test_logs", log)
if err != nil {
err := fmt.Errorf("error posting logs: %v", err)
if resp != nil {
resp.Body.Close()
}
return util.RetriableError{err}
}
if resp.StatusCode == http.StatusOK {
logReply := struct {
Id string `json:"_id"`
}{}
err = util.ReadJSONInto(resp.Body, &logReply)
if err != nil {
return err
}
logId = logReply.Id
return nil
}
bodyErr, err := ioutil.ReadAll(resp.Body)
if err != nil {
return util.RetriableError{err}
}
if resp.StatusCode == http.StatusBadRequest {
return fmt.Errorf("bad request posting logs: %v", string(bodyErr))
}
return util.RetriableError{fmt.Errorf("failed posting logs: %v", string(bodyErr))}
},
)
retryFail, err := util.RetryArithmeticBackoff(retriableSendFile, 10, 1)
if retryFail {
return "", fmt.Errorf("attaching test logs failed after %v tries: %v", 10, err)
}
return logId, nil
}
开发者ID:tychoish,项目名称:evergreen,代码行数:41,代码来源:task_json.go
示例15: PutWithRetry
// Wrapper around the Put() function to retry it
func (self *S3PutCommand) PutWithRetry(pluginLogger plugin.Logger,
pluginComm plugin.PluginCommunicator) error {
retriablePut := util.RetriableFunc(
func() error {
err := self.Put()
if err != nil {
pluginLogger.LogExecution(slogger.ERROR, "Error putting to s3"+
" bucket: %v", err)
return util.RetriableError{err}
}
return nil
},
)
retryFail, err := util.RetryArithmeticBackoff(retriablePut,
maxS3PutAttempts, s3PutSleep)
if retryFail {
pluginLogger.LogExecution(slogger.ERROR, "S3 put failed with error: %v",
err)
return err
}
return self.AttachTaskFiles(pluginLogger, pluginComm)
}
开发者ID:MauroJr,项目名称:evergreen,代码行数:24,代码来源:put_command.go
示例16: GetDistro
// GetDistro returns the distro for the communicator's task.
func (h *HTTPCommunicator) GetDistro() (*distro.Distro, error) {
d := &distro.Distro{}
retriableGet := util.RetriableFunc(
func() error {
resp, err := h.tryGet("distro")
if resp != nil {
defer resp.Body.Close()
}
if resp != nil && resp.StatusCode == http.StatusConflict {
// Something very wrong, fail now with no retry.
return fmt.Errorf("conflict - wrong secret!")
}
if err != nil {
// Some generic error trying to connect - try again
return util.RetriableError{err}
}
if resp == nil {
return util.RetriableError{fmt.Errorf("empty response")}
} else {
err = util.ReadJSONInto(resp.Body, d)
if err != nil {
h.Logger.Errorf(slogger.ERROR,
"unable to read distro response: %v\n", err)
return util.RetriableError{err}
}
return nil
}
},
)
retryFail, err := util.Retry(retriableGet, h.MaxAttempts, h.RetrySleep)
if retryFail {
return nil, fmt.Errorf("getting distro failed after %v tries: %v", h.MaxAttempts, err)
}
return d, nil
}
开发者ID:MauroJr,项目名称:evergreen,代码行数:37,代码来源:http.go
示例17: Load
// Load performs a GET on /manifest/load
func (mfc *ManifestLoadCommand) Load(log plugin.Logger, pluginCom plugin.PluginCommunicator, conf *model.TaskConfig) error {
var loadedManifest *manifest.Manifest
var err error
retriableGet := util.RetriableFunc(
func() error {
resp, err := pluginCom.TaskGetJSON(ManifestLoadAPIEndpoint)
if resp != nil {
defer resp.Body.Close()
}
if err != nil {
//Some generic error trying to connect - try again
log.LogExecution(slogger.WARN, "Error connecting to API server: %v", err)
return util.RetriableError{err}
}
if resp != nil && resp.StatusCode != http.StatusOK {
log.LogExecution(slogger.WARN, "Unexpected status code %v, retrying", resp.StatusCode)
return util.RetriableError{fmt.Errorf("Unexpected status code %v", resp.StatusCode)}
}
err = util.ReadJSONInto(resp.Body, &loadedManifest)
if err != nil {
return err
}
return nil
})
_, err = util.RetryArithmeticBackoff(retriableGet, 5, 5*time.Second)
if err != nil {
return err
}
if loadedManifest == nil {
return fmt.Errorf("Manifest is empty")
}
mfc.updateExpansions(loadedManifest, conf)
return nil
}
开发者ID:tychoish,项目名称:evergreen,代码行数:37,代码来源:load_command.go
示例18: GetWithRetry
// Wrapper around the Get() function to retry it
func (self *S3GetCommand) GetWithRetry(pluginLogger plugin.Logger) error {
retriableGet := util.RetriableFunc(
func() error {
pluginLogger.LogTask(slogger.INFO, "Fetching %v from"+
" s3 bucket %v", self.RemoteFile, self.Bucket)
err := self.Get()
if err != nil {
pluginLogger.LogExecution(slogger.ERROR, "Error getting from"+
" s3 bucket: %v", err)
return util.RetriableError{err}
}
return nil
},
)
retryFail, err := util.RetryArithmeticBackoff(retriableGet,
MaxS3GetAttempts, S3GetSleep)
if retryFail {
pluginLogger.LogExecution(slogger.ERROR, "S3 get failed with error: %v",
err)
return err
}
return nil
}
开发者ID:himanshugpt,项目名称:evergreen,代码行数:25,代码来源:get_command.go
示例19: GetTask
// GetTask returns the communicator's task.
func (h *HTTPCommunicator) GetTask() (*task.Task, error) {
task := &task.Task{}
retriableGet := util.RetriableFunc(
func() error {
resp, err := h.tryGet("")
if resp != nil {
defer resp.Body.Close()
}
if resp != nil && resp.StatusCode == http.StatusConflict {
// Something very wrong, fail now with no retry.
return fmt.Errorf("conflict - wrong secret!")
}
if err != nil {
// Some generic error trying to connect - try again
return util.RetriableError{err}
}
if resp == nil {
return util.RetriableError{fmt.Errorf("empty response")}
} else {
err = util.ReadJSONInto(resp.Body, task)
if err != nil {
fmt.Printf("error3, retrying: %v\n", err)
return util.RetriableError{err}
}
return nil
}
},
)
retryFail, err := util.Retry(retriableGet, h.MaxAttempts, h.RetrySleep)
if retryFail {
return nil, fmt.Errorf("getting task failed after %v tries: %v",
h.MaxAttempts, err)
}
return task, nil
}
开发者ID:sr527,项目名称:evergreen,代码行数:37,代码来源:http.go
示例20: SendTaskFiles
// SendJSONResults is responsible for sending the
// specified file to the API Server
func (self *AttachTaskFilesCommand) SendTaskFiles(taskConfig *model.TaskConfig,
pluginLogger plugin.Logger, pluginCom plugin.PluginCommunicator) error {
// log each file attachment
for name, link := range self.Files {
pluginLogger.LogTask(slogger.INFO,
"Attaching file: %v -> %v", name, link)
}
retriableSendFile := util.RetriableFunc(
func() error {
resp, err := pluginCom.TaskPostJSON(
AttachTaskFilesAPIEndpoint,
self.Files.Array(),
)
if resp != nil {
defer resp.Body.Close()
}
if resp != nil && resp.StatusCode == http.StatusConflict {
body, _ := ioutil.ReadAll(resp.Body)
msg := fmt.Sprintf(
"secret conflict while posting task files: %v", string(body))
pluginLogger.LogTask(slogger.ERROR, msg)
return fmt.Errorf(msg)
}
if resp != nil && resp.StatusCode == http.StatusBadRequest {
body, _ := ioutil.ReadAll(resp.Body)
msg := fmt.Sprintf(
"error posting task files (%v): %v", resp.StatusCode, string(body))
pluginLogger.LogTask(slogger.ERROR, msg)
return fmt.Errorf(msg)
}
if resp != nil && resp.StatusCode != http.StatusOK {
body, _ := ioutil.ReadAll(resp.Body)
msg := fmt.Sprintf("error posting task files (%v): %v",
resp.StatusCode, string(body))
pluginLogger.LogExecution(slogger.WARN, msg)
return util.RetriableError{err}
}
if err != nil {
msg := fmt.Sprintf("error posting files: %v", err)
pluginLogger.LogExecution(slogger.WARN, msg)
return util.RetriableError{fmt.Errorf(msg)}
}
return nil
},
)
retryFail, err := util.Retry(retriableSendFile, AttachResultsPostRetries,
AttachResultsRetrySleepSec)
if retryFail {
return fmt.Errorf("Attach files failed after %v tries: %v",
AttachResultsPostRetries, err)
}
if err != nil {
return fmt.Errorf("Attach files failed: %v", err)
}
pluginLogger.LogExecution(slogger.INFO, "API attach files call succeeded")
return nil
}
开发者ID:himanshugpt,项目名称:evergreen,代码行数:64,代码来源:files_command.go
注:本文中的github.com/evergreen-ci/evergreen/util.RetriableFunc函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论