func()

in pkg/datasource/k8s/controllers/isolationrules_controller.go [46:109]


func (r *IsolationRulesReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
	ctx := context.Background()
	log := r.Logger.WithValues("expectedNamespace", r.Namespace, "expectedCrName", r.ExpectedCrName, "req", req.String())

	if req.Namespace != r.Namespace {
		log.V(int(logging.DebugLevel)).Info("ignore unmatched namespace")
		return ctrl.Result{
			Requeue:      false,
			RequeueAfter: 0,
		}, nil
	}

	if req.Name != r.ExpectedCrName {
		return ctrl.Result{
			Requeue:      false,
			RequeueAfter: 0,
		}, nil
	}

	isolationRulesCR := &datasourcev1.IsolationRules{}
	if err := r.Get(ctx, req.NamespacedName, isolationRulesCR); err != nil {
		k8sApiErr, ok := err.(*k8sApiError.StatusError)
		if !ok {
			log.Error(err, "Fail to get datasourcev1.IsolationRules.")
			return ctrl.Result{
				Requeue:      false,
				RequeueAfter: 0,
			}, nil
		}
		if k8sApiErr.Status().Code != http.StatusNotFound {
			log.Error(err, "Fail to get datasourcev1.IsolationRules.")
			return ctrl.Result{
				Requeue:      false,
				RequeueAfter: 0,
			}, nil
		}
		log.Info("datasourcev1.IsolationRules had been deleted.")
		isolationRulesCR = nil
	}

	var isolationRules []*isolation.Rule
	if isolationRulesCR != nil {
		log.Info("Get datasourcev1.IsolationRules", "rules:", isolationRulesCR.Spec.Rules)
		isolationRules = make([]*isolation.Rule, 0, len(isolationRulesCR.Spec.Rules))
		for _, r := range isolationRulesCR.Spec.Rules {
			isolationRules = append(isolationRules, &isolation.Rule{
				ID:         r.ID,
				Resource:   r.Resource,
				MetricType: isolation.Concurrency,
				Threshold:  uint32(r.Threshold),
			})
		}
	}

	_, err := isolation.LoadRules(isolationRules)
	if err != nil {
		log.Error(err, "Fail to Load isolation.Rules")
		return ctrl.Result{
			Requeue:      false,
			RequeueAfter: 0,
		}, err
	}
	return ctrl.Result{}, nil
}