Skip to content

Commit 7a4e3c1

Browse files
authored
[bugfix] fix StatefulsetReady check (#705)
* fix sts ready parameter * update status * update fmt * update fix * update fix
1 parent 02e43b0 commit 7a4e3c1

File tree

3 files changed

+78
-1
lines changed

3 files changed

+78
-1
lines changed

pkg/utils/statefulset/statefulset_utils.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,6 @@ func GetParentNameAndOrdinal(name string) (string, int) {
4646

4747
// StatefulsetReady checks whether a sts is ready.
4848
func StatefulsetReady(sts appsv1.StatefulSet) bool {
49-
return *sts.Spec.Replicas == sts.Status.Replicas &&
49+
return *sts.Spec.Replicas == sts.Status.AvailableReplicas &&
5050
sts.Status.CurrentRevision == sts.Status.UpdateRevision
5151
}

pkg/utils/statefulset/statefulset_utils_test.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"testing"
2121

2222
"github.com/google/go-cmp/cmp"
23+
appsv1 "k8s.io/api/apps/v1"
2324
)
2425

2526
func TestGetParentNameAndOrdinal(t *testing.T) {
@@ -76,3 +77,77 @@ func TestGetParentNameAndOrdinal(t *testing.T) {
7677
})
7778
}
7879
}
80+
81+
func TestStatefulsetReady(t *testing.T) {
82+
replicas := int32(3)
83+
tests := []struct {
84+
name string
85+
sts appsv1.StatefulSet
86+
wantBool bool
87+
}{
88+
{
89+
name: "statefulset is ready when AvailableReplicas equals Spec.Replicas and revisions match",
90+
sts: appsv1.StatefulSet{
91+
Spec: appsv1.StatefulSetSpec{
92+
Replicas: &replicas,
93+
},
94+
Status: appsv1.StatefulSetStatus{
95+
AvailableReplicas: 3,
96+
CurrentRevision: "rev-1",
97+
UpdateRevision: "rev-1",
98+
},
99+
},
100+
wantBool: true,
101+
},
102+
{
103+
name: "statefulset is not ready when AvailableReplicas less than Spec.Replicas",
104+
sts: appsv1.StatefulSet{
105+
Spec: appsv1.StatefulSetSpec{
106+
Replicas: &replicas,
107+
},
108+
Status: appsv1.StatefulSetStatus{
109+
AvailableReplicas: 2,
110+
CurrentRevision: "rev-1",
111+
UpdateRevision: "rev-1",
112+
},
113+
},
114+
wantBool: false,
115+
},
116+
{
117+
name: "statefulset is not ready when CurrentRevision != UpdateRevision",
118+
sts: appsv1.StatefulSet{
119+
Spec: appsv1.StatefulSetSpec{
120+
Replicas: &replicas,
121+
},
122+
Status: appsv1.StatefulSetStatus{
123+
AvailableReplicas: 3,
124+
CurrentRevision: "rev-1",
125+
UpdateRevision: "rev-2",
126+
},
127+
},
128+
wantBool: false,
129+
},
130+
{
131+
name: "statefulset is not ready when both conditions fail",
132+
sts: appsv1.StatefulSet{
133+
Spec: appsv1.StatefulSetSpec{
134+
Replicas: &replicas,
135+
},
136+
Status: appsv1.StatefulSetStatus{
137+
AvailableReplicas: 2,
138+
CurrentRevision: "rev-1",
139+
UpdateRevision: "rev-2",
140+
},
141+
},
142+
wantBool: false,
143+
},
144+
}
145+
for _, tc := range tests {
146+
t.Run(tc.name, func(t *testing.T) {
147+
got := StatefulsetReady(tc.sts)
148+
if diff := cmp.Diff(tc.wantBool, got); diff != "" {
149+
t.Errorf("unexpected StatefulsetReady result: %s", diff)
150+
}
151+
})
152+
}
153+
}

test/testutils/util.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,7 @@ func SetPodGroupToReady(ctx context.Context, k8sClient client.Client, statefulse
392392
}
393393

394394
sts.Status.ReadyReplicas = *sts.Spec.Replicas
395+
sts.Status.AvailableReplicas = *sts.Spec.Replicas
395396
sts.Status.Replicas = *sts.Spec.Replicas
396397
sts.Status.CurrentRevision = ""
397398
sts.Status.UpdateRevision = ""
@@ -703,6 +704,7 @@ func SetLeaderPodsToReady(ctx context.Context, k8sClient client.Client, lws *lea
703704
return err
704705
}
705706
sts.Status.ReadyReplicas = *sts.Spec.Replicas
707+
sts.Status.AvailableReplicas = *sts.Spec.Replicas
706708
sts.Status.Replicas = *sts.Spec.Replicas
707709
sts.Status.CurrentRevision = ""
708710
sts.Status.UpdateRevision = ""

0 commit comments

Comments
 (0)