in pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go [502:546]
func (dcgs *DisaggregatedComputeGroupsController) UpdateComponentStatus(obj client.Object) error {
ddc := obj.(*dv1.DorisDisaggregatedCluster)
cgss := ddc.Status.ComputeGroupStatuses
if len(cgss) == 0 {
klog.Errorf("disaggregatedComputeGroupsController updateComponentStatus compute group status is empty!")
return nil
}
errChan := make(chan error, len(cgss))
wg := sync.WaitGroup{}
wg.Add(len(cgss))
for i, _ := range cgss {
go func(idx int) {
defer wg.Done()
errChan <- dcgs.updateCGStatus(ddc, &cgss[idx])
}(i)
}
wg.Wait()
close(errChan)
errMs := ""
for err := range errChan {
if err != nil {
errMs += err.Error()
}
}
var fullAvailableCount int32
var availableCount int32
for _, cgs := range ddc.Status.ComputeGroupStatuses {
if cgs.Phase == dv1.Ready {
fullAvailableCount++
}
if cgs.AvailableReplicas > 0 {
availableCount++
}
}
ddc.Status.ClusterHealth.CGCount = int32(len(ddc.Status.ComputeGroupStatuses))
ddc.Status.ClusterHealth.CGFullAvailableCount = fullAvailableCount
ddc.Status.ClusterHealth.CGAvailableCount = availableCount
if errMs == "" {
return nil
}
return errors.New(errMs)
}