in pkg/controller/nginxingress/nginx_ingress_controller.go [243:281]
func (n *nginxIngressControllerReconciler) GetCollisionCount(ctx context.Context, nic *approutingv1alpha1.NginxIngressController) (int32, error) {
lgr := log.FromContext(ctx)
// it's not this fn's job to overwrite the collision count, so we revert any changes we make
startingCollisionCount := nic.Status.CollisionCount
defer func() {
nic.Status.CollisionCount = startingCollisionCount
}()
for {
lgr = lgr.WithValues("collisionCount", nic.Status.CollisionCount)
if nic.Status.CollisionCount == approutingv1alpha1.MaxCollisions {
lgr.Info("max collisions reached")
return 0, maxCollisionsErr
}
collision, err := n.collides(ctx, nic)
if err != nil {
lgr.Error(err, "unable to determine collision")
return 0, fmt.Errorf("determining collision: %w", err)
}
if collision == collisionIngressClass {
// rare since our webhook guards against it, but it's possible
lgr.Info("ingress class collision")
return 0, icCollisionErr
}
if collision == collisionNone {
break
}
lgr.Info("reconcilable collision detected, incrementing")
nic.Status.CollisionCount++
}
return nic.Status.CollisionCount, nil
}