func()

in controllers/autoneg.go [131:177]


func (b *ProdBackendController) updateBackends(name string, region string, svc *compute.BackendService, forceCapacity map[int]bool) error {
	if len(svc.Backends) == 0 {
		svc.NullFields = []string{"Backends"}
	} else {
		for beidx, be := range svc.Backends {
			if fc, ok := forceCapacity[beidx]; ok && fc {
				be.ForceSendFields = []string{"CapacityScaler"}
			}
		}
	}
	// Perform locking to ensure we patch the intended object version
	if region == "" {
		p := compute.NewBackendServicesService(b.s).Patch(b.project, name, svc)
		p.Header().Set("If-match", svc.Header.Get("ETag"))
		res, err := p.Do()
		if err != nil {
			return err
		}
		operation := func() (bool, error) {
			op, err := compute.NewGlobalOperationsService(b.s).Get(b.project, res.Name).Do()
			if err != nil {
				return false, err
			}
			return true, checkOperation(op)
		}
		_, err = backoff.Retry(context.TODO(),
			operation, backoff.WithBackOff(backoff.NewExponentialBackOff()), backoff.WithMaxElapsedTime(maxElapsedTime))
		return err
	} else {
		p := compute.NewRegionBackendServicesService(b.s).Patch(b.project, region, name, svc)
		p.Header().Set("If-match", svc.Header.Get("ETag"))
		res, err := p.Do()
		if err != nil {
			return err
		}
		operation := func() (bool, error) {
			op, err := compute.NewRegionOperationsService(b.s).Get(b.project, region, res.Name).Do()
			if err != nil {
				return false, err
			}
			return true, checkOperation(op)
		}
		_, err = backoff.Retry(context.TODO(), operation,
			backoff.WithBackOff(backoff.NewExponentialBackOff()), backoff.WithMaxElapsedTime(maxElapsedTime))
		return err
	}
}