Skip to content

Commit 6a27eae

Browse files
committed
feature: support Progressing condition in roleset controller
Signed-off-by: googs1025 <[email protected]>
1 parent 418ffc3 commit 6a27eae

File tree

2 files changed

+61
-3
lines changed

2 files changed

+61
-3
lines changed

api/orchestration/v1alpha1/roleset_types.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,19 @@ const (
105105
RoleSetProgressing ConditionType = "Progressing"
106106
)
107107

108+
const (
109+
// Ready
110+
RoleSetReasonRolesReady = "RolesReady"
111+
RoleSetReasonRolesNotReady = "RolesNotReady"
112+
113+
// Progressing
114+
RoleSetReasonRolesProgressing = "RolesProgressing"
115+
RoleSetReasonProgressingComplete = "ProgressingCompleted"
116+
117+
// ReplicaFailure
118+
RoleSetReasonReconcileError = "ReconcileError"
119+
)
120+
108121
type RoleStatus struct {
109122
Name string `json:"name,omitempty"`
110123

pkg/controller/roleset/sync.go

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ func (r *RoleSetReconciler) calculateStatus(ctx context.Context, rs *orchestrati
9595
newStatus := rs.Status.DeepCopy()
9696
newStatus.Roles = nil
9797
var notReadyRoles []string
98+
var progressingRoles []string
99+
isProgressing := false
98100
for _, role := range rs.Spec.Roles {
99101
if roleStatus, err := r.calculateStatusForRole(ctx, rs, &role); err != nil {
100102
// TODO: add into condition
@@ -105,20 +107,63 @@ func (r *RoleSetReconciler) calculateStatus(ctx context.Context, rs *orchestrati
105107
if roleStatus.ReadyReplicas < *role.Replicas {
106108
notReadyRoles = append(notReadyRoles, role.Name)
107109
}
110+
if roleStatus.ReadyReplicas < *role.Replicas ||
111+
roleStatus.UpdatedReadyReplicas < roleStatus.UpdatedReplicas ||
112+
(roleStatus.UpdatedReplicas > 0 && roleStatus.UpdatedReadyReplicas < roleStatus.UpdatedReplicas) {
113+
progressingRoles = append(progressingRoles, role.Name)
114+
isProgressing = true
115+
}
108116
}
109117
}
110118

111119
if len(notReadyRoles) > 0 {
112-
notReadyCondition := utils.NewCondition(orchestrationv1alpha1.RoleSetReady, v1.ConditionFalse, "roleset is not ready", fmt.Sprintf("role %s is not ready", strings.Join(notReadyRoles, ",")))
120+
notReadyCondition := utils.NewCondition(
121+
orchestrationv1alpha1.RoleSetReady,
122+
v1.ConditionFalse,
123+
orchestrationv1alpha1.RoleSetReasonRolesNotReady,
124+
fmt.Sprintf("Roles %s is not ready", strings.Join(notReadyRoles, ",")),
125+
)
113126
SetRoleSetCondition(newStatus, *notReadyCondition)
114127
} else {
115-
readyCondition := utils.NewCondition(orchestrationv1alpha1.RoleSetReady, v1.ConditionTrue, "roleset is ready", "")
128+
readyCondition := utils.NewCondition(
129+
orchestrationv1alpha1.RoleSetReady,
130+
v1.ConditionTrue,
131+
orchestrationv1alpha1.RoleSetReasonRolesReady,
132+
"All roles are ready",
133+
)
116134
SetRoleSetCondition(newStatus, *readyCondition)
117135
}
118136

137+
if isProgressing {
138+
cond := utils.NewCondition(
139+
orchestrationv1alpha1.RoleSetProgressing,
140+
v1.ConditionTrue,
141+
orchestrationv1alpha1.RoleSetReasonRolesProgressing,
142+
fmt.Sprintf("Roles %s are progressing", strings.Join(progressingRoles, ", ")),
143+
)
144+
SetRoleSetCondition(newStatus, *cond)
145+
} else {
146+
// If all roles are ready, set the Progressing condition to complete.
147+
currentProgressingCond := utils.GetCondition(rs.Status.Conditions, orchestrationv1alpha1.RoleSetProgressing)
148+
if currentProgressingCond != nil {
149+
cond := utils.NewCondition(
150+
orchestrationv1alpha1.RoleSetProgressing,
151+
v1.ConditionFalse,
152+
orchestrationv1alpha1.RoleSetReasonProgressingComplete,
153+
"All roles have completed progressing",
154+
)
155+
SetRoleSetCondition(newStatus, *cond)
156+
}
157+
}
158+
119159
failureCond := utils.GetCondition(rs.Status.Conditions, orchestrationv1alpha1.RoleSetReplicaFailure)
120160
if len(managedErrors) != 0 && failureCond == nil {
121-
cond := utils.NewCondition(orchestrationv1alpha1.RoleSetReplicaFailure, v1.ConditionTrue, "reconcile roleset error", fmt.Sprintf("%+v", managedErrors))
161+
cond := utils.NewCondition(
162+
orchestrationv1alpha1.RoleSetReplicaFailure,
163+
v1.ConditionTrue,
164+
orchestrationv1alpha1.RoleSetReasonReconcileError,
165+
fmt.Sprintf("%+v", managedErrors),
166+
)
122167
SetRoleSetCondition(newStatus, *cond)
123168
} else if len(managedErrors) == 0 && failureCond != nil {
124169
RemoveRoleSetCondition(newStatus, orchestrationv1alpha1.RoleSetReplicaFailure)

0 commit comments

Comments
 (0)