in pkg/cloudmap/operation_poller.go [68:113]
func (opPoller *operationPoller) Poll(ctx context.Context) (err error) {
if len(opPoller.opIds) == 0 {
opPoller.log.Info("no operations to poll")
return nil
}
err = wait.Poll(defaultOperationPollInterval, opPoller.timeout, func() (done bool, err error) {
opPoller.log.Info("polling operations", "operations", opPoller.opIds)
sdOps, err := opPoller.sdApi.ListOperations(ctx, opPoller.buildFilters())
if err != nil {
return true, err
}
failedOps := make([]string, 0)
for _, pollOp := range opPoller.opIds {
status, hasVal := sdOps[pollOp]
if !hasVal {
// polled operation not terminal
return false, nil
}
if status == types.OperationStatusFail {
failedOps = append(failedOps, pollOp)
}
}
if len(failedOps) != 0 {
for _, failedOp := range failedOps {
opPoller.log.Info("operation failed", "failedOp", failedOp, "reason", opPoller.getFailedOpReason(ctx, failedOp))
}
return true, errors.New("operation failure")
}
opPoller.log.Info("operations completed successfully")
return true, nil
})
if err == wait.ErrWaitTimeout {
return errors.New(operationPollTimoutErrorMessage)
}
return err
}