func claimTask(client client.Queue, taskID string, runID int, workerID string, workerGroup string, log *logrus.Entry) (*taskClaim, error) { log.Info("Claiming task") payload := queue.TaskClaimRequest{ WorkerGroup: workerGroup, WorkerID: workerID, } tcrsp, err := client.ClaimTask(taskID, strconv.Itoa(runID), &payload) // check if an error occurred... if err != nil { switch err := err.(type) { case httpbackoff.BadHttpResponseCode: e := &updateError{ err: err.Error(), statusCode: err.HttpResponseCode, } var errorMessage string switch { case err.HttpResponseCode == 401 || err.HttpResponseCode == 403: errorMessage = fmt.Sprintf("Not authorized to claim task %s (status code %v).", taskID, err.HttpResponseCode) case err.HttpResponseCode >= 500: errorMessage = fmt.Sprintf("Server error (status code %v) when attempting to claim task %v.", err.HttpResponseCode, taskID) case err.HttpResponseCode != 200: errorMessage = fmt.Sprintf("Received http status code %v when claiming task %v.", err.HttpResponseCode, taskID) } log.WithFields(logrus.Fields{ "error": err, "statusCode": err.HttpResponseCode, }).Error(errorMessage) return nil, e default: log.WithFields(logrus.Fields{ "error": err, }).Error(fmt.Sprintf("Unexpected error occurred when claiming task %s", taskID)) return nil, err } } return &taskClaim{ taskID: taskID, runID: runID, taskClaim: tcrsp, definition: &tcrsp.Task, }, nil }