Skip to content

Commit a9142d8

Browse files
committed
feat: Make affinity group and failure domain controller run with multiple workers
Upstream PR kubernetes-sigs#341
1 parent d7f9b59 commit a9142d8

6 files changed

+32
-12
lines changed

controllers/cloudstackaffinitygroup_controller.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121

2222
"sigs.k8s.io/cluster-api/util/predicates"
2323
ctrl "sigs.k8s.io/controller-runtime"
24+
"sigs.k8s.io/controller-runtime/pkg/controller"
2425
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
2526

2627
infrav1 "sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta3"
@@ -90,8 +91,9 @@ func (r *CloudStackAGReconciliationRunner) ReconcileDelete() (ctrl.Result, error
9091
}
9192

9293
// SetupWithManager sets up the controller with the Manager.
93-
func (reconciler *CloudStackAffinityGroupReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) error {
94+
func (reconciler *CloudStackAffinityGroupReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opts controller.Options) error {
9495
return ctrl.NewControllerManagedBy(mgr).
96+
WithOptions(opts).
9597
For(&infrav1.CloudStackAffinityGroup{}).
9698
WithEventFilter(predicates.ResourceNotPausedAndHasFilterLabel(ctrl.LoggerFrom(ctx), reconciler.WatchFilterValue)).
9799
Complete(reconciler)

controllers/cloudstackaffinitygroup_controller_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,14 @@ import (
2323
infrav1 "sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta3"
2424
dummies "sigs.k8s.io/cluster-api-provider-cloudstack/test/dummies/v1beta3"
2525
"sigs.k8s.io/controller-runtime/pkg/client"
26+
"sigs.k8s.io/controller-runtime/pkg/controller"
2627
)
2728

2829
var _ = Describe("CloudStackAffinityGroupReconciler", func() {
2930
BeforeEach(func() {
3031
SetupTestEnvironment() // Must happen before setting up managers/reconcilers.
3132
dummies.SetDummyVars()
32-
Ω(AffinityGReconciler.SetupWithManager(ctx, k8sManager)).Should(Succeed()) // Register CloudStack AffinityGReconciler.
33+
Ω(AffinityGReconciler.SetupWithManager(ctx, k8sManager, controller.Options{})).Should(Succeed()) // Register CloudStack AffinityGReconciler.
3334
})
3435

3536
It("Should patch back the affinity group as ready after calling GetOrCreateAffinityGroup.", func() {

controllers/cloudstackcluster_controller_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ import (
3030
var _ = Describe("CloudStackClusterReconciler", func() {
3131
Context("With k8s like test environment.", func() {
3232
BeforeEach(func() {
33-
SetupTestEnvironment() // Must happen before setting up managers/reconcilers.
34-
Ω(ClusterReconciler.SetupWithManager(ctx, k8sManager, controller.Options{})).Should(Succeed()) // Register CloudStack ClusterReconciler.
35-
Ω(FailureDomainReconciler.SetupWithManager(ctx, k8sManager)).Should(Succeed()) // Register CloudStack FailureDomainReconciler.
33+
SetupTestEnvironment() // Must happen before setting up managers/reconcilers.
34+
Ω(ClusterReconciler.SetupWithManager(ctx, k8sManager, controller.Options{})).Should(Succeed()) // Register CloudStack ClusterReconciler.
35+
Ω(FailureDomainReconciler.SetupWithManager(ctx, k8sManager, controller.Options{})).Should(Succeed()) // Register CloudStack FailureDomainReconciler.
3636
})
3737

3838
It("Should create a CloudStackFailureDomain.", func() {

controllers/cloudstackfailuredomain_controller.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package controllers
1818

1919
import (
2020
"context"
21+
"sigs.k8s.io/controller-runtime/pkg/controller"
2122
"sort"
2223

2324
"github.com/pkg/errors"
@@ -265,8 +266,9 @@ func (r *CloudStackFailureDomainReconciliationRunner) RemoveFinalizer() (ctrl.Re
265266
}
266267

267268
// SetupWithManager sets up the controller with the Manager.
268-
func (reconciler *CloudStackFailureDomainReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) error {
269+
func (reconciler *CloudStackFailureDomainReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opts controller.Options) error {
269270
return ctrl.NewControllerManagedBy(mgr).
271+
WithOptions(opts).
270272
For(&infrav1.CloudStackFailureDomain{}).
271273
WithEventFilter(predicates.ResourceNotPausedAndHasFilterLabel(ctrl.LoggerFrom(ctx), reconciler.WatchFilterValue)).
272274
Complete(reconciler)

controllers/cloudstackfailuredomain_controller_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,15 @@ import (
2828
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
2929
"sigs.k8s.io/cluster-api/util/patch"
3030
"sigs.k8s.io/controller-runtime/pkg/client"
31+
"sigs.k8s.io/controller-runtime/pkg/controller"
3132
)
3233

3334
var _ = Describe("CloudStackFailureDomainReconciler", func() {
3435
Context("With k8s like test environment.", func() {
3536
BeforeEach(func() {
3637
dummies.SetDummyVars()
37-
SetupTestEnvironment() // Must happen before setting up managers/reconcilers.
38-
Ω(FailureDomainReconciler.SetupWithManager(ctx, k8sManager)).Should(Succeed()) // Register CloudStack FailureDomainReconciler.
38+
SetupTestEnvironment() // Must happen before setting up managers/reconcilers.
39+
Ω(FailureDomainReconciler.SetupWithManager(ctx, k8sManager, controller.Options{})).Should(Succeed()) // Register CloudStack FailureDomainReconciler.
3940
// Modify failure domain name the same way the cluster controller would.
4041
dummies.CSFailureDomain1.Name = dummies.CSFailureDomain1.Name + "-" + dummies.CSCluster.Name
4142

main.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,10 @@ type managerOpts struct {
9090
WebhookCertDir string
9191
WebhookPort int
9292

93-
CloudStackClusterConcurrency int
94-
CloudStackMachineConcurrency int
93+
CloudStackClusterConcurrency int
94+
CloudStackMachineConcurrency int
95+
CloudStackAffinityGroupConcurrency int
96+
CloudStackFailureDomainConcurrency int
9597
}
9698

9799
func setFlags() *managerOpts {
@@ -158,6 +160,18 @@ func setFlags() *managerOpts {
158160
10,
159161
"Maximum concurrent reconciles for CloudStackMachine resources",
160162
)
163+
flag.IntVar(
164+
&opts.CloudStackAffinityGroupConcurrency,
165+
"cloudstackaffinitygroup-concurrency",
166+
5,
167+
"Maximum concurrent reconciles for CloudStackAffinityGroup resources",
168+
)
169+
flag.IntVar(
170+
&opts.CloudStackFailureDomainConcurrency,
171+
"cloudstackfailuredomain-concurrency",
172+
5,
173+
"Maximum concurrent reconciles for CloudStackFailureDomain resources",
174+
)
161175

162176
return opts
163177
}
@@ -292,11 +306,11 @@ func setupReconcilers(ctx context.Context, base utils.ReconcilerBase, opts manag
292306
setupLog.Error(err, "unable to create controller", "controller", "CloudStackIsoNetReconciler")
293307
os.Exit(1)
294308
}
295-
if err := (&controllers.CloudStackAffinityGroupReconciler{ReconcilerBase: base}).SetupWithManager(ctx, mgr); err != nil {
309+
if err := (&controllers.CloudStackAffinityGroupReconciler{ReconcilerBase: base}).SetupWithManager(ctx, mgr, controller.Options{MaxConcurrentReconciles: opts.CloudStackAffinityGroupConcurrency}); err != nil {
296310
setupLog.Error(err, "unable to create controller", "controller", "CloudStackAffinityGroup")
297311
os.Exit(1)
298312
}
299-
if err := (&controllers.CloudStackFailureDomainReconciler{ReconcilerBase: base}).SetupWithManager(ctx, mgr); err != nil {
313+
if err := (&controllers.CloudStackFailureDomainReconciler{ReconcilerBase: base}).SetupWithManager(ctx, mgr, controller.Options{MaxConcurrentReconciles: opts.CloudStackFailureDomainConcurrency}); err != nil {
300314
setupLog.Error(err, "unable to create controller", "controller", "CloudStackFailureDomain")
301315
os.Exit(1)
302316
}

0 commit comments

Comments
 (0)