From e7d480f7af38c70551f268d0e0763656444bd2b4 Mon Sep 17 00:00:00 2001 From: ztonny Date: Thu, 11 Sep 2025 16:52:50 +0800 Subject: [PATCH 1/6] [Bug] fix issue #439 in some cases, err.Error() will be called when err is nil, fix it; --- pkg/common/utils/mysql/mysql.go | 3 +-- pkg/common/utils/resource/configmap_test.go | 2 +- .../disaggregated_cluster/computegroups/controller.go | 5 ++--- pkg/controller/sub_controller/sub_controller.go | 4 ++-- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/pkg/common/utils/mysql/mysql.go b/pkg/common/utils/mysql/mysql.go index 0ed7941b..bd31d22d 100644 --- a/pkg/common/utils/mysql/mysql.go +++ b/pkg/common/utils/mysql/mysql.go @@ -232,8 +232,7 @@ func (db *DB) GetBackendsByComputeGroupId(cgid string) ([]*Backend, error) { return nil, err } if _, ok := m[COMPUTE_GROUP_ID]; !ok { - klog.Errorf("GetBackendsByComputeGroupId backends tag get compute_group_name failed, tag: %s, err: %s\n", be.Tag, err.Error()) - return nil, err + return nil, fmt.Errorf("GetBackendsByComputeGroupId backends tag get compute_group_name failed, tag: %s, err: no compute_group_id field found", be.Tag) } computegroupId := fmt.Sprintf("%s", m[COMPUTE_GROUP_ID]) diff --git a/pkg/common/utils/resource/configmap_test.go b/pkg/common/utils/resource/configmap_test.go index f0f33c6c..dea2f130 100644 --- a/pkg/common/utils/resource/configmap_test.go +++ b/pkg/common/utils/resource/configmap_test.go @@ -110,7 +110,7 @@ func Test_ResolveConfigMpas(t *testing.T) { m, err := ResolveConfigMaps(tests, dorisv1.Component_FE) if err != nil || len(m) == 0 { - t.Errorf("resolve configmaps faild, len=%d, err=%s", len(m), err.Error()) + t.Errorf("resolve configmaps faild, len=%d, err=%#v", len(m), err) } } diff --git a/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go b/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go index 037b5736..300e60ff 100644 --- a/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go +++ b/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go @@ -524,7 +524,7 @@ func (dcgs *DisaggregatedComputeGroupsController) ClearStatefulsetUnusedPVCs(ctx var perr error index, perr = strconv.ParseInt(sl[1], 10, 32) if perr != nil { - klog.Errorf("DisaggregatedComputeGroupsController ClearStatefulsetUnusedPVCs namespace %s name %s index parse failed, err=%s", ddc.Namespace, pvcName, err.Error()) + klog.Errorf("DisaggregatedComputeGroupsController ClearStatefulsetUnusedPVCs namespace %s name %s index parse failed, err=%s", ddc.Namespace, pvcName, perr.Error()) continue } if int32(index) >= replicas { @@ -639,8 +639,7 @@ func(dcgs *DisaggregatedComputeGroupsController) recordComputeGroupIds(ddc *dv1. return err } if _, ok := tags[mysql.COMPUTE_GROUP_ID]; !ok { - klog.Errorf("DisaggregatedComputeGroupsController recordComputeGroupIds backend tag get compute_group_name failed, tag: %s, err: %s", backend.Tag, err.Error()) - return err + return fmt.Errorf("DisaggregatedComputeGroupsController recordComputeGroupIds backend tag get compute_group_name failed, tag: %s, err: no compute_group_id field found ", backend.Tag) } podName := strings.Split(backend.Host, ".")[0] diff --git a/pkg/controller/sub_controller/sub_controller.go b/pkg/controller/sub_controller/sub_controller.go index 05f4dd5a..710054de 100644 --- a/pkg/controller/sub_controller/sub_controller.go +++ b/pkg/controller/sub_controller/sub_controller.go @@ -290,7 +290,7 @@ func (d *SubDefaultController) CheckSharedPVC(ctx context.Context, dcr *dorisv1. for _, claim := range dcr.Spec.SharedPersistentVolumeClaims { pvc, err := k8s.GetPVC(ctx, d.K8sclient, claim.PersistentVolumeClaimName, dcr.Namespace) if err != nil || pvc == nil { - errMessage := fmt.Sprintf("(PersistentVolumeClaim get failed name: %s, namespace: %s, err: %s), ", claim.PersistentVolumeClaimName, dcr.Namespace, err.Error()) + errMessage := fmt.Sprintf("(PersistentVolumeClaim get failed name: %s, namespace: %s, err: %#v), ", claim.PersistentVolumeClaimName, dcr.Namespace, err) klog.Errorf(errMessage) d.K8srecorder.Event(dcr, string(EventWarning), string(CheckSharePVC), errMessage) return @@ -555,7 +555,7 @@ func (d *SubDefaultController) listAndDeletePersistentVolumeClaim(ctx context.Co dorisPersistentVolumes, err := d.GetFinalPersistentVolumes(ctx, dcr, componentType) if err != nil { - d.K8srecorder.Event(dcr, string(EventWarning), PVCExplainFailed, fmt.Sprintf("listAndDeletePersistentVolumeClaim %s GetFinalPersistentVolumes failed:%s", componentType, err.Error())) + d.K8srecorder.Event(dcr, string(EventWarning), PVCExplainFailed, fmt.Sprintf("listAndDeletePersistentVolumeClaim %s GetFinalPersistentVolumes failed: %s", componentType, err.Error())) return err } From 1a49211b44e6523eb4847c8ca060b73179279459 Mon Sep 17 00:00:00 2001 From: ztonny Date: Thu, 18 Sep 2025 17:06:40 +0800 Subject: [PATCH 2/6] [Bug] fix issue #439 use klog to print log message and drop %#v for err; --- pkg/common/utils/mysql/mysql.go | 4 +++- pkg/common/utils/resource/configmap_test.go | 11 +++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/pkg/common/utils/mysql/mysql.go b/pkg/common/utils/mysql/mysql.go index bd31d22d..eba693da 100644 --- a/pkg/common/utils/mysql/mysql.go +++ b/pkg/common/utils/mysql/mysql.go @@ -232,7 +232,9 @@ func (db *DB) GetBackendsByComputeGroupId(cgid string) ([]*Backend, error) { return nil, err } if _, ok := m[COMPUTE_GROUP_ID]; !ok { - return nil, fmt.Errorf("GetBackendsByComputeGroupId backends tag get compute_group_name failed, tag: %s, err: no compute_group_id field found", be.Tag) + errMsg := fmt.Sprintf("GetBackendsByComputeGroupId backends tag get compute_group_name failed, tag: %s, err: no compute_group_id field found", be.Tag) + klog.Errorf(errMsg) + return nil, errors.New(errMsg) } computegroupId := fmt.Sprintf("%s", m[COMPUTE_GROUP_ID]) diff --git a/pkg/common/utils/resource/configmap_test.go b/pkg/common/utils/resource/configmap_test.go index dea2f130..f477ce0c 100644 --- a/pkg/common/utils/resource/configmap_test.go +++ b/pkg/common/utils/resource/configmap_test.go @@ -18,11 +18,12 @@ package resource import ( - dorisv1 "github.com/apache/doris-operator/api/doris/v1" - corev1 "k8s.io/api/core/v1" "reflect" "strconv" "testing" + + dorisv1 "github.com/apache/doris-operator/api/doris/v1" + corev1 "k8s.io/api/core/v1" ) func Test_GetStartMode(t *testing.T) { @@ -109,8 +110,10 @@ func Test_ResolveConfigMpas(t *testing.T) { } m, err := ResolveConfigMaps(tests, dorisv1.Component_FE) - if err != nil || len(m) == 0 { - t.Errorf("resolve configmaps faild, len=%d, err=%#v", len(m), err) + if err != nil { + t.Errorf("resolve configmaps faild, len=%d, err=%s", len(m), err.Error()) + } else if len(m) == 0 { + t.Errorf("resolve configmaps faild, len=%d", len(m)) } } From 62c3ea7261226a610f1fa529d9415bf8d8df9f7f Mon Sep 17 00:00:00 2001 From: ztonny Date: Thu, 18 Sep 2025 17:13:11 +0800 Subject: [PATCH 3/6] [Bug] fix issue #439 use klog to print log message --- .../computegroups/controller.go | 92 +++++++++---------- 1 file changed, 45 insertions(+), 47 deletions(-) diff --git a/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go b/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go index 300e60ff..5354960b 100644 --- a/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go +++ b/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go @@ -18,29 +18,29 @@ package computegroups import ( - "context" - "encoding/json" - "errors" - "fmt" - "regexp" - "strconv" - "strings" - "sync" - - dv1 "github.com/apache/doris-operator/api/disaggregated/v1" - "github.com/apache/doris-operator/pkg/common/utils" - "github.com/apache/doris-operator/pkg/common/utils/k8s" - "github.com/apache/doris-operator/pkg/common/utils/mysql" - "github.com/apache/doris-operator/pkg/common/utils/resource" - "github.com/apache/doris-operator/pkg/common/utils/set" - sc "github.com/apache/doris-operator/pkg/controller/sub_controller" - appv1 "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/types" - "k8s.io/klog/v2" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/client" + "context" + "encoding/json" + "errors" + "fmt" + "regexp" + "strconv" + "strings" + "sync" + + dv1 "github.com/apache/doris-operator/api/disaggregated/v1" + "github.com/apache/doris-operator/pkg/common/utils" + "github.com/apache/doris-operator/pkg/common/utils/k8s" + "github.com/apache/doris-operator/pkg/common/utils/mysql" + "github.com/apache/doris-operator/pkg/common/utils/resource" + "github.com/apache/doris-operator/pkg/common/utils/set" + sc "github.com/apache/doris-operator/pkg/controller/sub_controller" + appv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/types" + "k8s.io/klog/v2" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/client" ) var _ sc.DisaggregatedSubController = &DisaggregatedComputeGroupsController{} @@ -167,13 +167,13 @@ func (dcgs *DisaggregatedComputeGroupsController) computeGroupSync(ctx context.C // reconcileStatefulset return bool means reconcile print error message. func (dcgs *DisaggregatedComputeGroupsController) reconcileStatefulset(ctx context.Context, st *appv1.StatefulSet, cluster *dv1.DorisDisaggregatedCluster, cg *dv1.ComputeGroup) (*sc.Event, error) { - //use new default value before apply new statefulset, when creating and apply spec change. - ndf := func(st *appv1.StatefulSet, est *appv1.StatefulSet) { - dcgs.useNewDefaultValuesInStatefulset(st) - } + //use new default value before apply new statefulset, when creating and apply spec change. + ndf := func(st *appv1.StatefulSet, est *appv1.StatefulSet) { + dcgs.useNewDefaultValuesInStatefulset(st) + } - var est appv1.StatefulSet - if err := dcgs.K8sclient.Get(ctx, types.NamespacedName{Namespace: st.Namespace, Name: st.Name}, &est); apierrors.IsNotFound(err) { + var est appv1.StatefulSet + if err := dcgs.K8sclient.Get(ctx, types.NamespacedName{Namespace: st.Namespace, Name: st.Name}, &est); apierrors.IsNotFound(err) { // add downlaodAPI volume Mounts dcgs.DisaggregatedSubDefaultController.AddDownwardAPI(st) //if err = k8s.CreateClientObject(ctx, dcgs.K8sclient, st); err != nil { @@ -181,14 +181,14 @@ func (dcgs *DisaggregatedComputeGroupsController) reconcileStatefulset(ctx conte // return &sc.Event{Type: sc.EventWarning, Reason: sc.CGCreateResourceFailed, Message: err.Error()}, err //} - //use apply replace create, if use create the default image not replace with be image and annotation for equal not assign. - if err = k8s.ApplyStatefulSet(ctx, dcgs.K8sclient, st, func(st, est *appv1.StatefulSet) bool { - //creating use the function to assign equal annotation. - return resource.StatefulsetDeepEqualWithKey(st ,est, dv1.DisaggregatedSpecHashValueAnnotation, false) - }, ndf); err != nil { - klog.Errorf("disaggregatedComputeGroupsController reconcileStatefulset create statefulset namespace=%s name=%s failed, err=%s", st.Namespace, st.Name, err.Error()) - return &sc.Event{Type: sc.EventWarning, Reason: sc.CGCreateResourceFailed, Message: err.Error()}, err - } + //use apply replace create, if use create the default image not replace with be image and annotation for equal not assign. + if err = k8s.ApplyStatefulSet(ctx, dcgs.K8sclient, st, func(st, est *appv1.StatefulSet) bool { + //creating use the function to assign equal annotation. + return resource.StatefulsetDeepEqualWithKey(st, est, dv1.DisaggregatedSpecHashValueAnnotation, false) + }, ndf); err != nil { + klog.Errorf("disaggregatedComputeGroupsController reconcileStatefulset create statefulset namespace=%s name=%s failed, err=%s", st.Namespace, st.Name, err.Error()) + return &sc.Event{Type: sc.EventWarning, Reason: sc.CGCreateResourceFailed, Message: err.Error()}, err + } return nil, nil } else if err != nil { @@ -205,7 +205,6 @@ func (dcgs *DisaggregatedComputeGroupsController) reconcileStatefulset(ctx conte return nil, nil } - if err := k8s.ApplyStatefulSet(ctx, dcgs.K8sclient, st, func(st, est *appv1.StatefulSet) bool { //store annotations "doris.disaggregated.cluster/generation={generation}" on statefulset //store annotations "doris.disaggregated.cluster/update-{uniqueid}=true/false" on DorisDisaggregatedCluster @@ -574,9 +573,8 @@ func (dcgs *DisaggregatedComputeGroupsController) UpdateComponentStatus(obj clie } } - for _, cgs := range ddc.Status.ComputeGroupStatuses { - if cgs.ComputeGroupId == "" { + if cgs.ComputeGroupId == "" { dcgs.recordComputeGroupIds(ddc) break } @@ -601,7 +599,7 @@ func (dcgs *DisaggregatedComputeGroupsController) UpdateComponentStatus(obj clie return errors.New(errMs) } -func(dcgs *DisaggregatedComputeGroupsController) recordComputeGroupIds(ddc *dv1.DorisDisaggregatedCluster) error { +func (dcgs *DisaggregatedComputeGroupsController) recordComputeGroupIds(ddc *dv1.DorisDisaggregatedCluster) error { // get user and password adminUserName, password := dcgs.GetManagementAdminUserAndPWD(context.Background(), ddc) @@ -632,30 +630,31 @@ func(dcgs *DisaggregatedComputeGroupsController) recordComputeGroupIds(ddc *dv1. m := map[string]string{} //statefulsetname:computegroupid for _, backend := range backends { - tags :=map[string]string{} + tags := map[string]string{} err = json.Unmarshal([]byte(backend.Tag), &tags) if err != nil { klog.Errorf("DisaggregatedComputeGroupsController recordComputeGroupIds backend tag stirng to map failed, tag: %s, err: %s", backend.Tag, err.Error()) return err } if _, ok := tags[mysql.COMPUTE_GROUP_ID]; !ok { - return fmt.Errorf("DisaggregatedComputeGroupsController recordComputeGroupIds backend tag get compute_group_name failed, tag: %s, err: no compute_group_id field found ", backend.Tag) + errMsg := fmt.Sprintf("DisaggregatedComputeGroupsController recordComputeGroupIds backend tag get compute_group_name failed, tag: %s, err: no compute_group_id field found ", backend.Tag) + klog.Errorf(errMsg) + return errors.New(errMsg) } podName := strings.Split(backend.Host, ".")[0] - re,_ := regexp.Compile("(.*)-[0-9]+$") + re, _ := regexp.Compile("(.*)-[0-9]+$") matchs := re.FindStringSubmatch(podName) stsName := matchs[len(matchs)-1] m[stsName] = tags[mysql.COMPUTE_GROUP_ID] } - for i,cgs := range ddc.Status.ComputeGroupStatuses { + for i, cgs := range ddc.Status.ComputeGroupStatuses { ddc.Status.ComputeGroupStatuses[i].ComputeGroupId = m[cgs.StatefulsetName] } return nil } - func (dcgs *DisaggregatedComputeGroupsController) updateCGStatus(ddc *dv1.DorisDisaggregatedCluster, cgs *dv1.ComputeGroupStatus) error { stfName := cgs.StatefulsetName sts, err := k8s.GetStatefulSet(context.Background(), dcgs.K8sclient, ddc.Namespace, stfName) @@ -680,7 +679,6 @@ func (dcgs *DisaggregatedComputeGroupsController) updateCGStatus(ddc *dv1.DorisD return err } - updateRevision := sts.Status.UpdateRevision //check all pods controlled by new statefulset. allUpdated := dcgs.DisaggregatedSubDefaultController.StatefulsetControlledPodsAllUseNewUpdateRevision(updateRevision, podList.Items) From 53ce8e89a65d9615be3a442cf77e16d2f166c3a8 Mon Sep 17 00:00:00 2001 From: ztonny Date: Thu, 18 Sep 2025 17:14:53 +0800 Subject: [PATCH 4/6] Revert "[Bug] fix issue #439" This reverts commit 62c3ea7261226a610f1fa529d9415bf8d8df9f7f. --- .../computegroups/controller.go | 92 ++++++++++--------- 1 file changed, 47 insertions(+), 45 deletions(-) diff --git a/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go b/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go index 5354960b..300e60ff 100644 --- a/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go +++ b/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go @@ -18,29 +18,29 @@ package computegroups import ( - "context" - "encoding/json" - "errors" - "fmt" - "regexp" - "strconv" - "strings" - "sync" - - dv1 "github.com/apache/doris-operator/api/disaggregated/v1" - "github.com/apache/doris-operator/pkg/common/utils" - "github.com/apache/doris-operator/pkg/common/utils/k8s" - "github.com/apache/doris-operator/pkg/common/utils/mysql" - "github.com/apache/doris-operator/pkg/common/utils/resource" - "github.com/apache/doris-operator/pkg/common/utils/set" - sc "github.com/apache/doris-operator/pkg/controller/sub_controller" - appv1 "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/types" - "k8s.io/klog/v2" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/client" + "context" + "encoding/json" + "errors" + "fmt" + "regexp" + "strconv" + "strings" + "sync" + + dv1 "github.com/apache/doris-operator/api/disaggregated/v1" + "github.com/apache/doris-operator/pkg/common/utils" + "github.com/apache/doris-operator/pkg/common/utils/k8s" + "github.com/apache/doris-operator/pkg/common/utils/mysql" + "github.com/apache/doris-operator/pkg/common/utils/resource" + "github.com/apache/doris-operator/pkg/common/utils/set" + sc "github.com/apache/doris-operator/pkg/controller/sub_controller" + appv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/types" + "k8s.io/klog/v2" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/client" ) var _ sc.DisaggregatedSubController = &DisaggregatedComputeGroupsController{} @@ -167,13 +167,13 @@ func (dcgs *DisaggregatedComputeGroupsController) computeGroupSync(ctx context.C // reconcileStatefulset return bool means reconcile print error message. func (dcgs *DisaggregatedComputeGroupsController) reconcileStatefulset(ctx context.Context, st *appv1.StatefulSet, cluster *dv1.DorisDisaggregatedCluster, cg *dv1.ComputeGroup) (*sc.Event, error) { - //use new default value before apply new statefulset, when creating and apply spec change. - ndf := func(st *appv1.StatefulSet, est *appv1.StatefulSet) { - dcgs.useNewDefaultValuesInStatefulset(st) - } + //use new default value before apply new statefulset, when creating and apply spec change. + ndf := func(st *appv1.StatefulSet, est *appv1.StatefulSet) { + dcgs.useNewDefaultValuesInStatefulset(st) + } - var est appv1.StatefulSet - if err := dcgs.K8sclient.Get(ctx, types.NamespacedName{Namespace: st.Namespace, Name: st.Name}, &est); apierrors.IsNotFound(err) { + var est appv1.StatefulSet + if err := dcgs.K8sclient.Get(ctx, types.NamespacedName{Namespace: st.Namespace, Name: st.Name}, &est); apierrors.IsNotFound(err) { // add downlaodAPI volume Mounts dcgs.DisaggregatedSubDefaultController.AddDownwardAPI(st) //if err = k8s.CreateClientObject(ctx, dcgs.K8sclient, st); err != nil { @@ -181,14 +181,14 @@ func (dcgs *DisaggregatedComputeGroupsController) reconcileStatefulset(ctx conte // return &sc.Event{Type: sc.EventWarning, Reason: sc.CGCreateResourceFailed, Message: err.Error()}, err //} - //use apply replace create, if use create the default image not replace with be image and annotation for equal not assign. - if err = k8s.ApplyStatefulSet(ctx, dcgs.K8sclient, st, func(st, est *appv1.StatefulSet) bool { - //creating use the function to assign equal annotation. - return resource.StatefulsetDeepEqualWithKey(st, est, dv1.DisaggregatedSpecHashValueAnnotation, false) - }, ndf); err != nil { - klog.Errorf("disaggregatedComputeGroupsController reconcileStatefulset create statefulset namespace=%s name=%s failed, err=%s", st.Namespace, st.Name, err.Error()) - return &sc.Event{Type: sc.EventWarning, Reason: sc.CGCreateResourceFailed, Message: err.Error()}, err - } + //use apply replace create, if use create the default image not replace with be image and annotation for equal not assign. + if err = k8s.ApplyStatefulSet(ctx, dcgs.K8sclient, st, func(st, est *appv1.StatefulSet) bool { + //creating use the function to assign equal annotation. + return resource.StatefulsetDeepEqualWithKey(st ,est, dv1.DisaggregatedSpecHashValueAnnotation, false) + }, ndf); err != nil { + klog.Errorf("disaggregatedComputeGroupsController reconcileStatefulset create statefulset namespace=%s name=%s failed, err=%s", st.Namespace, st.Name, err.Error()) + return &sc.Event{Type: sc.EventWarning, Reason: sc.CGCreateResourceFailed, Message: err.Error()}, err + } return nil, nil } else if err != nil { @@ -205,6 +205,7 @@ func (dcgs *DisaggregatedComputeGroupsController) reconcileStatefulset(ctx conte return nil, nil } + if err := k8s.ApplyStatefulSet(ctx, dcgs.K8sclient, st, func(st, est *appv1.StatefulSet) bool { //store annotations "doris.disaggregated.cluster/generation={generation}" on statefulset //store annotations "doris.disaggregated.cluster/update-{uniqueid}=true/false" on DorisDisaggregatedCluster @@ -573,8 +574,9 @@ func (dcgs *DisaggregatedComputeGroupsController) UpdateComponentStatus(obj clie } } + for _, cgs := range ddc.Status.ComputeGroupStatuses { - if cgs.ComputeGroupId == "" { + if cgs.ComputeGroupId == "" { dcgs.recordComputeGroupIds(ddc) break } @@ -599,7 +601,7 @@ func (dcgs *DisaggregatedComputeGroupsController) UpdateComponentStatus(obj clie return errors.New(errMs) } -func (dcgs *DisaggregatedComputeGroupsController) recordComputeGroupIds(ddc *dv1.DorisDisaggregatedCluster) error { +func(dcgs *DisaggregatedComputeGroupsController) recordComputeGroupIds(ddc *dv1.DorisDisaggregatedCluster) error { // get user and password adminUserName, password := dcgs.GetManagementAdminUserAndPWD(context.Background(), ddc) @@ -630,31 +632,30 @@ func (dcgs *DisaggregatedComputeGroupsController) recordComputeGroupIds(ddc *dv1 m := map[string]string{} //statefulsetname:computegroupid for _, backend := range backends { - tags := map[string]string{} + tags :=map[string]string{} err = json.Unmarshal([]byte(backend.Tag), &tags) if err != nil { klog.Errorf("DisaggregatedComputeGroupsController recordComputeGroupIds backend tag stirng to map failed, tag: %s, err: %s", backend.Tag, err.Error()) return err } if _, ok := tags[mysql.COMPUTE_GROUP_ID]; !ok { - errMsg := fmt.Sprintf("DisaggregatedComputeGroupsController recordComputeGroupIds backend tag get compute_group_name failed, tag: %s, err: no compute_group_id field found ", backend.Tag) - klog.Errorf(errMsg) - return errors.New(errMsg) + return fmt.Errorf("DisaggregatedComputeGroupsController recordComputeGroupIds backend tag get compute_group_name failed, tag: %s, err: no compute_group_id field found ", backend.Tag) } podName := strings.Split(backend.Host, ".")[0] - re, _ := regexp.Compile("(.*)-[0-9]+$") + re,_ := regexp.Compile("(.*)-[0-9]+$") matchs := re.FindStringSubmatch(podName) stsName := matchs[len(matchs)-1] m[stsName] = tags[mysql.COMPUTE_GROUP_ID] } - for i, cgs := range ddc.Status.ComputeGroupStatuses { + for i,cgs := range ddc.Status.ComputeGroupStatuses { ddc.Status.ComputeGroupStatuses[i].ComputeGroupId = m[cgs.StatefulsetName] } return nil } + func (dcgs *DisaggregatedComputeGroupsController) updateCGStatus(ddc *dv1.DorisDisaggregatedCluster, cgs *dv1.ComputeGroupStatus) error { stfName := cgs.StatefulsetName sts, err := k8s.GetStatefulSet(context.Background(), dcgs.K8sclient, ddc.Namespace, stfName) @@ -679,6 +680,7 @@ func (dcgs *DisaggregatedComputeGroupsController) updateCGStatus(ddc *dv1.DorisD return err } + updateRevision := sts.Status.UpdateRevision //check all pods controlled by new statefulset. allUpdated := dcgs.DisaggregatedSubDefaultController.StatefulsetControlledPodsAllUseNewUpdateRevision(updateRevision, podList.Items) From 39222deab0973a23f8a27dbdbb112b95423f95f7 Mon Sep 17 00:00:00 2001 From: ztonny Date: Thu, 18 Sep 2025 17:18:15 +0800 Subject: [PATCH 5/6] Revert "[Bug] fix issue #439" This reverts commit 1a49211b44e6523eb4847c8ca060b73179279459. --- pkg/common/utils/mysql/mysql.go | 4 +--- pkg/common/utils/resource/configmap_test.go | 11 ++++------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/pkg/common/utils/mysql/mysql.go b/pkg/common/utils/mysql/mysql.go index eba693da..bd31d22d 100644 --- a/pkg/common/utils/mysql/mysql.go +++ b/pkg/common/utils/mysql/mysql.go @@ -232,9 +232,7 @@ func (db *DB) GetBackendsByComputeGroupId(cgid string) ([]*Backend, error) { return nil, err } if _, ok := m[COMPUTE_GROUP_ID]; !ok { - errMsg := fmt.Sprintf("GetBackendsByComputeGroupId backends tag get compute_group_name failed, tag: %s, err: no compute_group_id field found", be.Tag) - klog.Errorf(errMsg) - return nil, errors.New(errMsg) + return nil, fmt.Errorf("GetBackendsByComputeGroupId backends tag get compute_group_name failed, tag: %s, err: no compute_group_id field found", be.Tag) } computegroupId := fmt.Sprintf("%s", m[COMPUTE_GROUP_ID]) diff --git a/pkg/common/utils/resource/configmap_test.go b/pkg/common/utils/resource/configmap_test.go index f477ce0c..dea2f130 100644 --- a/pkg/common/utils/resource/configmap_test.go +++ b/pkg/common/utils/resource/configmap_test.go @@ -18,12 +18,11 @@ package resource import ( + dorisv1 "github.com/apache/doris-operator/api/doris/v1" + corev1 "k8s.io/api/core/v1" "reflect" "strconv" "testing" - - dorisv1 "github.com/apache/doris-operator/api/doris/v1" - corev1 "k8s.io/api/core/v1" ) func Test_GetStartMode(t *testing.T) { @@ -110,10 +109,8 @@ func Test_ResolveConfigMpas(t *testing.T) { } m, err := ResolveConfigMaps(tests, dorisv1.Component_FE) - if err != nil { - t.Errorf("resolve configmaps faild, len=%d, err=%s", len(m), err.Error()) - } else if len(m) == 0 { - t.Errorf("resolve configmaps faild, len=%d", len(m)) + if err != nil || len(m) == 0 { + t.Errorf("resolve configmaps faild, len=%d, err=%#v", len(m), err) } } From e4951201917f2e6c862b94ba25ca05b6d7b60f0c Mon Sep 17 00:00:00 2001 From: ztonny Date: Thu, 18 Sep 2025 17:35:09 +0800 Subject: [PATCH 6/6] [Bug] fix issue #439 use klog to print log message and drop %#v for err; --- pkg/common/utils/mysql/mysql.go | 4 +++- pkg/common/utils/resource/configmap_test.go | 11 +++++++---- .../disaggregated_cluster/computegroups/controller.go | 4 +++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/pkg/common/utils/mysql/mysql.go b/pkg/common/utils/mysql/mysql.go index bd31d22d..eba693da 100644 --- a/pkg/common/utils/mysql/mysql.go +++ b/pkg/common/utils/mysql/mysql.go @@ -232,7 +232,9 @@ func (db *DB) GetBackendsByComputeGroupId(cgid string) ([]*Backend, error) { return nil, err } if _, ok := m[COMPUTE_GROUP_ID]; !ok { - return nil, fmt.Errorf("GetBackendsByComputeGroupId backends tag get compute_group_name failed, tag: %s, err: no compute_group_id field found", be.Tag) + errMsg := fmt.Sprintf("GetBackendsByComputeGroupId backends tag get compute_group_name failed, tag: %s, err: no compute_group_id field found", be.Tag) + klog.Errorf(errMsg) + return nil, errors.New(errMsg) } computegroupId := fmt.Sprintf("%s", m[COMPUTE_GROUP_ID]) diff --git a/pkg/common/utils/resource/configmap_test.go b/pkg/common/utils/resource/configmap_test.go index dea2f130..f477ce0c 100644 --- a/pkg/common/utils/resource/configmap_test.go +++ b/pkg/common/utils/resource/configmap_test.go @@ -18,11 +18,12 @@ package resource import ( - dorisv1 "github.com/apache/doris-operator/api/doris/v1" - corev1 "k8s.io/api/core/v1" "reflect" "strconv" "testing" + + dorisv1 "github.com/apache/doris-operator/api/doris/v1" + corev1 "k8s.io/api/core/v1" ) func Test_GetStartMode(t *testing.T) { @@ -109,8 +110,10 @@ func Test_ResolveConfigMpas(t *testing.T) { } m, err := ResolveConfigMaps(tests, dorisv1.Component_FE) - if err != nil || len(m) == 0 { - t.Errorf("resolve configmaps faild, len=%d, err=%#v", len(m), err) + if err != nil { + t.Errorf("resolve configmaps faild, len=%d, err=%s", len(m), err.Error()) + } else if len(m) == 0 { + t.Errorf("resolve configmaps faild, len=%d", len(m)) } } diff --git a/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go b/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go index 300e60ff..bd221965 100644 --- a/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go +++ b/pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go @@ -639,7 +639,9 @@ func(dcgs *DisaggregatedComputeGroupsController) recordComputeGroupIds(ddc *dv1. return err } if _, ok := tags[mysql.COMPUTE_GROUP_ID]; !ok { - return fmt.Errorf("DisaggregatedComputeGroupsController recordComputeGroupIds backend tag get compute_group_name failed, tag: %s, err: no compute_group_id field found ", backend.Tag) + errMsg := fmt.Sprintf("DisaggregatedComputeGroupsController recordComputeGroupIds backend tag get compute_group_name failed, tag: %s, err: no compute_group_id field found ", backend.Tag) + klog.Errorf(errMsg) + return errors.New(errMsg) } podName := strings.Split(backend.Host, ".")[0]