Skip to content

Commit 8f12258

Browse files
authored
feat: enable resource change detector for RP (#169)
1 parent c06ca95 commit 8f12258

File tree

6 files changed

+228
-7
lines changed

6 files changed

+228
-7
lines changed

apis/placement/v1beta1/commons.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,16 @@ const (
2727
ResourcePlacementResource = "resourceplacements"
2828
// ClusterResourceBindingKind represents the kind of ClusterResourceBinding.
2929
ClusterResourceBindingKind = "ClusterResourceBinding"
30+
// ResourceBindingKind represents the kind of ResourceBinding.
31+
ResourceBindingKind = "ResourceBinding"
3032
// ClusterResourceSnapshotKind represents the kind of ClusterResourceSnapshot.
3133
ClusterResourceSnapshotKind = "ClusterResourceSnapshot"
34+
// ResourceSnapshotKind represents the kind of ResourceSnapshot.
35+
ResourceSnapshotKind = "ResourceSnapshot"
3236
// ClusterSchedulingPolicySnapshotKind represents the kind of ClusterSchedulingPolicySnapshot.
3337
ClusterSchedulingPolicySnapshotKind = "ClusterSchedulingPolicySnapshot"
38+
// SchedulingPolicySnapshotKind represents the kind of SchedulingPolicySnapshot.
39+
SchedulingPolicySnapshotKind = "SchedulingPolicySnapshot"
3440
// WorkKind represents the kind of Work.
3541
WorkKind = "Work"
3642
// AppliedWorkKind represents the kind of AppliedWork.

apis/placement/v1beta1/resourcesnapshot_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ const (
5454

5555
// make sure the ResourceSnapshotObj and ResourceSnapshotList interfaces are implemented by the
5656
// ClusterResourceSnapshot and ResourceSnapshot types.
57-
var _ ResourceSnapshotObj = &ResourceSnapshot{}
57+
var _ ResourceSnapshotObj = &ClusterResourceSnapshot{}
5858
var _ ResourceSnapshotObj = &ResourceSnapshot{}
5959
var _ ResourceSnapshotObjList = &ClusterResourceSnapshotList{}
6060
var _ ResourceSnapshotObjList = &ResourceSnapshotList{}

cmd/hubagent/workload/setup.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,12 +397,13 @@ func SetupControllers(ctx context.Context, wg *sync.WaitGroup, mgr ctrl.Manager,
397397
RESTMapper: mgr.GetRESTMapper(),
398398
ClusterResourcePlacementControllerV1Alpha1: clusterResourcePlacementControllerV1Alpha1,
399399
ClusterResourcePlacementControllerV1Beta1: clusterResourcePlacementControllerV1Beta1,
400+
ResourcePlacementController: nil, // TODO: need to enable the resource placement controller when ready
400401
ResourceChangeController: resourceChangeController,
401402
MemberClusterPlacementController: memberClusterPlacementController,
402403
InformerManager: dynamicInformerManager,
403404
ResourceConfig: resourceConfig,
404405
SkippedNamespaces: skippedNamespaces,
405-
ConcurrentClusterPlacementWorker: int(math.Ceil(float64(opts.MaxConcurrentClusterPlacement) / 10)),
406+
ConcurrentPlacementWorker: int(math.Ceil(float64(opts.MaxConcurrentClusterPlacement) / 10)),
406407
ConcurrentResourceChangeWorker: opts.ConcurrentResourceChangeSyncs,
407408
}
408409

pkg/resourcewatcher/change_dector.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ type ChangeDetector struct {
6161
// watchers and does not rely on this struct to detect changes.
6262
ClusterResourcePlacementControllerV1Beta1 controller.Controller
6363

64+
// ResourceChangeController maintains a rate limited queue which is used to store
65+
// the name of the changed resourcePlacement and a reconcile function to consume the items in queue.
66+
//
67+
// ResourcePlacementController is only enabled as the v1beta1 controller.
68+
ResourcePlacementController controller.Controller
69+
6470
// ClusterResourcePlacementController maintains a rate limited queue which is used to store any resources'
6571
// cluster wide key and a reconcile function to consume the items in queue.
6672
// This controller will be used by both v1alpha1 & v1beta1 ClusterResourcePlacementController.
@@ -81,9 +87,9 @@ type ChangeDetector struct {
8187
// SkippedNamespaces contains all the namespaces that we won't select
8288
SkippedNamespaces map[string]bool
8389

84-
// ConcurrentClusterPlacementWorker is the number of cluster `placement` reconcilers that are
90+
// ConcurrentPlacementWorker is the number of `placement` reconcilers that are
8591
// allowed to sync concurrently.
86-
ConcurrentClusterPlacementWorker int
92+
ConcurrentPlacementWorker int
8793

8894
// ConcurrentResourceChangeWorker is the number of resource change work that are
8995
// allowed to sync concurrently.
@@ -151,12 +157,17 @@ func (d *ChangeDetector) Start(ctx context.Context) error {
151157
errs, cctx := errgroup.WithContext(ctx)
152158
if d.ClusterResourcePlacementControllerV1Alpha1 != nil {
153159
errs.Go(func() error {
154-
return d.ClusterResourcePlacementControllerV1Alpha1.Run(cctx, d.ConcurrentClusterPlacementWorker)
160+
return d.ClusterResourcePlacementControllerV1Alpha1.Run(cctx, d.ConcurrentPlacementWorker)
155161
})
156162
}
157163
if d.ClusterResourcePlacementControllerV1Beta1 != nil {
158164
errs.Go(func() error {
159-
return d.ClusterResourcePlacementControllerV1Beta1.Run(cctx, d.ConcurrentClusterPlacementWorker)
165+
return d.ClusterResourcePlacementControllerV1Beta1.Run(cctx, d.ConcurrentPlacementWorker)
166+
})
167+
}
168+
if d.ResourcePlacementController != nil {
169+
errs.Go(func() error {
170+
return d.ResourcePlacementController.Run(cctx, d.ConcurrentPlacementWorker)
160171
})
161172
}
162173
errs.Go(func() error {

pkg/utils/apiresources.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,21 +65,41 @@ var (
6565
Kind: placementv1beta1.ClusterResourcePlacementKind,
6666
}
6767

68+
ResourcePlacementGK = schema.GroupKind{
69+
Group: placementv1beta1.GroupVersion.Group,
70+
Kind: placementv1beta1.ResourcePlacementKind,
71+
}
72+
6873
ClusterResourceBindingGK = schema.GroupKind{
6974
Group: placementv1beta1.GroupVersion.Group,
7075
Kind: placementv1beta1.ClusterResourceBindingKind,
7176
}
7277

78+
ResourceBindingGK = schema.GroupKind{
79+
Group: placementv1beta1.GroupVersion.Group,
80+
Kind: placementv1beta1.ResourceBindingKind,
81+
}
82+
7383
ClusterResourceSnapshotGK = schema.GroupKind{
7484
Group: placementv1beta1.GroupVersion.Group,
7585
Kind: placementv1beta1.ClusterResourceSnapshotKind,
7686
}
7787

88+
ResourceSnapshotGK = schema.GroupKind{
89+
Group: placementv1beta1.GroupVersion.Group,
90+
Kind: placementv1beta1.ResourceSnapshotKind,
91+
}
92+
7893
ClusterSchedulingPolicySnapshotGK = schema.GroupKind{
7994
Group: placementv1beta1.GroupVersion.Group,
8095
Kind: placementv1beta1.ClusterSchedulingPolicySnapshotKind,
8196
}
8297

98+
SchedulingPolicySnapshotGK = schema.GroupKind{
99+
Group: placementv1beta1.GroupVersion.Group,
100+
Kind: placementv1beta1.SchedulingPolicySnapshotKind,
101+
}
102+
83103
WorkGK = schema.GroupKind{
84104
Group: placementv1beta1.GroupVersion.Group,
85105
Kind: placementv1beta1.WorkKind,
@@ -177,16 +197,19 @@ func NewResourceConfig(isAllowList bool) *ResourceConfig {
177197

178198
// disable all fleet placement resources except for the envelope type
179199
r.AddGroupKind(ClusterResourcePlacementGK)
200+
r.AddGroupKind(ResourcePlacementGK)
180201
r.AddGroupKind(ClusterResourceBindingGK)
202+
r.AddGroupKind(ResourceBindingGK)
181203
r.AddGroupKind(ClusterResourceSnapshotGK)
204+
r.AddGroupKind(ResourceSnapshotGK)
182205
r.AddGroupKind(ClusterSchedulingPolicySnapshotGK)
206+
r.AddGroupKind(SchedulingPolicySnapshotGK)
183207
r.AddGroupKind(WorkGK)
184208
r.AddGroupKind(ClusterStagedUpdateRunGK)
185209
r.AddGroupKind(ClusterStagedUpdateStrategyGK)
186210
r.AddGroupKind(ClusterApprovalRequestGK)
187211
r.AddGroupKind(ClusterResourcePlacementEvictionGK)
188212
r.AddGroupKind(ClusterResourcePlacementDisruptionBudgetGK)
189-
// Add v1alpha1 resources to skip to not break when we move them to v1beta1
190213
r.AddGroupKind(ClusterResourceOverrideGK)
191214
r.AddGroupKind(ClusterResourceOverrideSnapshotGK)
192215
r.AddGroupKind(ResourceOverrideGK)

pkg/utils/apiresources_test.go

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,186 @@ func TestDefaultResourceConfigGroupVersionKindParse(t *testing.T) {
354354
Version: "v2",
355355
Kind: "TrafficManagerBackend",
356356
},
357+
{
358+
Group: "placement.kubernetes-fleet.io",
359+
Version: "v1beta1",
360+
Kind: "ClusterResourcePlacement",
361+
},
362+
{
363+
Group: "placement.kubernetes-fleet.io",
364+
Version: "v1",
365+
Kind: "ClusterResourcePlacement",
366+
},
367+
{
368+
Group: "placement.kubernetes-fleet.io",
369+
Version: "v1beta1",
370+
Kind: "ResourcePlacement",
371+
},
372+
{
373+
Group: "placement.kubernetes-fleet.io",
374+
Version: "v1",
375+
Kind: "ResourcePlacement",
376+
},
377+
{
378+
Group: "placement.kubernetes-fleet.io",
379+
Version: "v1beta1",
380+
Kind: "ClusterResourceBinding",
381+
},
382+
{
383+
Group: "placement.kubernetes-fleet.io",
384+
Version: "v1",
385+
Kind: "ClusterResourceBinding",
386+
},
387+
{
388+
Group: "placement.kubernetes-fleet.io",
389+
Version: "v1beta1",
390+
Kind: "ResourceBinding",
391+
},
392+
{
393+
Group: "placement.kubernetes-fleet.io",
394+
Version: "v1",
395+
Kind: "ResourceBinding",
396+
},
397+
{
398+
Group: "placement.kubernetes-fleet.io",
399+
Version: "v1beta1",
400+
Kind: "ClusterResourceSnapshot",
401+
},
402+
{
403+
Group: "placement.kubernetes-fleet.io",
404+
Version: "v1",
405+
Kind: "ClusterResourceSnapshot",
406+
},
407+
{
408+
Group: "placement.kubernetes-fleet.io",
409+
Version: "v1beta1",
410+
Kind: "ResourceSnapshot",
411+
},
412+
{
413+
Group: "placement.kubernetes-fleet.io",
414+
Version: "v1",
415+
Kind: "ResourceSnapshot",
416+
},
417+
{
418+
Group: "placement.kubernetes-fleet.io",
419+
Version: "v1beta1",
420+
Kind: "ClusterSchedulingPolicySnapshot",
421+
},
422+
{
423+
Group: "placement.kubernetes-fleet.io",
424+
Version: "v1",
425+
Kind: "ClusterSchedulingPolicySnapshot",
426+
},
427+
{
428+
Group: "placement.kubernetes-fleet.io",
429+
Version: "v1beta1",
430+
Kind: "SchedulingPolicySnapshot",
431+
},
432+
{
433+
Group: "placement.kubernetes-fleet.io",
434+
Version: "v1",
435+
Kind: "SchedulingPolicySnapshot",
436+
},
437+
{
438+
Group: "placement.kubernetes-fleet.io",
439+
Version: "v1beta1",
440+
Kind: "Work",
441+
},
442+
{
443+
Group: "placement.kubernetes-fleet.io",
444+
Version: "v1",
445+
Kind: "Work",
446+
},
447+
{
448+
Group: "placement.kubernetes-fleet.io",
449+
Version: "v1beta1",
450+
Kind: "ClusterStagedUpdateRun",
451+
},
452+
{
453+
Group: "placement.kubernetes-fleet.io",
454+
Version: "v1",
455+
Kind: "ClusterStagedUpdateRun",
456+
},
457+
{
458+
Group: "placement.kubernetes-fleet.io",
459+
Version: "v1beta1",
460+
Kind: "ClusterStagedUpdateStrategy",
461+
},
462+
{
463+
Group: "placement.kubernetes-fleet.io",
464+
Version: "v1",
465+
Kind: "ClusterStagedUpdateStrategy",
466+
},
467+
{
468+
Group: "placement.kubernetes-fleet.io",
469+
Version: "v1beta1",
470+
Kind: "ClusterApprovalRequest",
471+
},
472+
{
473+
Group: "placement.kubernetes-fleet.io",
474+
Version: "v1",
475+
Kind: "ClusterApprovalRequest",
476+
},
477+
{
478+
Group: "placement.kubernetes-fleet.io",
479+
Version: "v1beta1",
480+
Kind: "ClusterResourcePlacementEviction",
481+
},
482+
{
483+
Group: "placement.kubernetes-fleet.io",
484+
Version: "v1",
485+
Kind: "ClusterResourcePlacementEviction",
486+
},
487+
{
488+
Group: "placement.kubernetes-fleet.io",
489+
Version: "v1beta1",
490+
Kind: "ClusterResourcePlacementDisruptionBudget",
491+
},
492+
{
493+
Group: "placement.kubernetes-fleet.io",
494+
Version: "v1",
495+
Kind: "ClusterResourcePlacementDisruptionBudget",
496+
},
497+
{
498+
Group: "placement.kubernetes-fleet.io",
499+
Version: "v1beta1",
500+
Kind: "ClusterResourceOverride",
501+
},
502+
{
503+
Group: "placement.kubernetes-fleet.io",
504+
Version: "v1",
505+
Kind: "ClusterResourceOverride",
506+
},
507+
{
508+
Group: "placement.kubernetes-fleet.io",
509+
Version: "v1beta1",
510+
Kind: "ClusterResourceOverrideSnapshot",
511+
},
512+
{
513+
Group: "placement.kubernetes-fleet.io",
514+
Version: "v1",
515+
Kind: "ClusterResourceOverrideSnapshot",
516+
},
517+
{
518+
Group: "placement.kubernetes-fleet.io",
519+
Version: "v1beta1",
520+
Kind: "ResourceOverride",
521+
},
522+
{
523+
Group: "placement.kubernetes-fleet.io",
524+
Version: "v1",
525+
Kind: "ResourceOverride",
526+
},
527+
{
528+
Group: "placement.kubernetes-fleet.io",
529+
Version: "v1beta1",
530+
Kind: "ResourceOverrideSnapshot",
531+
},
532+
{
533+
Group: "placement.kubernetes-fleet.io",
534+
Version: "v1",
535+
Kind: "ResourceOverrideSnapshot",
536+
},
357537
}
358538

359539
resourcesNotInDefaultResourcesList := []schema.GroupVersionKind{

0 commit comments

Comments
 (0)