@@ -203,7 +203,17 @@ func (b *ProdBackendController) ReconcileBackends(actual, intended AutonegStatus
203203 for idx , remove := range _removes {
204204 var oldSvc * compute.BackendService
205205 oldSvc , err = b .getBackendService (remove .name , remove .region )
206- if err != nil {
206+ var svcUpdated = false
207+ var e * errNotFound
208+ if errors .As (err , & e ) {
209+ // If the backend service is gone, we construct a BackendService with the same name
210+ // and an empty list of backends.
211+ err = nil
212+ oldSvc = & compute.BackendService {
213+ Name : remove .name ,
214+ Backends : make ([]* compute.Backend , 0 ),
215+ }
216+ } else if err != nil {
207217 return
208218 }
209219
@@ -222,6 +232,7 @@ func (b *ProdBackendController) ReconcileBackends(actual, intended AutonegStatus
222232 for _ , d := range remove .backends {
223233 for i , be := range oldSvc .Backends {
224234 if d .Group == be .Group {
235+ svcUpdated = true
225236 copy (oldSvc .Backends [i :], oldSvc .Backends [i + 1 :])
226237 oldSvc .Backends = oldSvc .Backends [:len (oldSvc .Backends )- 1 ]
227238 break
@@ -230,7 +241,7 @@ func (b *ProdBackendController) ReconcileBackends(actual, intended AutonegStatus
230241 }
231242
232243 // If we are changing backend services, save the old service
233- if upsert .name != remove .name {
244+ if upsert .name != remove .name && svcUpdated {
234245 if err = b .updateBackends (remove .name , remove .region , oldSvc , forceCapacity ); err != nil {
235246 return
236247 }
@@ -273,7 +284,9 @@ func (b *ProdBackendController) ReconcileBackends(actual, intended AutonegStatus
273284 newSvc .Backends = append (newSvc .Backends , & newBackend )
274285 }
275286 }
276- err = b .updateBackends (upsert .name , upsert .region , newSvc , forceCapacity )
287+ if len (upsert .backends ) > 0 {
288+ err = b .updateBackends (upsert .name , upsert .region , newSvc , forceCapacity )
289+ }
277290 if err != nil {
278291 return err
279292 }
0 commit comments