in pkg/providers/ingress/ingress.go [336:392]
func (c *ingressController) onUpdate(oldObj, newObj interface{}) {
prev := kube.MustNewIngress(oldObj)
curr := kube.MustNewIngress(newObj)
oldRV, _ := strconv.ParseInt(prev.ResourceVersion(), 0, 64)
newRV, _ := strconv.ParseInt(curr.ResourceVersion(), 0, 64)
if oldRV >= newRV {
return
}
// Updates triggered by status are ignored.
if prev.GetGeneration() == curr.GetGeneration() && prev.GetUID() == curr.GetUID() {
switch curr.GroupVersion() {
case kube.IngressV1:
if reflect.DeepEqual(prev.V1().Spec, curr.V1().Spec) &&
!reflect.DeepEqual(prev.V1().Status, curr.V1().Status) {
return
}
case kube.IngressV1beta1:
if reflect.DeepEqual(prev.V1beta1().Spec, curr.V1beta1().Spec) &&
!reflect.DeepEqual(prev.V1beta1().Status, curr.V1beta1().Status) {
return
}
}
}
key, err := cache.MetaNamespaceKeyFunc(newObj)
if err != nil {
log.Errorf("found ingress resource with bad meta namespace key: %s", err)
return
}
if !c.namespaceProvider.IsWatchingNamespace(key) {
return
}
valid := c.isIngressEffective(curr)
if valid {
log.Debugw("ingress update event arrived",
zap.Any("new object", newObj),
zap.Any("old object", oldObj),
)
} else {
log.Debugw("ignore noneffective ingress update event",
zap.Any("new object", oldObj),
zap.Any("old object", newObj),
)
return
}
c.workqueue.Add(&types.Event{
Type: types.EventUpdate,
Object: kube.IngressEvent{
Key: key,
GroupVersion: curr.GroupVersion(),
OldObject: prev,
},
})
c.MetricsCollector.IncrEvents("ingress", "update")
}