@@ -203,7 +203,17 @@ func (b *ProdBackendController) ReconcileBackends(actual, intended AutonegStatus
203
203
for idx , remove := range _removes {
204
204
var oldSvc * compute.BackendService
205
205
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 {
207
217
return
208
218
}
209
219
@@ -222,6 +232,7 @@ func (b *ProdBackendController) ReconcileBackends(actual, intended AutonegStatus
222
232
for _ , d := range remove .backends {
223
233
for i , be := range oldSvc .Backends {
224
234
if d .Group == be .Group {
235
+ svcUpdated = true
225
236
copy (oldSvc .Backends [i :], oldSvc .Backends [i + 1 :])
226
237
oldSvc .Backends = oldSvc .Backends [:len (oldSvc .Backends )- 1 ]
227
238
break
@@ -230,7 +241,7 @@ func (b *ProdBackendController) ReconcileBackends(actual, intended AutonegStatus
230
241
}
231
242
232
243
// If we are changing backend services, save the old service
233
- if upsert .name != remove .name {
244
+ if upsert .name != remove .name && svcUpdated {
234
245
if err = b .updateBackends (remove .name , remove .region , oldSvc , forceCapacity ); err != nil {
235
246
return
236
247
}
@@ -273,7 +284,9 @@ func (b *ProdBackendController) ReconcileBackends(actual, intended AutonegStatus
273
284
newSvc .Backends = append (newSvc .Backends , & newBackend )
274
285
}
275
286
}
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
+ }
277
290
if err != nil {
278
291
return err
279
292
}
0 commit comments