From 22559a0fd58d750e8b400d364c89fc84bdd5054d Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Mon, 8 Aug 2022 17:17:35 +0100 Subject: [PATCH] Add flags to configure exponential back-off retry Add two new flags to enable users to configure exponential back-off for Flux objects. The default values are now set to 750ms for minimum retry time, and 15min for max. Signed-off-by: Paulo Gomes --- controllers/imagepolicy_controller.go | 3 +++ controllers/imagerepository_controller.go | 3 +++ main.go | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/controllers/imagepolicy_controller.go b/controllers/imagepolicy_controller.go index f6d0f936..25dcaf52 100644 --- a/controllers/imagepolicy_controller.go +++ b/controllers/imagepolicy_controller.go @@ -32,6 +32,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/handler" + "sigs.k8s.io/controller-runtime/pkg/ratelimiter" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/source" @@ -62,6 +63,7 @@ type ImagePolicyReconciler struct { type ImagePolicyReconcilerOptions struct { MaxConcurrentReconciles int + RateLimiter ratelimiter.RateLimiter } // +kubebuilder:rbac:groups=image.toolkit.fluxcd.io,resources=imagepolicies,verbs=get;list;watch;create;update;patch;delete @@ -257,6 +259,7 @@ func (r *ImagePolicyReconciler) SetupWithManager(mgr ctrl.Manager, opts ImagePol ). WithOptions(controller.Options{ MaxConcurrentReconciles: opts.MaxConcurrentReconciles, + RateLimiter: opts.RateLimiter, }). Complete(r) } diff --git a/controllers/imagerepository_controller.go b/controllers/imagerepository_controller.go index 0567f2f7..2905dfbb 100644 --- a/controllers/imagerepository_controller.go +++ b/controllers/imagerepository_controller.go @@ -46,6 +46,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/predicate" + "sigs.k8s.io/controller-runtime/pkg/ratelimiter" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/pkg/runtime/events" @@ -84,6 +85,7 @@ type ImageRepositoryReconciler struct { type ImageRepositoryReconcilerOptions struct { MaxConcurrentReconciles int + RateLimiter ratelimiter.RateLimiter } type dockerConfig struct { @@ -493,6 +495,7 @@ func (r *ImageRepositoryReconciler) SetupWithManager(mgr ctrl.Manager, opts Imag WithEventFilter(predicate.Or(predicate.GenerationChangedPredicate{}, predicates.ReconcileRequestedPredicate{})). WithOptions(controller.Options{ MaxConcurrentReconciles: opts.MaxConcurrentReconciles, + RateLimiter: opts.RateLimiter, }). Complete(r) } diff --git a/main.go b/main.go index a657b684..6cd03dae 100644 --- a/main.go +++ b/main.go @@ -31,6 +31,7 @@ import ( "github.com/fluxcd/pkg/runtime/acl" "github.com/fluxcd/pkg/runtime/client" + helper "github.com/fluxcd/pkg/runtime/controller" "github.com/fluxcd/pkg/runtime/events" "github.com/fluxcd/pkg/runtime/leaderelection" "github.com/fluxcd/pkg/runtime/logger" @@ -75,6 +76,7 @@ func main() { gcpAutoLogin bool azureAutoLogin bool aclOptions acl.Options + rateLimiterOptions helper.RateLimiterOptions ) flag.StringVar(&metricsAddr, "metrics-addr", ":8080", "The address the metric endpoint binds to.") @@ -93,6 +95,7 @@ func main() { logOptions.BindFlags(flag.CommandLine) leaderElectionOptions.BindFlags(flag.CommandLine) aclOptions.BindFlags(flag.CommandLine) + rateLimiterOptions.BindFlags(flag.CommandLine) flag.Parse() log := logger.NewLogger(logOptions) @@ -157,6 +160,7 @@ func main() { }, }).SetupWithManager(mgr, controllers.ImageRepositoryReconcilerOptions{ MaxConcurrentReconciles: concurrent, + RateLimiter: helper.GetRateLimiter(rateLimiterOptions), }); err != nil { setupLog.Error(err, "unable to create controller", "controller", imagev1.ImageRepositoryKind) os.Exit(1) @@ -170,6 +174,7 @@ func main() { ACLOptions: aclOptions, }).SetupWithManager(mgr, controllers.ImagePolicyReconcilerOptions{ MaxConcurrentReconciles: concurrent, + RateLimiter: helper.GetRateLimiter(rateLimiterOptions), }); err != nil { setupLog.Error(err, "unable to create controller", "controller", imagev1.ImagePolicyKind) os.Exit(1)