// edgeHop checks the links of the given backend by executing an edge hop. // It fixes broken links. func (b *Backends) edgeHop(be *compute.BackendService, igs []*compute.InstanceGroup) error { beIGs := sets.String{} for _, beToIG := range be.Backends { beIGs.Insert(beToIG.Group) } igLinks := sets.String{} for _, igToBE := range igs { igLinks.Insert(igToBE.SelfLink) } if beIGs.IsSuperset(igLinks) { return nil } glog.Infof("Backend %v has a broken edge, expected igs %+v, current igs %+v", be.Name, igLinks.List(), beIGs.List()) newBackends := []*compute.Backend{} for _, b := range getBackendsForIGs(igs) { if !beIGs.Has(b.Group) { newBackends = append(newBackends, b) } } be.Backends = append(be.Backends, newBackends...) if err := b.cloud.UpdateBackendService(be); err != nil { return err } return nil }