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
}