Skip to content

Commit c3e5b1d

Browse files
deprecated Immediately and Graciously PurgeMode
Signed-off-by: changzhen <[email protected]>
1 parent 5f4bd5e commit c3e5b1d

26 files changed

+167
-105
lines changed

api/openapi-spec/swagger.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19187,7 +19187,7 @@
1918719187
"format": "int32"
1918819188
},
1918919189
"purgeMode": {
19190-
"description": "PurgeMode represents how to deal with the legacy applications on the cluster from which the application is migrated. Valid options are \"Immediately\", \"Graciously\" and \"Never\". Defaults to \"Graciously\".",
19190+
"description": "PurgeMode represents how to deal with the legacy applications on the cluster from which the application is migrated. Valid options are \"Directly\", \"Gracefully\", \"Never\", \"Immediately\"(deprecated), and \"Graciously\"(deprecated). Defaults to \"Gracefully\".",
1919119191
"type": "string"
1919219192
},
1919319193
"statePreservation": {
@@ -21225,7 +21225,7 @@
2122521225
"default": ""
2122621226
},
2122721227
"purgeMode": {
21228-
"description": "PurgeMode represents how to deal with the legacy applications on the cluster from which the application is migrated. Valid options are \"Immediately\", \"Graciously\" and \"Never\".",
21228+
"description": "PurgeMode represents how to deal with the legacy applications on the cluster from which the application is migrated. Valid options are \"Immediately\", \"Directly\", \"Graciously\", \"Gracefully\" and \"Never\".",
2122921229
"type": "string"
2123021230
},
2123121231
"reason": {

charts/karmada/_crds/bases/policy/policy.karmada.io_clusterpropagationpolicies.yaml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,16 +153,19 @@ spec:
153153
format: int32
154154
type: integer
155155
purgeMode:
156-
default: Graciously
156+
default: Gracefully
157157
description: |-
158158
PurgeMode represents how to deal with the legacy applications on the
159159
cluster from which the application is migrated.
160-
Valid options are "Immediately", "Graciously" and "Never".
161-
Defaults to "Graciously".
160+
Valid options are "Directly", "Gracefully", "Never", "Immediately"(deprecated),
161+
and "Graciously"(deprecated).
162+
Defaults to "Gracefully".
162163
enum:
164+
- Directly
165+
- Gracefully
166+
- Never
163167
- Immediately
164168
- Graciously
165-
- Never
166169
type: string
167170
statePreservation:
168171
description: |-

charts/karmada/_crds/bases/policy/policy.karmada.io_propagationpolicies.yaml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,16 +150,19 @@ spec:
150150
format: int32
151151
type: integer
152152
purgeMode:
153-
default: Graciously
153+
default: Gracefully
154154
description: |-
155155
PurgeMode represents how to deal with the legacy applications on the
156156
cluster from which the application is migrated.
157-
Valid options are "Immediately", "Graciously" and "Never".
158-
Defaults to "Graciously".
157+
Valid options are "Directly", "Gracefully", "Never", "Immediately"(deprecated),
158+
and "Graciously"(deprecated).
159+
Defaults to "Gracefully".
159160
enum:
161+
- Directly
162+
- Gracefully
163+
- Never
160164
- Immediately
161165
- Graciously
162-
- Never
163166
type: string
164167
statePreservation:
165168
description: |-

charts/karmada/_crds/bases/work/work.karmada.io_clusterresourcebindings.yaml

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -315,16 +315,19 @@ spec:
315315
format: int32
316316
type: integer
317317
purgeMode:
318-
default: Graciously
318+
default: Gracefully
319319
description: |-
320320
PurgeMode represents how to deal with the legacy applications on the
321321
cluster from which the application is migrated.
322-
Valid options are "Immediately", "Graciously" and "Never".
323-
Defaults to "Graciously".
322+
Valid options are "Directly", "Gracefully", "Never", "Immediately"(deprecated),
323+
and "Graciously"(deprecated).
324+
Defaults to "Gracefully".
324325
enum:
326+
- Directly
327+
- Gracefully
328+
- Never
325329
- Immediately
326330
- Graciously
327-
- Never
328331
type: string
329332
statePreservation:
330333
description: |-
@@ -454,10 +457,12 @@ spec:
454457
description: |-
455458
PurgeMode represents how to deal with the legacy applications on the
456459
cluster from which the application is migrated.
457-
Valid options are "Immediately", "Graciously" and "Never".
460+
Valid options are "Immediately", "Directly", "Graciously", "Gracefully" and "Never".
458461
enum:
459462
- Immediately
463+
- Directly
460464
- Graciously
465+
- Gracefully
461466
- Never
462467
type: string
463468
reason:

charts/karmada/_crds/bases/work/work.karmada.io_resourcebindings.yaml

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -315,16 +315,19 @@ spec:
315315
format: int32
316316
type: integer
317317
purgeMode:
318-
default: Graciously
318+
default: Gracefully
319319
description: |-
320320
PurgeMode represents how to deal with the legacy applications on the
321321
cluster from which the application is migrated.
322-
Valid options are "Immediately", "Graciously" and "Never".
323-
Defaults to "Graciously".
322+
Valid options are "Directly", "Gracefully", "Never", "Immediately"(deprecated),
323+
and "Graciously"(deprecated).
324+
Defaults to "Gracefully".
324325
enum:
326+
- Directly
327+
- Gracefully
328+
- Never
325329
- Immediately
326330
- Graciously
327-
- Never
328331
type: string
329332
statePreservation:
330333
description: |-
@@ -454,10 +457,12 @@ spec:
454457
description: |-
455458
PurgeMode represents how to deal with the legacy applications on the
456459
cluster from which the application is migrated.
457-
Valid options are "Immediately", "Graciously" and "Never".
460+
Valid options are "Immediately", "Directly", "Graciously", "Gracefully" and "Never".
458461
enum:
459462
- Immediately
463+
- Directly
460464
- Graciously
465+
- Gracefully
461466
- Never
462467
type: string
463468
reason:

pkg/apis/policy/v1alpha1/propagation_types.go

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -289,14 +289,40 @@ const (
289289
// at the same time. During a failover, it is crucial to ensure that the old
290290
// application is removed before creating a new one to avoid duplicate
291291
// processing and maintaining state consistency.
292+
//
293+
// Deprecated: The term `Immediately` may be confusing when used alongside
294+
// `GracePeriodSeconds`, which specifies that resources are removed after
295+
// a grace period rather than at once.
296+
// `Immediately` is replaced by `Directly` for clarity. This term remains
297+
// functional in the current API version for backward compatibility and will
298+
// be removed when PropagationPolicy advances to alpha2 or beta.
292299
Immediately PurgeMode = "Immediately"
293300
// Graciously represents that Karmada will wait for the application to
294301
// come back to healthy on the new cluster or after a timeout is reached
295302
// before evicting the application.
303+
//
304+
// Deprecated: The term `Graciously` is replaced by `Gracefully` for correct
305+
// English usage. This term remains functional in the current API version for
306+
// backward compatibility and will be removed when PropagationPolicy advances
307+
// to alpha2 or beta.
296308
Graciously PurgeMode = "Graciously"
297309
// Never represents that Karmada will not evict the application and
298310
// users manually confirms how to clean up redundant copies.
299311
Never PurgeMode = "Never"
312+
313+
// PurgeModeDirectly represents that Karmada will directly evict the legacy
314+
// application. This is useful in scenarios where an application can not
315+
// tolerate two instances running simultaneously.
316+
// For example, the Flink application supports exactly-once state consistency,
317+
// which means it requires that no two instances of the application are running
318+
// at the same time. During a failover, it is crucial to ensure that the old
319+
// application is removed before creating a new one to avoid duplicate
320+
// processing and maintaining state consistency.
321+
PurgeModeDirectly PurgeMode = "Directly"
322+
// PurgeModeGracefully represents that Karmada will wait for the application to
323+
// come back to healthy on the new cluster or after a timeout is reached
324+
// before evicting the application.
325+
PurgeModeGracefully PurgeMode = "Gracefully"
300326
)
301327

302328
// FailoverBehavior indicates failover behaviors in case of an application or
@@ -326,10 +352,11 @@ type ApplicationFailoverBehavior struct {
326352

327353
// PurgeMode represents how to deal with the legacy applications on the
328354
// cluster from which the application is migrated.
329-
// Valid options are "Immediately", "Graciously" and "Never".
330-
// Defaults to "Graciously".
331-
// +kubebuilder:validation:Enum=Immediately;Graciously;Never
332-
// +kubebuilder:default=Graciously
355+
// Valid options are "Directly", "Gracefully", "Never", "Immediately"(deprecated),
356+
// and "Graciously"(deprecated).
357+
// Defaults to "Gracefully".
358+
// +kubebuilder:validation:Enum=Directly;Gracefully;Never;Immediately;Graciously
359+
// +kubebuilder:default=Gracefully
333360
// +optional
334361
PurgeMode PurgeMode `json:"purgeMode,omitempty"`
335362

pkg/apis/work/v1alpha2/binding_types.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,8 @@ type GracefulEvictionTask struct {
246246

247247
// PurgeMode represents how to deal with the legacy applications on the
248248
// cluster from which the application is migrated.
249-
// Valid options are "Immediately", "Graciously" and "Never".
250-
// +kubebuilder:validation:Enum=Immediately;Graciously;Never
249+
// Valid options are "Immediately", "Directly", "Graciously", "Gracefully" and "Never".
250+
// +kubebuilder:validation:Enum=Immediately;Directly;Graciously;Gracefully;Never
251251
// +optional
252252
PurgeMode policyv1alpha1.PurgeMode `json:"purgeMode,omitempty"`
253253

pkg/apis/work/v1alpha2/binding_types_helper_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ func TestResourceBindingSpec_GracefulEvictCluster(t *testing.T) {
174174
},
175175
EvictEvent: GracefulEvictionTask{
176176
FromCluster: "m1",
177-
PurgeMode: policyv1alpha1.Immediately,
177+
PurgeMode: policyv1alpha1.PurgeModeDirectly,
178178
Reason: EvictionReasonTaintUntolerated,
179179
Message: "graceful eviction",
180180
Producer: EvictionProducerTaintManager,
@@ -184,7 +184,7 @@ func TestResourceBindingSpec_GracefulEvictCluster(t *testing.T) {
184184
GracefulEvictionTasks: []GracefulEvictionTask{
185185
{
186186
FromCluster: "m1",
187-
PurgeMode: policyv1alpha1.Immediately,
187+
PurgeMode: policyv1alpha1.PurgeModeDirectly,
188188
Replicas: ptr.To[int32](1),
189189
Reason: EvictionReasonTaintUntolerated,
190190
Message: "graceful eviction",
@@ -226,7 +226,7 @@ func TestResourceBindingSpec_GracefulEvictCluster(t *testing.T) {
226226
},
227227
EvictEvent: GracefulEvictionTask{
228228
FromCluster: "m3",
229-
PurgeMode: policyv1alpha1.Graciously,
229+
PurgeMode: policyv1alpha1.PurgeModeGracefully,
230230
Reason: EvictionReasonTaintUntolerated,
231231
Message: "graceful eviction",
232232
Producer: EvictionProducerTaintManager,
@@ -236,7 +236,7 @@ func TestResourceBindingSpec_GracefulEvictCluster(t *testing.T) {
236236
GracefulEvictionTasks: []GracefulEvictionTask{
237237
{
238238
FromCluster: "m3",
239-
PurgeMode: policyv1alpha1.Graciously,
239+
PurgeMode: policyv1alpha1.PurgeModeGracefully,
240240
Replicas: ptr.To[int32](3),
241241
Reason: EvictionReasonTaintUntolerated,
242242
Message: "graceful eviction",
@@ -253,7 +253,7 @@ func TestResourceBindingSpec_GracefulEvictCluster(t *testing.T) {
253253
},
254254
EvictEvent: GracefulEvictionTask{
255255
FromCluster: "m3",
256-
PurgeMode: policyv1alpha1.Graciously,
256+
PurgeMode: policyv1alpha1.PurgeModeGracefully,
257257
Reason: EvictionReasonTaintUntolerated,
258258
Message: "graceful eviction",
259259
Producer: EvictionProducerTaintManager,
@@ -266,7 +266,7 @@ func TestResourceBindingSpec_GracefulEvictCluster(t *testing.T) {
266266
},
267267
{
268268
FromCluster: "m3",
269-
PurgeMode: policyv1alpha1.Graciously,
269+
PurgeMode: policyv1alpha1.PurgeModeGracefully,
270270
Replicas: ptr.To[int32](3),
271271
Reason: EvictionReasonTaintUntolerated,
272272
Message: "graceful eviction",
@@ -296,7 +296,7 @@ func TestResourceBindingSpec_GracefulEvictCluster(t *testing.T) {
296296
},
297297
EvictEvent: GracefulEvictionTask{
298298
FromCluster: "m1",
299-
PurgeMode: policyv1alpha1.Graciously,
299+
PurgeMode: policyv1alpha1.PurgeModeGracefully,
300300
Replicas: ptr.To[int32](1),
301301
Reason: EvictionReasonTaintUntolerated,
302302
Message: "graceful eviction v2",

pkg/controllers/applicationfailover/common.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,11 +210,13 @@ func buildTaskOptions(failoverBehavior *policyv1alpha1.ApplicationFailoverBehavi
210210
}
211211

212212
switch failoverBehavior.PurgeMode {
213-
case policyv1alpha1.Graciously:
213+
//nolint:staticcheck
214+
// disable `deprecation` check for backward compatibility.
215+
case policyv1alpha1.Graciously, policyv1alpha1.PurgeModeGracefully:
214216
if features.FeatureGate.Enabled(features.GracefulEviction) {
215217
taskOpts = append(taskOpts, workv1alpha2.WithGracePeriodSeconds(failoverBehavior.GracePeriodSeconds))
216218
} else {
217-
err := fmt.Errorf("GracefulEviction featureGate must be enabled when purgeMode is %s", policyv1alpha1.Graciously)
219+
err := fmt.Errorf("GracefulEviction featureGate must be enabled when purgeMode is %s", failoverBehavior.PurgeMode)
218220
klog.Error(err)
219221
return nil, err
220222
}

pkg/controllers/applicationfailover/common_test.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -472,13 +472,13 @@ func Test_buildTaskOptions(t *testing.T) {
472472
wantErr assert.ErrorAssertionFunc
473473
}{
474474
{
475-
name: "Graciously purgeMode with ResourceBinding",
475+
name: "Gracefully purgeMode with ResourceBinding",
476476
args: args{
477477
failoverBehavior: &policyv1alpha1.ApplicationFailoverBehavior{
478478
DecisionConditions: policyv1alpha1.DecisionConditions{
479479
TolerationSeconds: ptr.To[int32](100),
480480
},
481-
PurgeMode: policyv1alpha1.Graciously,
481+
PurgeMode: policyv1alpha1.PurgeModeGracefully,
482482
GracePeriodSeconds: ptr.To[int32](120),
483483
StatePreservation: &policyv1alpha1.StatePreservation{
484484
Rules: []policyv1alpha1.StatePreservationRule{
@@ -496,7 +496,7 @@ func Test_buildTaskOptions(t *testing.T) {
496496
clustersBeforeFailover: []string{"c0"},
497497
},
498498
want: *workv1alpha2.NewTaskOptions(
499-
workv1alpha2.WithPurgeMode(policyv1alpha1.Graciously),
499+
workv1alpha2.WithPurgeMode(policyv1alpha1.PurgeModeGracefully),
500500
workv1alpha2.WithProducer(RBApplicationFailoverControllerName),
501501
workv1alpha2.WithReason(workv1alpha2.EvictionReasonApplicationFailure),
502502
workv1alpha2.WithGracePeriodSeconds(ptr.To[int32](120)),
@@ -543,7 +543,7 @@ func Test_buildTaskOptions(t *testing.T) {
543543
DecisionConditions: policyv1alpha1.DecisionConditions{
544544
TolerationSeconds: ptr.To[int32](100),
545545
},
546-
PurgeMode: policyv1alpha1.Immediately,
546+
PurgeMode: policyv1alpha1.PurgeModeDirectly,
547547
StatePreservation: &policyv1alpha1.StatePreservation{
548548
Rules: []policyv1alpha1.StatePreservationRule{
549549
{AliasLabelName: "key-a", JSONPath: "{ .replicas }"},
@@ -560,21 +560,21 @@ func Test_buildTaskOptions(t *testing.T) {
560560
clustersBeforeFailover: []string{"c0"},
561561
},
562562
want: *workv1alpha2.NewTaskOptions(
563-
workv1alpha2.WithPurgeMode(policyv1alpha1.Immediately),
563+
workv1alpha2.WithPurgeMode(policyv1alpha1.PurgeModeDirectly),
564564
workv1alpha2.WithProducer(CRBApplicationFailoverControllerName),
565565
workv1alpha2.WithReason(workv1alpha2.EvictionReasonApplicationFailure),
566566
workv1alpha2.WithPreservedLabelState(map[string]string{"key-a": "2", "key-b": "true"}),
567567
workv1alpha2.WithClustersBeforeFailover([]string{"c0"})),
568568
wantErr: assert.NoError,
569569
},
570570
{
571-
name: "Graciously purgeMode with ResourceBinding, StatePreservation is nil",
571+
name: "Gracefully purgeMode with ResourceBinding, StatePreservation is nil",
572572
args: args{
573573
failoverBehavior: &policyv1alpha1.ApplicationFailoverBehavior{
574574
DecisionConditions: policyv1alpha1.DecisionConditions{
575575
TolerationSeconds: ptr.To[int32](100),
576576
},
577-
PurgeMode: policyv1alpha1.Graciously,
577+
PurgeMode: policyv1alpha1.PurgeModeGracefully,
578578
GracePeriodSeconds: ptr.To[int32](120),
579579
},
580580
aggregatedStatus: []workv1alpha2.AggregatedStatusItem{
@@ -586,20 +586,20 @@ func Test_buildTaskOptions(t *testing.T) {
586586
clustersBeforeFailover: []string{"c0"},
587587
},
588588
want: *workv1alpha2.NewTaskOptions(
589-
workv1alpha2.WithPurgeMode(policyv1alpha1.Graciously),
589+
workv1alpha2.WithPurgeMode(policyv1alpha1.PurgeModeGracefully),
590590
workv1alpha2.WithProducer(RBApplicationFailoverControllerName),
591591
workv1alpha2.WithReason(workv1alpha2.EvictionReasonApplicationFailure),
592592
workv1alpha2.WithGracePeriodSeconds(ptr.To[int32](120))),
593593
wantErr: assert.NoError,
594594
},
595595
{
596-
name: "Graciously purgeMode with ResourceBinding, StatePreservation.Rules is nil",
596+
name: "Gracefully purgeMode with ResourceBinding, StatePreservation.Rules is nil",
597597
args: args{
598598
failoverBehavior: &policyv1alpha1.ApplicationFailoverBehavior{
599599
DecisionConditions: policyv1alpha1.DecisionConditions{
600600
TolerationSeconds: ptr.To[int32](100),
601601
},
602-
PurgeMode: policyv1alpha1.Graciously,
602+
PurgeMode: policyv1alpha1.PurgeModeGracefully,
603603
GracePeriodSeconds: ptr.To[int32](120),
604604
StatePreservation: &policyv1alpha1.StatePreservation{},
605605
},
@@ -612,20 +612,20 @@ func Test_buildTaskOptions(t *testing.T) {
612612
clustersBeforeFailover: []string{"c0"},
613613
},
614614
want: *workv1alpha2.NewTaskOptions(
615-
workv1alpha2.WithPurgeMode(policyv1alpha1.Graciously),
615+
workv1alpha2.WithPurgeMode(policyv1alpha1.PurgeModeGracefully),
616616
workv1alpha2.WithProducer(RBApplicationFailoverControllerName),
617617
workv1alpha2.WithReason(workv1alpha2.EvictionReasonApplicationFailure),
618618
workv1alpha2.WithGracePeriodSeconds(ptr.To[int32](120))),
619619
wantErr: assert.NoError,
620620
},
621621
{
622-
name: "Graciously purgeMode with ResourceBinding, target cluster status in not collected",
622+
name: "Gracefully purgeMode with ResourceBinding, target cluster status in not collected",
623623
args: args{
624624
failoverBehavior: &policyv1alpha1.ApplicationFailoverBehavior{
625625
DecisionConditions: policyv1alpha1.DecisionConditions{
626626
TolerationSeconds: ptr.To[int32](100),
627627
},
628-
PurgeMode: policyv1alpha1.Graciously,
628+
PurgeMode: policyv1alpha1.PurgeModeGracefully,
629629
GracePeriodSeconds: ptr.To[int32](120),
630630
StatePreservation: &policyv1alpha1.StatePreservation{
631631
Rules: []policyv1alpha1.StatePreservationRule{

0 commit comments

Comments
 (0)