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
}