in pkg/providers/apisix/apisix_upstream.go [415:477]
func (c *apisixUpstreamController) syncRelationship(ev *types.Event, auKey string, au kube.ApisixUpstream) {
obj := ev.Object.(kube.ApisixUpstreamEvent)
if obj.GroupVersion != config.ApisixV2 {
return
}
var (
old *configv2.ApisixUpstream
newObj *configv2.ApisixUpstream
)
if ev.Type == types.EventUpdate {
old = obj.OldObject.V2()
} else if ev.Type == types.EventDelete {
old = ev.Tombstone.(kube.ApisixUpstream).V2()
}
if ev.Type != types.EventDelete {
newObj = au.V2()
}
var (
//oldExternalDomains []string
//newExternalDomains []string
oldExternalServices []string
newExternalServices []string
)
if old != nil {
for _, node := range old.Spec.ExternalNodes {
if node.Type == configv2.ExternalTypeDomain {
//oldExternalDomains = append(oldExternalDomains, node.Name)
} else if node.Type == configv2.ExternalTypeService {
oldExternalServices = append(oldExternalServices, old.Namespace+"/"+node.Name)
}
}
}
if newObj != nil {
for _, node := range newObj.Spec.ExternalNodes {
if node.Type == configv2.ExternalTypeDomain {
//newExternalDomains = append(newExternalDomains, node.Name)
} else if node.Type == configv2.ExternalTypeService {
newExternalServices = append(newExternalServices, newObj.Namespace+"/"+node.Name)
}
}
}
c.externalSvcLock.Lock()
defer c.externalSvcLock.Unlock()
toDelete := utils.Difference(oldExternalServices, newExternalServices)
toAdd := utils.Difference(newExternalServices, oldExternalServices)
for _, svc := range toDelete {
delete(c.externalServiceMap[svc], auKey)
}
for _, svc := range toAdd {
if _, ok := c.externalServiceMap[svc]; !ok {
c.externalServiceMap[svc] = make(map[string]struct{})
}
c.externalServiceMap[svc][auKey] = struct{}{}
}
}