func()

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
}