|
1 | 1 | /*
|
2 | 2 | Copyright 2019 The Kruise Authors.
|
3 |
| -Copyright 2016 The Kubernetes Authors. |
4 | 3 |
|
5 | 4 | Licensed under the Apache License, Version 2.0 (the "License");
|
6 | 5 | you may not use this file except in compliance with the License.
|
@@ -34,6 +33,7 @@ import (
|
34 | 33 | "k8s.io/apimachinery/pkg/labels"
|
35 | 34 | "k8s.io/apimachinery/pkg/runtime"
|
36 | 35 | "k8s.io/apimachinery/pkg/types"
|
| 36 | + "k8s.io/apimachinery/pkg/util/intstr" |
37 | 37 | "k8s.io/client-go/kubernetes/fake"
|
38 | 38 | corelisters "k8s.io/client-go/listers/core/v1"
|
39 | 39 | storagelisters "k8s.io/client-go/listers/storage/v1"
|
@@ -1045,7 +1045,10 @@ func TestUpdatePodClaimForRetentionPolicy(t *testing.T) {
|
1045 | 1045 | WhenDeleted: appsv1beta1.DeletePersistentVolumeClaimRetentionPolicyType,
|
1046 | 1046 | WhenScaled: appsv1beta1.RetainPersistentVolumeClaimRetentionPolicyType,
|
1047 | 1047 | }
|
1048 |
| - set.Spec.ReserveOrdinals = []int{2, 4} |
| 1048 | + set.Spec.ReserveOrdinals = []intstr.IntOrString{ |
| 1049 | + intstr.FromInt32(2), |
| 1050 | + intstr.FromInt32(4), |
| 1051 | + } |
1049 | 1052 | return set
|
1050 | 1053 | },
|
1051 | 1054 | getPods: func(set *appsv1beta1.StatefulSet) []*v1.Pod {
|
@@ -1083,7 +1086,10 @@ func TestUpdatePodClaimForRetentionPolicy(t *testing.T) {
|
1083 | 1086 | WhenDeleted: appsv1beta1.DeletePersistentVolumeClaimRetentionPolicyType,
|
1084 | 1087 | WhenScaled: appsv1beta1.DeletePersistentVolumeClaimRetentionPolicyType,
|
1085 | 1088 | }
|
1086 |
| - set.Spec.ReserveOrdinals = []int{2, 4} |
| 1089 | + set.Spec.ReserveOrdinals = []intstr.IntOrString{ |
| 1090 | + intstr.FromInt32(2), |
| 1091 | + intstr.FromInt32(4), |
| 1092 | + } |
1087 | 1093 | return set
|
1088 | 1094 | },
|
1089 | 1095 | getPods: func(set *appsv1beta1.StatefulSet) []*v1.Pod {
|
@@ -1121,7 +1127,10 @@ func TestUpdatePodClaimForRetentionPolicy(t *testing.T) {
|
1121 | 1127 | WhenDeleted: appsv1beta1.DeletePersistentVolumeClaimRetentionPolicyType,
|
1122 | 1128 | WhenScaled: appsv1beta1.DeletePersistentVolumeClaimRetentionPolicyType,
|
1123 | 1129 | }
|
1124 |
| - set.Spec.ReserveOrdinals = []int{2, 4} |
| 1130 | + set.Spec.ReserveOrdinals = []intstr.IntOrString{ |
| 1131 | + intstr.FromInt32(2), |
| 1132 | + intstr.FromInt32(4), |
| 1133 | + } |
1125 | 1134 | return set
|
1126 | 1135 | },
|
1127 | 1136 | getPods: func(set *appsv1beta1.StatefulSet) []*v1.Pod {
|
@@ -1170,7 +1179,10 @@ func TestUpdatePodClaimForRetentionPolicy(t *testing.T) {
|
1170 | 1179 | WhenDeleted: appsv1beta1.DeletePersistentVolumeClaimRetentionPolicyType,
|
1171 | 1180 | WhenScaled: appsv1beta1.RetainPersistentVolumeClaimRetentionPolicyType,
|
1172 | 1181 | }
|
1173 |
| - set.Spec.ReserveOrdinals = []int{2, 4} |
| 1182 | + set.Spec.ReserveOrdinals = []intstr.IntOrString{ |
| 1183 | + intstr.FromInt32(2), |
| 1184 | + intstr.FromInt32(4), |
| 1185 | + } |
1174 | 1186 | return set
|
1175 | 1187 | },
|
1176 | 1188 | getPods: func(set *appsv1beta1.StatefulSet) []*v1.Pod {
|
@@ -1211,6 +1223,58 @@ func TestUpdatePodClaimForRetentionPolicy(t *testing.T) {
|
1211 | 1223 | }
|
1212 | 1224 | },
|
1213 | 1225 | },
|
| 1226 | + { |
| 1227 | + name: "reserveOrdinals is [1,3-5], scaleDown=true, whenScaled=Retain, whenDeleted=Delete", |
| 1228 | + getStatefulSet: func() *appsv1beta1.StatefulSet { |
| 1229 | + set := newStatefulSet(3) |
| 1230 | + set.Spec.PersistentVolumeClaimRetentionPolicy = &appsv1beta1.StatefulSetPersistentVolumeClaimRetentionPolicy{ |
| 1231 | + WhenDeleted: appsv1beta1.DeletePersistentVolumeClaimRetentionPolicyType, |
| 1232 | + WhenScaled: appsv1beta1.RetainPersistentVolumeClaimRetentionPolicyType, |
| 1233 | + } |
| 1234 | + set.Spec.ReserveOrdinals = []intstr.IntOrString{ |
| 1235 | + intstr.FromInt32(1), |
| 1236 | + intstr.FromString("3-5"), |
| 1237 | + } |
| 1238 | + return set |
| 1239 | + }, |
| 1240 | + getPods: func(set *appsv1beta1.StatefulSet) []*v1.Pod { |
| 1241 | + setClone := set.DeepCopy() |
| 1242 | + setClone.Spec.Replicas = utilpointer.Int32(5) |
| 1243 | + startOrdinal, endOrdinal, reserveOrdinals := getStatefulSetReplicasRange(setClone) |
| 1244 | + pods := make([]*v1.Pod, 0) |
| 1245 | + expectIndex := []int{0, 2, 6, 7, 8} |
| 1246 | + currentIndex := make([]int, 0) |
| 1247 | + for i := startOrdinal; i < endOrdinal; i++ { |
| 1248 | + if reserveOrdinals.Has(i) { |
| 1249 | + continue |
| 1250 | + } |
| 1251 | + currentIndex = append(currentIndex, i) |
| 1252 | + pods = append(pods, newStatefulSetPod(set, i)) |
| 1253 | + } |
| 1254 | + if !reflect.DeepEqual(expectIndex, currentIndex) { |
| 1255 | + t.Fatalf("expect(%v), but get(%v)", expectIndex, currentIndex) |
| 1256 | + } |
| 1257 | + return pods |
| 1258 | + }, |
| 1259 | + expectPvcOwnerRef: func(pvcName string) metav1.OwnerReference { |
| 1260 | + sIndex1 := strings.Index(pvcName, "-") + 1 |
| 1261 | + podName := pvcName[sIndex1:] |
| 1262 | + sIndex2 := strings.LastIndex(pvcName, "-") + 1 |
| 1263 | + index, _ := strconv.Atoi(pvcName[sIndex2:]) |
| 1264 | + if index < 9 { |
| 1265 | + return metav1.OwnerReference{ |
| 1266 | + APIVersion: "apps.kruise.io/v1beta1", |
| 1267 | + Kind: "StatefulSet", |
| 1268 | + Name: "foo", |
| 1269 | + } |
| 1270 | + } |
| 1271 | + return metav1.OwnerReference{ |
| 1272 | + APIVersion: "v1", |
| 1273 | + Kind: "Pod", |
| 1274 | + Name: podName, |
| 1275 | + } |
| 1276 | + }, |
| 1277 | + }, |
1214 | 1278 | }
|
1215 | 1279 |
|
1216 | 1280 | for _, cs := range cases {
|
|
0 commit comments