in sharedlibraries/cloudmonitoring/cloudmonitoring.go [133:161]
func QueryTimeSeriesWithRetry(ctx context.Context, client TimeSeriesQuerier, req *mpb.QueryTimeSeriesRequest, bo *BackOffIntervals) ([]*mrpb.TimeSeriesData, error) {
var (
attempt = 1
res []*mrpb.TimeSeriesData
)
if bo == nil {
bo = NewDefaultBackOffIntervals()
}
err := backoff.Retry(func() error {
var err error
res, err = client.QueryTimeSeries(ctx, req)
if err != nil {
if strings.Contains(err.Error(), "PermissionDenied") {
log.CtxLogger(ctx).Warnw("Error in QueryTimeSeries, Permission denied - Enable the Monitoring Viewer IAM role for the Service Account", "attempt", attempt, "error", err)
} else {
log.CtxLogger(ctx).Warnw("Error in QueryTimeSeries", "attempt", attempt, "error", err)
}
attempt++
}
return err
}, LongExponentialBackOffPolicy(ctx, bo.LongExponential, 4, time.Minute, 15*time.Second))
if err != nil {
log.CtxLogger(ctx).Errorw("QueryTimeSeries retry limit exceeded", "request", req, "error", err, "attempt", attempt)
return nil, err
}
return res, nil
}