in pkg/controller/disaggregated_cluster_controller.go [299:334]
func (dc *DisaggregatedClusterReconciler) updateObjectORStatus(ctx context.Context, ddc *dv1.DorisDisaggregatedCluster, preHv string) (ctrl.Result, error) {
postHv := hash.HashObject(ddc.Spec)
deepCopyDDC := ddc.DeepCopy()
if preHv != postHv {
var eddc dv1.DorisDisaggregatedCluster
if err := dc.Get(ctx, types.NamespacedName{Namespace: ddc.Namespace, Name: ddc.Name}, &eddc); err == nil || !apierrors.IsNotFound(err) {
if eddc.ResourceVersion != "" {
ddc.ResourceVersion = eddc.ResourceVersion
}
}
if err := dc.Update(ctx, ddc); err != nil {
klog.Errorf("disaggreatedClusterReconciler update DorisDisaggregatedCluster namespace %s name %s failed, err=%s", ddc.Namespace, ddc.Name, err.Error())
//return ctrl.Result{}, err
}
}
res, err := dc.updateDorisDisaggregatedClusterStatus(ctx, deepCopyDDC)
if err != nil {
return res, err
}
//if decommissioning, be is migrating data should wait it over, so return reconciling after 10 seconds.
for _, cgs := range ddc.Status.ComputeGroupStatuses {
if cgs.Phase == dv1.Decommissioning {
return ctrl.Result{RequeueAfter: 10 * time.Second}, nil
}
}
// If the cluster status is abnormal(Health is not Green), reconciling is required.
if ddc.Status.ClusterHealth.Health != dv1.Green {
return ctrl.Result{RequeueAfter: 10 * time.Second}, nil
}
return res, nil
}