diff --git a/config/default/manager_image_patch.yaml b/config/default/manager_image_patch.yaml index 91fc80b..10a0b4c 100644 --- a/config/default/manager_image_patch.yaml +++ b/config/default/manager_image_patch.yaml @@ -20,3 +20,5 @@ spec: secretKeyRef: name: dbrickssettings key: DatabricksToken + - name: MAX_CONCURRENT_RUN_RECONCILES + value: "1" diff --git a/controllers/run_controller.go b/controllers/run_controller.go index 19098f4..a97ed56 100644 --- a/controllers/run_controller.go +++ b/controllers/run_controller.go @@ -19,6 +19,8 @@ package controllers import ( "context" "fmt" + "os" + "strconv" "time" "github.com/go-logr/logr" @@ -31,8 +33,11 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" databricksv1alpha1 "github.com/microsoft/azure-databricks-operator/api/v1alpha1" + ctrl_controller "sigs.k8s.io/controller-runtime/pkg/controller" ) +const maxConcurrentReconcilesEnvName = "MAX_CONCURRENT_RUN_RECONCILES" + // RunReconciler reconciles a Run object type RunReconciler struct { client.Client @@ -110,5 +115,18 @@ func (r *RunReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { func (r *RunReconciler) SetupWithManager(mgr ctrl.Manager) error { return ctrl.NewControllerManagedBy(mgr). For(&databricksv1alpha1.Run{}). + WithOptions(ctrl_controller.Options{ + MaxConcurrentReconciles: getMaxConcurrentReconciles(), + }). Complete(r) } + +func getMaxConcurrentReconciles() int { + concurrentReconciles, err := strconv.Atoi(os.Getenv(maxConcurrentReconcilesEnvName)) + + if err != nil || concurrentReconciles < 1 { + return 1 + } + + return concurrentReconciles +} diff --git a/docs/deploy.md b/docs/deploy.md index 0fb98fc..7fa78d4 100644 --- a/docs/deploy.md +++ b/docs/deploy.md @@ -19,6 +19,8 @@ wget https://github.com/microsoft/azure-databricks-operator/releases/latest/down unzip release.zip ``` +> (optional) [Configure maximum number of run reconcilers](##configure-maximum-number-of-run-reconcilers) + 2. Create the `azure-databricks-operator-system` namespace: ```sh @@ -40,6 +42,16 @@ kubectl --namespace azure-databricks-operator-system \ kubectl apply -f release/config ``` +## Configure maximum number of run reconcilers + +1. Change the `MAX_CONCURRENT_RUN_RECONCILES` value in `config/default/manager_image_patch.yaml` under the `env` section with the desired number of reconcilers +```yaml + - name: MAX_CONCURRENT_RUN_RECONCILES + value: "1" +``` + +> By default `MAX_CONCURRENT_RUN_RECONCILES` is set to 1 + ## Use kustomize to customise your deployment 1. Clone the source code: