Skip to content

Commit e25be4d

Browse files
authored
Merge pull request #812 from Danil-Grigorev/config-map-cache-hash
🌱 Pass global concurrency number to manager
2 parents 99b8bf9 + 29b2cec commit e25be4d

File tree

6 files changed

+66
-11
lines changed

6 files changed

+66
-11
lines changed

cmd/main.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,10 @@ import (
4040
ctrl "sigs.k8s.io/controller-runtime"
4141
"sigs.k8s.io/controller-runtime/pkg/cache"
4242
"sigs.k8s.io/controller-runtime/pkg/client"
43+
"sigs.k8s.io/controller-runtime/pkg/config"
4344
"sigs.k8s.io/controller-runtime/pkg/controller"
4445
"sigs.k8s.io/controller-runtime/pkg/healthz"
46+
4547
ctrlwebhook "sigs.k8s.io/controller-runtime/pkg/webhook"
4648

4749
operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha2"
@@ -63,6 +65,7 @@ var (
6365
profilerAddress string
6466
enableContentionProfiling bool
6567
concurrencyNumber int
68+
managerConcurrency int
6669
syncPeriod time.Duration
6770
webhookPort int
6871
webhookCertDir string
@@ -113,6 +116,9 @@ func InitFlags(fs *pflag.FlagSet) {
113116
fs.IntVar(&concurrencyNumber, "concurrency", 1,
114117
"Number of core resources to process simultaneously")
115118

119+
fs.IntVar(&managerConcurrency, "manager-concurrency", 10,
120+
"Number of concurrent reconciles to process simultaneously across all controllers")
121+
116122
fs.DurationVar(&syncPeriod, "sync-period", 10*time.Minute,
117123
"The minimum interval at which watched resources are reconciled (e.g. 15m)")
118124

@@ -174,6 +180,9 @@ func main() {
174180
},
175181
},
176182
},
183+
Controller: config.Controller{
184+
MaxConcurrentReconciles: managerConcurrency,
185+
},
177186
WebhookServer: ctrlwebhook.NewServer(
178187
ctrlwebhook.Options{
179188
Port: webhookPort,

config/manager/manager.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ spec:
3434
resources:
3535
limits:
3636
cpu: 100m
37-
memory: 150Mi
37+
memory: 300Mi
3838
requests:
3939
cpu: 100m
4040
memory: 100Mi

hack/charts/cluster-api-operator/values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ resources:
5454
manager:
5555
limits:
5656
cpu: 100m
57-
memory: 150Mi
57+
memory: 300Mi
5858
requests:
5959
cpu: 100m
6060
memory: 100Mi

internal/controller/phases.go

Lines changed: 52 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,35 @@ func newPhaseReconciler(r GenericProviderReconciler, provider genericprovider.Ge
108108
}
109109
}
110110

111+
type ConfigMapRepositorySettings struct {
112+
repository.Repository
113+
additionalManifests string
114+
skipComponents bool
115+
namespace string
116+
}
117+
118+
type ConfigMapRepositoryOption interface {
119+
ApplyToConfigMapRepository(*ConfigMapRepositorySettings)
120+
}
121+
122+
type WithAdditionalManifests string
123+
124+
func (w WithAdditionalManifests) ApplyToConfigMapRepository(settings *ConfigMapRepositorySettings) {
125+
settings.additionalManifests = string(w)
126+
}
127+
128+
type SkipComponents struct{}
129+
130+
func (s SkipComponents) ApplyToConfigMapRepository(settings *ConfigMapRepositorySettings) {
131+
settings.skipComponents = true
132+
}
133+
134+
type InNamespace string
135+
136+
func (i InNamespace) ApplyToConfigMapRepository(settings *ConfigMapRepositorySettings) {
137+
settings.namespace = string(i)
138+
}
139+
111140
// preflightChecks a wrapper around the preflight checks.
112141
func (p *phaseReconciler) preflightChecks(ctx context.Context) (reconcile.Result, error) {
113142
return reconcile.Result{}, preflightChecks(ctx, p.ctrlClient, p.provider, p.providerList)
@@ -199,7 +228,7 @@ func (p *phaseReconciler) load(ctx context.Context) (reconcile.Result, error) {
199228
return reconcile.Result{}, wrapPhaseError(err, "failed to load additional manifests", operatorv1.ProviderInstalledCondition)
200229
}
201230

202-
p.repo, err = p.configmapRepository(ctx, labelSelector, p.provider.GetNamespace(), additionalManifests)
231+
p.repo, err = p.configmapRepository(ctx, labelSelector, InNamespace(p.provider.GetNamespace()), WithAdditionalManifests(additionalManifests))
203232
if err != nil {
204233
return reconcile.Result{}, wrapPhaseError(err, "failed to load the repository", operatorv1.ProviderInstalledCondition)
205234
}
@@ -299,18 +328,26 @@ func (p *phaseReconciler) secretReader(ctx context.Context, providers ...configc
299328

300329
// configmapRepository use clusterctl NewMemoryRepository structure to store the manifests
301330
// and metadata from a given configmap.
302-
func (p *phaseReconciler) configmapRepository(ctx context.Context, labelSelector *metav1.LabelSelector, namespace, additionalManifests string) (repository.Repository, error) {
331+
func (p *phaseReconciler) configmapRepository(ctx context.Context, labelSelector *metav1.LabelSelector, options ...ConfigMapRepositoryOption) (repository.Repository, error) {
303332
mr := repository.NewMemoryRepository()
304333
mr.WithPaths("", "components.yaml")
305334

335+
settings := &ConfigMapRepositorySettings{
336+
Repository: mr,
337+
}
338+
339+
for _, option := range options {
340+
option.ApplyToConfigMapRepository(settings)
341+
}
342+
306343
cml := &corev1.ConfigMapList{}
307344

308345
selector, err := metav1.LabelSelectorAsSelector(labelSelector)
309346
if err != nil {
310347
return nil, err
311348
}
312349

313-
if err = p.ctrlClient.List(ctx, cml, &client.ListOptions{LabelSelector: selector, Namespace: namespace}); err != nil {
350+
if err = p.ctrlClient.List(ctx, cml, &client.ListOptions{LabelSelector: selector, Namespace: settings.namespace}); err != nil {
314351
return nil, err
315352
}
316353

@@ -341,13 +378,22 @@ func (p *phaseReconciler) configmapRepository(ctx context.Context, labelSelector
341378

342379
mr.WithFile(version, metadataFile, []byte(metadata))
343380

381+
// Exclude components from the repository if only metadata is needed.
382+
// Used for provider upgrades, when compatibility with other providers is
383+
// established based on the metadata only.
384+
if settings.skipComponents {
385+
mr.WithFile(version, mr.ComponentsPath(), []byte{})
386+
387+
continue
388+
}
389+
344390
components, err := getComponentsData(cm)
345391
if err != nil {
346392
return nil, err
347393
}
348394

349-
if additionalManifests != "" {
350-
components = components + "\n---\n" + additionalManifests
395+
if settings.additionalManifests != "" {
396+
components = components + "\n---\n" + settings.additionalManifests
351397
}
352398

353399
mr.WithFile(version, mr.ComponentsPath(), []byte(components))
@@ -649,7 +695,7 @@ func (p *phaseReconciler) repositoryProxy(ctx context.Context, provider configcl
649695
return nil, wrapPhaseError(fmt.Errorf("config map not found"), "config map repository required for validation does not exist yet for provider "+provider.String(), operatorv1.ProviderUpgradedCondition)
650696
}
651697

652-
repo, err := p.configmapRepository(ctx, providerLabelSelector(genericProvider), genericProvider.GetNamespace(), "")
698+
repo, err := p.configmapRepository(ctx, providerLabelSelector(genericProvider), InNamespace(genericProvider.GetNamespace()), SkipComponents{})
653699
if err != nil {
654700
provider := client.ObjectKeyFromObject(genericProvider)
655701
return nil, wrapPhaseError(err, "failed to load the repository for provider "+provider.String(), operatorv1.ProviderUpgradedCondition)

internal/controller/phases_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ metadata:
389389
g.Expect(fakeclient.Create(ctx, &tt.configMaps[i])).To(Succeed())
390390
}
391391

392-
got, err := p.configmapRepository(context.TODO(), p.provider.GetSpec().FetchConfig.Selector, "ns1", tt.additionalManifests)
392+
got, err := p.configmapRepository(context.TODO(), p.provider.GetSpec().FetchConfig.Selector, InNamespace("ns1"), WithAdditionalManifests(tt.additionalManifests))
393393

394394
if len(tt.wantErr) > 0 {
395395
g.Expect(err).Should(MatchError(tt.wantErr))
@@ -596,7 +596,7 @@ releaseSeries:
596596
MatchLabels: map[string]string{
597597
operatorManagedLabel: "true",
598598
},
599-
}, "default", "")
599+
}, InNamespace("default"))
600600
g.Expect(err).To(Succeed())
601601
}
602602

test/e2e/resources/full-chart-install.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22096,7 +22096,7 @@ spec:
2209622096
resources:
2209722097
limits:
2209822098
cpu: 100m
22099-
memory: 150Mi
22099+
memory: 300Mi
2210022100
requests:
2210122101
cpu: 100m
2210222102
memory: 100Mi

0 commit comments

Comments
 (0)