From d4c07fc7d5b900193d3af1338992ed29dfd6d53b Mon Sep 17 00:00:00 2001 From: Helder Santana Date: Fri, 11 Oct 2024 16:24:59 +0200 Subject: [PATCH] parametrize minimum sync period config --- cmd/manager/main.go | 10 ++++++++-- pkg/operator/builder.go | 16 ++++++++-------- pkg/operator/builder_test.go | 2 +- test/helper/e2e/k8s/operator.go | 3 ++- test/int/clusterwide/integration_suite_test.go | 2 +- test/int/integration_suite_test.go | 4 ++-- 6 files changed, 22 insertions(+), 15 deletions(-) diff --git a/cmd/manager/main.go b/cmd/manager/main.go index af6cd8901d..77e34c7f11 100644 --- a/cmd/manager/main.go +++ b/cmd/manager/main.go @@ -53,6 +53,7 @@ const ( subobjectDeletionProtectionDefault = false subobjectDeletionProtectionMessage = "Note: sub-object deletion protection is IGNORED because it does not work deterministically." independentSyncPeriod = 15 // time in minutes + minimumIndependentSyncPeriod = 5 // time in minutes ) func main() { @@ -74,7 +75,7 @@ func main() { setupLog := logger.Named("setup").Sugar() setupLog.Info("starting with configuration", zap.Any("config", config), zap.Any("version", version.Version)) - mgr, err := operator.NewBuilder(operator.ManagerProviderFunc(ctrl.NewManager), akoScheme). + mgr, err := operator.NewBuilder(operator.ManagerProviderFunc(ctrl.NewManager), akoScheme, time.Duration(minimumIndependentSyncPeriod)*time.Minute). WithConfig(ctrl.GetConfigOrDie()). WithNamespaces(collection.Keys(config.WatchedNamespaces)...). WithLogger(logger). @@ -132,7 +133,12 @@ func parseConfiguration() Config { "when a Custom Resource is deleted") flag.BoolVar(&config.SubObjectDeletionProtection, subobjectDeletionProtectionFlag, subobjectDeletionProtectionDefault, "Defines if the operator overwrites "+ "(and consequently delete) subresources that were not previously created by the operator. "+subobjectDeletionProtectionMessage) - flag.IntVar(&config.IndependentSyncPeriod, "independent-sync-period", independentSyncPeriod, "The default time, in minutes, between reconciliations for independent custom resources. (default 15, minimum 5)") + flag.IntVar( + &config.IndependentSyncPeriod, + "independent-sync-period", + independentSyncPeriod, + fmt.Sprintf("The default time, in minutes, between reconciliations for independent custom resources. (default %d, minimum %d)", independentSyncPeriod, minimumIndependentSyncPeriod), + ) appVersion := flag.Bool("v", false, "prints application version") flag.Parse() diff --git a/pkg/operator/builder.go b/pkg/operator/builder.go index aa60777335..c9e9ea0cf3 100644 --- a/pkg/operator/builder.go +++ b/pkg/operator/builder.go @@ -42,8 +42,6 @@ const ( DefaultSyncPeriod = 3 * time.Hour DefaultIndependentSyncPeriod = 15 * time.Minute DefaultLeaderElectionID = "06d035fb.mongodb.com" - - minimumIndependentSyncPeriod = 5 * time.Minute ) type ManagerProvider interface { @@ -57,8 +55,9 @@ func (f ManagerProviderFunc) New(config *rest.Config, options manager.Options) ( } type Builder struct { - managerProvider ManagerProvider - scheme *runtime.Scheme + managerProvider ManagerProvider + scheme *runtime.Scheme + minimumIndependentSyncPeriod time.Duration config *rest.Config namespaces []string @@ -162,7 +161,7 @@ func (b *Builder) WithSkipNameValidation(skip bool) *Builder { func (b *Builder) Build(ctx context.Context) (manager.Manager, error) { mergeDefaults(b) - if b.independentSyncPeriod < minimumIndependentSyncPeriod { + if b.independentSyncPeriod < b.minimumIndependentSyncPeriod { return nil, errors.New("wrong value for independentSyncPeriod. Value should be greater or equal to 5") } @@ -325,10 +324,11 @@ func (b *Builder) Build(ctx context.Context) (manager.Manager, error) { } // NewBuilder return a new Builder to construct operator controllers -func NewBuilder(provider ManagerProvider, scheme *runtime.Scheme) *Builder { +func NewBuilder(provider ManagerProvider, scheme *runtime.Scheme, minimumIndependentSyncPeriod time.Duration) *Builder { return &Builder{ - managerProvider: provider, - scheme: scheme, + managerProvider: provider, + scheme: scheme, + minimumIndependentSyncPeriod: minimumIndependentSyncPeriod, } } diff --git a/pkg/operator/builder_test.go b/pkg/operator/builder_test.go index 59b4120ae8..16f527f735 100644 --- a/pkg/operator/builder_test.go +++ b/pkg/operator/builder_test.go @@ -149,7 +149,7 @@ func TestBuildManager(t *testing.T) { require.NoError(t, akov2.AddToScheme(akoScheme)) mgrMock := &managerMock{} - builder := NewBuilder(mgrMock, akoScheme) + builder := NewBuilder(mgrMock, akoScheme, 5*time.Minute) tt.configure(builder) // this is necessary for tests builder.WithSkipNameValidation(true) diff --git a/test/helper/e2e/k8s/operator.go b/test/helper/e2e/k8s/operator.go index 13c097fdb3..3091df109b 100644 --- a/test/helper/e2e/k8s/operator.go +++ b/test/helper/e2e/k8s/operator.go @@ -4,6 +4,7 @@ import ( "context" "os" "sync" + "time" "github.com/go-logr/zapr" . "github.com/onsi/ginkgo/v2" @@ -50,7 +51,7 @@ func BuildManager(initCfg *Config) (manager.Manager, error) { signalCancelledCtx = ctrl.SetupSignalHandler() }) - return operator.NewBuilder(operator.ManagerProviderFunc(ctrl.NewManager), akoScheme). + return operator.NewBuilder(operator.ManagerProviderFunc(ctrl.NewManager), akoScheme, 5*time.Minute). WithConfig(ctrl.GetConfigOrDie()). WithNamespaces(collection.Keys(config.WatchedNamespaces)...). WithLogger(logger). diff --git a/test/int/clusterwide/integration_suite_test.go b/test/int/clusterwide/integration_suite_test.go index b3177ccee2..4a3549cb03 100644 --- a/test/int/clusterwide/integration_suite_test.go +++ b/test/int/clusterwide/integration_suite_test.go @@ -115,7 +115,7 @@ var _ = BeforeSuite(func() { logger := ctrzap.NewRaw(ctrzap.UseDevMode(true), ctrzap.WriteTo(GinkgoWriter), ctrzap.StacktraceLevel(zap.ErrorLevel)) ctrl.SetLogger(zapr.NewLogger(logger)) - mgr, err := operator.NewBuilder(operator.ManagerProviderFunc(ctrl.NewManager), testEnv.Scheme). + mgr, err := operator.NewBuilder(operator.ManagerProviderFunc(ctrl.NewManager), testEnv.Scheme, 5*time.Minute). WithConfig(testEnv.Config). WithLogger(logger). WithAtlasDomain(atlasDomain). diff --git a/test/int/integration_suite_test.go b/test/int/integration_suite_test.go index 2a09216cab..8cb73f3635 100644 --- a/test/int/integration_suite_test.go +++ b/test/int/integration_suite_test.go @@ -188,7 +188,7 @@ func prepareControllers(deletionProtection bool) (*corev1.Namespace, context.Can // shallow copy global config managerCfg := *cfg managerCfg.UserAgent = "AKO" - mgr, err := operator.NewBuilder(operator.ManagerProviderFunc(ctrl.NewManager), scheme.Scheme). + mgr, err := operator.NewBuilder(operator.ManagerProviderFunc(ctrl.NewManager), scheme.Scheme, 5*time.Minute). WithConfig(&managerCfg). WithNamespaces(namespace.Name). WithLogger(logger). @@ -229,7 +229,7 @@ func prepareControllersWithSyncPeriod(deletionProtection bool, syncPeriod time.D // shallow copy global config managerCfg := *cfg managerCfg.UserAgent = "AKO" - mgr, err := operator.NewBuilder(operator.ManagerProviderFunc(ctrl.NewManager), scheme.Scheme). + mgr, err := operator.NewBuilder(operator.ManagerProviderFunc(ctrl.NewManager), scheme.Scheme, 5*time.Minute). WithConfig(&managerCfg). WithNamespaces(namespace.Name). WithLogger(logger).