func()

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
}