Skip to content

Commit

Permalink
parametrize minimum sync period config
Browse files Browse the repository at this point in the history
  • Loading branch information
helderjs committed Oct 11, 2024
1 parent 686d56b commit d4c07fc
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 15 deletions.
10 changes: 8 additions & 2 deletions cmd/manager/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -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).
Expand Down Expand Up @@ -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()

Expand Down
16 changes: 8 additions & 8 deletions pkg/operator/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,6 @@ const (
DefaultSyncPeriod = 3 * time.Hour
DefaultIndependentSyncPeriod = 15 * time.Minute
DefaultLeaderElectionID = "06d035fb.mongodb.com"

minimumIndependentSyncPeriod = 5 * time.Minute
)

type ManagerProvider interface {
Expand All @@ -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
Expand Down Expand Up @@ -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")
}

Expand Down Expand Up @@ -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,
}
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/operator/builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
3 changes: 2 additions & 1 deletion test/helper/e2e/k8s/operator.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"os"
"sync"
"time"

"github.com/go-logr/zapr"
. "github.com/onsi/ginkgo/v2"
Expand Down Expand Up @@ -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).
Expand Down
2 changes: 1 addition & 1 deletion test/int/clusterwide/integration_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand Down
4 changes: 2 additions & 2 deletions test/int/integration_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand Down Expand Up @@ -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).
Expand Down

0 comments on commit d4c07fc

Please sign in to comment.