diff --git a/cmd/controller/main.go b/cmd/controller/main.go index 0f2bafa7..8e6239d8 100644 --- a/cmd/controller/main.go +++ b/cmd/controller/main.go @@ -94,7 +94,7 @@ func main() { util.InitMetricsServer() // Get concurrency config for each resource kind from environment variables or use defaults - concurrencyConfig := getDefaultConcurrencyConfig() + concurrencyConfig := getConcurrencyConfig() // context for the reconciliation controller ctx, cancel := context.WithCancel(context.Background()) @@ -166,15 +166,23 @@ func getEnvInt(key string, defaultVal int) int { return defaultVal } -func getDefaultConcurrencyConfig() map[int]int { +func getConcurrencyConfig() map[int]int { concurrencyConfig := make(map[int]int) for resourceKey, resourceEnvSuffix := range controller.ResourceEnvSuffixMap { + // Skip Subscription resource until everything else is configured + if resourceKey == controller.ResourceSubscription { + continue + } defaultReconcileForResource, ok := controller.DefaultConcurrentReconciles[resourceKey] if !ok { defaultReconcileForResource = controller.DefaultReconcile } concurrencyConfig[resourceKey] = max(getEnvInt(MaxConcurrentReconcilesEnvPrefix+resourceEnvSuffix, defaultReconcileForResource), 1) } + + // Check if explicit mapping is found for Subscription, else use the current tenant configuration + concurrencyConfig[controller.ResourceSubscription] = max(getEnvInt(MaxConcurrentReconcilesEnvPrefix+controller.ResourceEnvSuffixMap[controller.ResourceSubscription], concurrencyConfig[controller.ResourceCAPTenant]), 1) + return concurrencyConfig } diff --git a/internal/controller/controller.go b/internal/controller/controller.go index e76919ab..1ae7a08f 100644 --- a/internal/controller/controller.go +++ b/internal/controller/controller.go @@ -73,6 +73,7 @@ var ( ResourceCAPTenantOperation: "CAP_TENANT_OPERATION", ResourceDomain: "DOMAIN", ResourceClusterDomain: "CLUSTER_DOMAIN", + ResourceSubscription: "SUBSCRIPTION", } ) @@ -248,10 +249,6 @@ func (c *Controller) Start(ctx context.Context) { func getConcurrencyForResource(key int) int { concurrency, ok := DefaultConcurrentReconciles[key] if !ok { - // If no explicit mapping is found for Subscription, use the tenant configuration - if key == ResourceSubscription { - return getConcurrencyForResource(ResourceCAPTenant) - } concurrency = DefaultReconcile // default concurrency } return concurrency diff --git a/website/content/en/docs/configuration/_index.md b/website/content/en/docs/configuration/_index.md index 175873aa..a59f2e6e 100644 --- a/website/content/en/docs/configuration/_index.md +++ b/website/content/en/docs/configuration/_index.md @@ -27,6 +27,7 @@ The following environment variables are used to configure CAP Operator. - `MAX_CONCURRENT_RECONCILES_CAP_TENANT_OPERATION`: Maximum number of concurrent reconciles for `CAPTenantOperation` (for example, `10`). - `MAX_CONCURRENT_RECONCILES_DOMAIN`: Maximum number of concurrent reconciles for `Domain` (for example, `1`). - `MAX_CONCURRENT_RECONCILES_CLUSTER_DOMAIN`: Maximum number of concurrent reconciles for `ClusterDomain` (for example, `1`). +- `MAX_CONCURRENT_RECONCILES_SUBSCRIPTION`: Maximum number of concurrent reconciles for `Subscription` (for example, `10`). - `CLIENT_QPS`: Maximum queries per second for the Kubernetes client-side rate limiter (for example, `25`). Defaults to `25`. - `CLIENT_BURST`: Maximum burst size for the Kubernetes client-side rate limiter (for example, `50`). Defaults to `50`. - `ROLLOUT_DELAY`: Delay window used to batch credential-rotation work triggered by BTP service secret changes. Accepts Go duration strings (for example, `30m`, `2h`). Defaults to `1h`. Values below `30s` are clamped to `30s`. diff --git a/website/content/en/docs/installation/helm/configuration.md b/website/content/en/docs/installation/helm/configuration.md index 24d6815d..fc56f2e3 100644 --- a/website/content/en/docs/installation/helm/configuration.md +++ b/website/content/en/docs/installation/helm/configuration.md @@ -51,6 +51,7 @@ description: > capTenantOperation: "10" # default: 10 domain: "1" # default: 1 clusterDomain: "1" # default: 1 + subcription: "10" # default: 10 or ``` - ### Configure controller client rate limiting diff --git a/website/includes/values.yaml b/website/includes/values.yaml index f8ab0ec5..9d732309 100644 --- a/website/includes/values.yaml +++ b/website/includes/values.yaml @@ -100,6 +100,8 @@ controller: domain: "" # -- The maximum number of concurrent reconciles (e.g. "1") for the cluster domain clusterDomain: "" + # -- The maximum number of concurrent reconciles (e.g. "10") for the subscription + subscription: "" versionMonitoring: # -- The URL of the Prometheus server from which metrics related to managed application versions can be queried prometheusAddress: ""