func CreateTimeSeriesWithRetry()

in sharedlibraries/cloudmonitoring/cloudmonitoring.go [105:130]


func CreateTimeSeriesWithRetry(ctx context.Context, client TimeSeriesCreator, req *mpb.CreateTimeSeriesRequest, bo *BackOffIntervals) error {

	attempt := 1
	if bo == nil {
		bo = NewDefaultBackOffIntervals()
	}

	err := backoff.Retry(func() error {
		if err := client.CreateTimeSeries(ctx, req); err != nil {
			if strings.Contains(err.Error(), "PermissionDenied") {
				log.CtxLogger(ctx).Warnw("Error in CreateTimeSeries, Permission denied - Enable the Monitoring Metrics Writer IAM role for the Service Account", "attempt", attempt, "error", err)
			} else {
				log.CtxLogger(ctx).Warnw("Error in CreateTimeSeries", "attempt", attempt, "error", err)
			}
			attempt++
			return err
		}
		return nil
	}, ShortConstantBackOffPolicy(ctx, bo.ShortConstant, bo.Retries))

	if err != nil {
		log.CtxLogger(ctx).Errorw("CreateTimeSeries retry limit exceeded", "request", req)
		return err
	}
	return nil
}