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
}
}