Skip to content

Commit 77ed2c9

Browse files
committed
decouple suspension of propagation and resourcebinding
Signed-off-by: Monokaix <[email protected]>
1 parent 7112723 commit 77ed2c9

File tree

9 files changed

+94
-17
lines changed

9 files changed

+94
-17
lines changed

Diff for: api/openapi-spec/swagger.json

+15-1
Original file line numberDiff line numberDiff line change
@@ -20395,7 +20395,7 @@
2039520395
},
2039620396
"suspension": {
2039720397
"description": "Suspension declares the policy for suspending different aspects of propagation. nil means no suspension. no default values.",
20398-
"$ref": "#/definitions/com.github.karmada-io.karmada.pkg.apis.policy.v1alpha1.Suspension"
20398+
"$ref": "#/definitions/com.github.karmada-io.karmada.pkg.apis.work.v1alpha2.Suspension"
2039920399
}
2040020400
}
2040120401
},
@@ -20434,6 +20434,20 @@
2043420434
}
2043520435
}
2043620436
},
20437+
"com.github.karmada-io.karmada.pkg.apis.work.v1alpha2.Suspension": {
20438+
"description": "Suspension defines the policy for suspending of propagation.",
20439+
"type": "object",
20440+
"properties": {
20441+
"dispatching": {
20442+
"description": "Dispatching controls whether dispatching should be suspended. nil means not suspend, no default value, only accepts 'true'. Note: true means stop propagating to all clusters. Can not co-exist with DispatchingOnClusters which is used to suspend particular clusters.",
20443+
"type": "boolean"
20444+
},
20445+
"dispatchingOnClusters": {
20446+
"description": "DispatchingOnClusters declares a list of clusters to which the dispatching should be suspended. Note: Can not co-exist with Dispatching which is used to suspend all.",
20447+
"$ref": "#/definitions/com.github.karmada-io.karmada.pkg.apis.policy.v1alpha1.SuspendClusters"
20448+
}
20449+
}
20450+
},
2043720451
"com.github.karmada-io.karmada.pkg.apis.work.v1alpha2.TargetCluster": {
2043820452
"description": "TargetCluster represents the identifier of a member cluster.",
2043920453
"type": "object",

Diff for: pkg/apis/work/v1alpha2/binding_types.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ type ResourceBindingSpec struct {
150150
// Suspension declares the policy for suspending different aspects of propagation.
151151
// nil means no suspension. no default values.
152152
// +optional
153-
Suspension *policyv1alpha1.Suspension `json:"suspension,omitempty"`
153+
Suspension *Suspension `json:"suspension,omitempty"`
154154

155155
// PreserveResourcesOnDeletion controls whether resources should be preserved on the
156156
// member clusters when the binding object is deleted.
@@ -322,6 +322,11 @@ type BindingSnapshot struct {
322322
Clusters []TargetCluster `json:"clusters,omitempty"`
323323
}
324324

325+
// Suspension defines the policy for suspending of propagation.
326+
type Suspension struct {
327+
*policyv1alpha1.Suspension `json:",inline"`
328+
}
329+
325330
// ResourceBindingStatus represents the overall status of the strategy as well as the referenced resources.
326331
type ResourceBindingStatus struct {
327332
// SchedulerObservedGeneration is the generation(.metadata.generation) observed by the scheduler.

Diff for: pkg/apis/work/v1alpha2/zz_generated.deepcopy.go

+22-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: pkg/controllers/binding/common.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -302,8 +302,8 @@ func needReviseReplicas(replicas int32, placement *policyv1alpha1.Placement) boo
302302
return replicas > 0 && placement != nil && placement.ReplicaSchedulingType() == policyv1alpha1.ReplicaSchedulingTypeDivided
303303
}
304304

305-
func shouldSuspendDispatching(suspension *policyv1alpha1.Suspension, targetCluster workv1alpha2.TargetCluster) bool {
306-
if suspension == nil {
305+
func shouldSuspendDispatching(suspension *workv1alpha2.Suspension, targetCluster workv1alpha2.TargetCluster) bool {
306+
if suspension == nil || suspension.Suspension == nil {
307307
return false
308308
}
309309

Diff for: pkg/controllers/binding/common_test.go

+14-6
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ func Test_mergeConflictResolution(t *testing.T) {
321321

322322
func Test_shouldSuspendDispatching(t *testing.T) {
323323
type args struct {
324-
suspension *policyv1alpha1.Suspension
324+
suspension *workv1alpha2.Suspension
325325
targetCluster workv1alpha2.TargetCluster
326326
}
327327
tests := []struct {
@@ -334,39 +334,47 @@ func Test_shouldSuspendDispatching(t *testing.T) {
334334
args: args{},
335335
want: false,
336336
},
337+
338+
{
339+
name: "false for nil suspension.Suspension",
340+
args: args{
341+
suspension: &workv1alpha2.Suspension{},
342+
},
343+
want: false,
344+
},
337345
{
338346
name: "false for nil dispatching",
339347
args: args{
340-
suspension: &policyv1alpha1.Suspension{Dispatching: nil},
348+
suspension: &workv1alpha2.Suspension{Suspension: &policyv1alpha1.Suspension{Dispatching: nil}},
341349
},
342350
want: false,
343351
},
344352
{
345353
name: "false for not suspension",
346354
args: args{
347-
suspension: &policyv1alpha1.Suspension{Dispatching: ptr.To(false)},
355+
suspension: &workv1alpha2.Suspension{Suspension: &policyv1alpha1.Suspension{Dispatching: ptr.To(false)}},
348356
},
349357
want: false,
350358
},
351359
{
352360
name: "true for suspension",
353361
args: args{
354-
suspension: &policyv1alpha1.Suspension{Dispatching: ptr.To(true)},
362+
suspension: &workv1alpha2.Suspension{Suspension: &policyv1alpha1.Suspension{Dispatching: ptr.To(true)}},
355363
},
356364
want: true,
357365
},
358366
{
359367
name: "true for matching cluster",
360368
args: args{
361-
suspension: &policyv1alpha1.Suspension{DispatchingOnClusters: &policyv1alpha1.SuspendClusters{ClusterNames: []string{"clusterA"}}},
369+
suspension: &workv1alpha2.Suspension{Suspension: &policyv1alpha1.Suspension{DispatchingOnClusters: &policyv1alpha1.SuspendClusters{ClusterNames: []string{"clusterA"}}}},
362370
targetCluster: workv1alpha2.TargetCluster{Name: "clusterA"},
363371
},
364372
want: true,
365373
},
366374
{
367375
name: "false for mismatched cluster",
368376
args: args{
369-
suspension: &policyv1alpha1.Suspension{DispatchingOnClusters: &policyv1alpha1.SuspendClusters{ClusterNames: []string{"clusterB"}}},
377+
suspension: &workv1alpha2.Suspension{Suspension: &policyv1alpha1.Suspension{DispatchingOnClusters: &policyv1alpha1.SuspendClusters{ClusterNames: []string{"clusterB"}}}},
370378
targetCluster: workv1alpha2.TargetCluster{Name: "clusterA"},
371379
},
372380
want: false,

Diff for: pkg/detector/detector.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -724,7 +724,7 @@ func (d *ResourceDetector) BuildResourceBinding(object *unstructured.Unstructure
724724
Placement: &policySpec.Placement,
725725
Failover: policySpec.Failover,
726726
ConflictResolution: policySpec.ConflictResolution,
727-
Suspension: policySpec.Suspension,
727+
Suspension: &workv1alpha2.Suspension{Suspension: policySpec.Suspension},
728728
PreserveResourcesOnDeletion: policySpec.PreserveResourcesOnDeletion,
729729
Resource: workv1alpha2.ObjectReference{
730730
APIVersion: object.GetAPIVersion(),
@@ -769,7 +769,7 @@ func (d *ResourceDetector) BuildClusterResourceBinding(object *unstructured.Unst
769769
Placement: &policySpec.Placement,
770770
Failover: policySpec.Failover,
771771
ConflictResolution: policySpec.ConflictResolution,
772-
Suspension: policySpec.Suspension,
772+
Suspension: &workv1alpha2.Suspension{Suspension: policySpec.Suspension},
773773
PreserveResourcesOnDeletion: policySpec.PreserveResourcesOnDeletion,
774774
Resource: workv1alpha2.ObjectReference{
775775
APIVersion: object.GetAPIVersion(),

Diff for: pkg/generated/openapi/zz_generated.openapi.go

+31-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: test/e2e/clusterpropagationpolicy_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1124,7 +1124,7 @@ var _ = ginkgo.Describe("[Suspension] ClusterPropagationPolicy testing", func()
11241124

11251125
ginkgo.By("check CRB suspension spec", func() {
11261126
framework.WaitClusterResourceBindingFitWith(karmadaClient, resourceBindingName, func(binding *workv1alpha2.ClusterResourceBinding) bool {
1127-
return binding.Spec.Suspension != nil && ptr.Deref(binding.Spec.Suspension.Dispatching, false)
1127+
return binding.Spec.Suspension != nil && binding.Spec.Suspension.Suspension != nil && ptr.Deref(binding.Spec.Suspension.Dispatching, false)
11281128
})
11291129
})
11301130

Diff for: test/e2e/propagationpolicy_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1207,7 +1207,7 @@ var _ = ginkgo.Describe("[Suspension] PropagationPolicy testing", func() {
12071207
ginkgo.By("check RB suspension spec", func() {
12081208
framework.WaitResourceBindingFitWith(karmadaClient, deployment.Namespace, names.GenerateBindingName(deployment.Kind, deployment.Name),
12091209
func(binding *workv1alpha2.ResourceBinding) bool {
1210-
return binding.Spec.Suspension != nil && ptr.Deref(binding.Spec.Suspension.Dispatching, false)
1210+
return binding.Spec.Suspension != nil && binding.Spec.Suspension.Suspension != nil && ptr.Deref(binding.Spec.Suspension.Dispatching, false)
12111211
})
12121212
})
12131213

0 commit comments

Comments
 (0)