func()

in controllers/core/node_controller.go [65:108]


func (r *NodeReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
	if !r.Conditions.GetPodDataStoreSyncStatus() {
		// if pod cache is not ready, let's exponentially requeue the requests instead of letting routines wait
		r.Log.Info("waiting for pod datastore to sync")
		return ctrl.Result{RequeueAfter: time.Second}, nil
	}

	node := &corev1.Node{}

	logger := r.Log.WithValues("node", req.NamespacedName)

	if nodeErr := r.Client.Get(ctx, req.NamespacedName, node); nodeErr != nil {
		if errors.IsNotFound(nodeErr) {
			// clean up local cached nodes
			_, found := r.Manager.GetNode(req.Name)
			if found {
				cacheErr := r.Manager.DeleteNode(req.Name)
				if cacheErr != nil {
					// The request is not retryable so not returning the error
					logger.Error(cacheErr, "failed to delete node from manager")
					return ctrl.Result{}, nil
				}
				logger.V(1).Info("deleted the node from manager")
			}
		}
		return ctrl.Result{}, client.IgnoreNotFound(nodeErr)
	}

	var err error

	_, found := r.Manager.GetNode(req.Name)
	if found {
		logger.V(1).Info("updating node")
		err = r.Manager.UpdateNode(req.Name)

		// ReconcileNode actually run a branch ENI leaking check from an independent goroutine on added nodes.
		r.Manager.CheckNodeForLeakedENIs(req.Name)
	} else {
		logger.Info("adding node")
		err = r.Manager.AddNode(req.Name)
	}

	return ctrl.Result{}, err
}