Skip to content

Commit e5e39b4

Browse files
committed
Fixed all-member-ready check
1 parent 6e9de81 commit e5e39b4

File tree

3 files changed

+35
-12
lines changed

3 files changed

+35
-12
lines changed

pkg/apis/deployment/v1alpha/deployment_status_members.go

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323
package v1alpha
2424

2525
import (
26-
"fmt"
27-
2826
"github.com/pkg/errors"
2927
)
3028

@@ -214,16 +212,24 @@ func (ds *DeploymentStatusMembers) RemoveByID(id string, group ServerGroup) erro
214212
}
215213

216214
// AllMembersReady returns true when all members are in the Ready state.
217-
func (ds DeploymentStatusMembers) AllMembersReady() bool {
218-
if err := ds.ForeachServerGroup(func(group ServerGroup, list MemberStatusList) error {
219-
for _, x := range list {
220-
if !x.Conditions.IsTrue(ConditionTypeReady) {
221-
return fmt.Errorf("not ready")
222-
}
215+
func (ds DeploymentStatusMembers) AllMembersReady(mode DeploymentMode, syncEnabled bool) bool {
216+
syncReady := func() bool {
217+
if syncEnabled {
218+
return ds.SyncMasters.AllMembersReady() && ds.SyncWorkers.AllMembersReady()
223219
}
224-
return nil
225-
}); err != nil {
220+
return true
221+
}
222+
switch mode {
223+
case DeploymentModeSingle:
224+
return ds.Single.MembersReady() > 0
225+
case DeploymentModeActiveFailover:
226+
return ds.Agents.AllMembersReady() && ds.Single.MembersReady() > 0
227+
case DeploymentModeCluster:
228+
return ds.Agents.AllMembersReady() &&
229+
ds.DBServers.AllMembersReady() &&
230+
ds.Coordinators.AllMembersReady() &&
231+
syncReady()
232+
default:
226233
return false
227234
}
228-
return true
229235
}

pkg/apis/deployment/v1alpha/member_status_list.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,19 @@ func (l MemberStatusList) SelectMemberToRemove() (MemberStatus, error) {
134134
}
135135
return MemberStatus{}, maskAny(errors.Wrap(NotFoundError, "No member available for removal"))
136136
}
137+
138+
// MembersReady returns the number of members that are in the Ready state.
139+
func (l MemberStatusList) MembersReady() int {
140+
readyCount := 0
141+
for _, x := range l {
142+
if x.Conditions.IsTrue(ConditionTypeReady) {
143+
readyCount++
144+
}
145+
}
146+
return readyCount
147+
}
148+
149+
// AllMembersReady returns the true if all members are in the Ready state.
150+
func (l MemberStatusList) AllMembersReady() bool {
151+
return len(l) == l.MembersReady()
152+
}

pkg/deployment/resources/pod_inspector.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,8 @@ func (r *Resources) InspectPods(ctx context.Context) error {
217217
})
218218

219219
// Update overall conditions
220-
allMembersReady := status.Members.AllMembersReady()
220+
spec := r.context.GetSpec()
221+
allMembersReady := status.Members.AllMembersReady(spec.GetMode(), spec.Sync.IsEnabled())
221222
status.Conditions.Update(api.ConditionTypeReady, allMembersReady, "", "")
222223

223224
// Update conditions

0 commit comments

Comments
 (0)