Skip to content

Commit 07531f6

Browse files
committed
fix(blue-green update): fix set sts replicas less than 0
Signed-off-by: Rory Z <[email protected]>
1 parent c6fb488 commit 07531f6

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

controllers/apps/v2beta1/sync_pods.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,11 +206,21 @@ func (s *syncPods) canBeScaleDownSts(
206206
}
207207
}
208208

209+
if oldSts.Status.Replicas == 0 {
210+
return false, nil
211+
}
212+
209213
shouldDeletePod = &corev1.Pod{}
210-
_ = s.Client.Get(ctx, types.NamespacedName{
214+
err = s.Client.Get(ctx, types.NamespacedName{
211215
Namespace: instance.Namespace,
212216
Name: fmt.Sprintf("%s-%d", oldSts.Name, *oldSts.Spec.Replicas-1),
213217
}, shouldDeletePod)
218+
if err != nil {
219+
if k8sErrors.IsNotFound(err) {
220+
return false, nil
221+
}
222+
return false, emperror.Wrap(err, "failed to get should delete pod")
223+
}
214224

215225
if shouldDeletePod.DeletionTimestamp != nil {
216226
return false, nil

controllers/apps/v2beta1/sync_pods_suite_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ var _ = Describe("Check sync pods controller", Ordered, Label("node"), func() {
2828
var updateSts, currentSts *appsv1.StatefulSet
2929
var updateRs, currentRs *appsv1.ReplicaSet
3030
var currentRsPod *corev1.Pod
31+
var currentStsPod *corev1.Pod
3132

3233
BeforeEach(func() {
3334
fakeR.ReqFunc = func(method string, url url.URL, body []byte, header http.Header) (resp *http.Response, respBody []byte, err error) {
@@ -204,6 +205,25 @@ var _ = Describe("Check sync pods controller", Ordered, Label("node"), func() {
204205
Spec: currentRs.Spec.Template.Spec,
205206
}
206207
Expect(k8sClient.Create(ctx, currentRsPod)).Should(Succeed())
208+
209+
currentStsPod = &corev1.Pod{
210+
ObjectMeta: metav1.ObjectMeta{
211+
Name: currentSts.Name + "-0",
212+
Namespace: currentSts.Namespace,
213+
Labels: currentSts.Spec.Template.Labels,
214+
OwnerReferences: []metav1.OwnerReference{
215+
{
216+
APIVersion: "apps/v1",
217+
Kind: "StatefulSet",
218+
Name: currentSts.Name,
219+
UID: currentSts.UID,
220+
Controller: ptr.To(true),
221+
},
222+
},
223+
},
224+
Spec: currentSts.Spec.Template.Spec,
225+
}
226+
Expect(k8sClient.Create(ctx, currentStsPod)).Should(Succeed())
207227
})
208228

209229
AfterEach(func() {
@@ -310,8 +330,45 @@ var _ = Describe("check can be scale down", func() {
310330
Spec: appsv1.StatefulSetSpec{
311331
ServiceName: instance.Name + "-fake",
312332
Replicas: ptr.To(int32(1)),
333+
Selector: &metav1.LabelSelector{
334+
MatchLabels: appsv2beta1.DefaultCoreLabels(instance),
335+
},
336+
Template: corev1.PodTemplateSpec{
337+
ObjectMeta: metav1.ObjectMeta{
338+
Labels: appsv2beta1.DefaultCoreLabels(instance),
339+
},
340+
Spec: corev1.PodSpec{
341+
Containers: []corev1.Container{
342+
{Name: "emqx", Image: "emqx"},
343+
},
344+
},
345+
},
346+
},
347+
}
348+
Expect(k8sClient.Create(ctx, oldSts)).Should(Succeed())
349+
Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(oldSts), oldSts)).Should(Succeed())
350+
oldSts.Status.Replicas = 1
351+
oldSts.Status.ReadyReplicas = 1
352+
Expect(k8sClient.Status().Update(ctx, oldSts)).Should(Succeed())
353+
354+
oldStsPod := &corev1.Pod{
355+
ObjectMeta: metav1.ObjectMeta{
356+
Name: oldSts.Name + "-0",
357+
Namespace: oldSts.Namespace,
358+
Labels: oldSts.Spec.Template.Labels,
359+
OwnerReferences: []metav1.OwnerReference{
360+
{
361+
APIVersion: "apps/v1",
362+
Kind: "StatefulSet",
363+
Name: oldSts.Name,
364+
UID: oldSts.UID,
365+
Controller: ptr.To(true),
366+
},
367+
},
313368
},
369+
Spec: oldSts.Spec.Template.Spec,
314370
}
371+
Expect(k8sClient.Create(ctx, oldStsPod)).Should(Succeed())
315372

316373
})
317374
It("emqx is not available", func() {

0 commit comments

Comments
 (0)