in pkg/controller/sub_controller/disaggregated_cluster/disaggregated_fe/controller.go [189:235]
func (dfc *DisaggregatedFEController) UpdateComponentStatus(obj client.Object) error {
var masterAliveReplicas int32
var availableReplicas int32
var creatingReplicas int32
var failedReplicas int32
ddc := obj.(*v1.DorisDisaggregatedCluster)
stfName := ddc.GetFEStatefulsetName()
// FEStatus
feSpec := ddc.Spec.FeSpec
electionNumber := ddc.GetElectionNumber()
selector := dfc.newFEPodsSelector(ddc.Name)
var podList corev1.PodList
if err := dfc.K8sclient.List(context.Background(), &podList, client.InNamespace(ddc.Namespace), client.MatchingLabels(selector)); err != nil {
return err
}
for _, pod := range podList.Items {
if ready := k8s.PodIsReady(&pod.Status); ready {
if dfc.podIsFollower(pod.Name, stfName, int(electionNumber)) {
masterAliveReplicas++
}
availableReplicas++
} else if pod.Status.Phase == corev1.PodRunning || pod.Status.Phase == corev1.PodPending {
creatingReplicas++
} else {
failedReplicas++
}
}
// at least one fe PodIsReady FEStatus.AvailableStatu is Available,
// ClusterHealth.FeAvailable is true,
// for ClusterHealth.Health is yellow
if masterAliveReplicas > 0 {
ddc.Status.FEStatus.AvailableStatus = v1.Available
ddc.Status.ClusterHealth.FeAvailable = true
}
// all fe pods are Ready, FEStatus.Phase is Ready,
// for ClusterHealth.Health is green
if masterAliveReplicas == electionNumber && availableReplicas == *(feSpec.Replicas) {
ddc.Status.FEStatus.Phase = v1.Ready
}
return nil
}