pkg/controller/controllers_utils.go (80 lines of code) (raw):

// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package controller import ( dv1 "github.com/apache/doris-operator/api/disaggregated/v1" "github.com/apache/doris-operator/api/doris/v1" "reflect" "sort" ) func disAggregatedInconsistentStatus(ests *dv1.DorisDisaggregatedClusterStatus, ddc *dv1.DorisDisaggregatedCluster) bool { return reflect.DeepEqual(ests, &ddc.Status) } func inconsistentStatus(status *v1.DorisClusterStatus, dcr *v1.DorisCluster) bool { return inconsistentFEStatus(status.FEStatus, dcr.Status.FEStatus) || inconsistentBEStatus(status.BEStatus, dcr.Status.BEStatus) || inconsistentCnStatus(status.CnStatus, dcr.Status.CnStatus) || inconsistentBrokerStatus(status.BrokerStatus, dcr.Status.BrokerStatus) } func inconsistentCnStatus(eStatus *v1.CnStatus, nStatus *v1.CnStatus) bool { if eStatus == nil && nStatus == nil { return false } eComponentStatus := v1.ComponentStatus{} nComponentStatus := v1.ComponentStatus{} var eHorizontalScaler, nHorizontalScaler *v1.HorizontalScaler if eStatus != nil { eComponentStatus = eStatus.ComponentStatus eHorizontalScaler = eStatus.HorizontalScaler } if nStatus != nil { nComponentStatus = nStatus.ComponentStatus nHorizontalScaler = nStatus.HorizontalScaler } return inconsistentComponentStatus(&eComponentStatus, &nComponentStatus) || inconsistentHorizontalStatus(eHorizontalScaler, nHorizontalScaler) } func inconsistentFEStatus(eFeStatus *v1.ComponentStatus, nFeStatus *v1.ComponentStatus) bool { return inconsistentComponentStatus(eFeStatus, nFeStatus) } func inconsistentBEStatus(eBeStatus *v1.ComponentStatus, nBeStatus *v1.ComponentStatus) bool { return inconsistentComponentStatus(eBeStatus, nBeStatus) } func inconsistentBrokerStatus(eBkStatus *v1.ComponentStatus, nBkStatus *v1.ComponentStatus) bool { return inconsistentComponentStatus(eBkStatus, nBkStatus) } func inconsistentComponentStatus(eStatus *v1.ComponentStatus, nStatus *v1.ComponentStatus) bool { if eStatus == nil && nStatus == nil { return false } //&{AccessService:doriscluster-sample-fe-service FailedMembers:[] CreatingMembers:[doriscluster-sample-fe-0 doriscluster-sample-fe-1] RunningMembers:[] ComponentCondition:{SubResourceName:doriscluster-sample-fe Phase:initializing LastTransitionTime:2024-06-17 15:06:27.277201 +0800 CST m=+9.790029793 Reason: Message:}}, //&{AccessService:doriscluster-sample-fe-service FailedMembers:[] CreatingMembers:[doriscluster-sample-fe-0 doriscluster-sample-fe-1] RunningMembers:[] ComponentCondition:{SubResourceName:doriscluster-sample-fe Phase:initializing LastTransitionTime:2024-06-17 15:06:27 T Reason: Message:}} // check resource status, if status not equal return true. if (eStatus == nil || nStatus == nil) || eStatus.ComponentCondition != nStatus.ComponentCondition || eStatus.AccessService != nStatus.AccessService { return true } //check control pods equal or not, if not return true. if !equalSplice(eStatus.CreatingMembers, nStatus.CreatingMembers) || !equalSplice(eStatus.RunningMembers, nStatus.RunningMembers) || !equalSplice(eStatus.FailedMembers, nStatus.FailedMembers) { return true } return false } func inconsistentHorizontalStatus(eh *v1.HorizontalScaler, nh *v1.HorizontalScaler) bool { if eh != nil && nh != nil { return eh.Name != nh.Name || eh.Version != nh.Version } if eh == nil && nh == nil { return false } return true } func equalSplice(e []string, n []string) bool { if len(e) != len(n) { return false } sort.Strings(e) sort.Strings(n) for i, _ := range e { if e[i] != n[i] { return false } } return true }