diff --git a/docs/environment-variables.md b/docs/environment-variables.md index 66f0145724e5..0a5e1533bc4f 100644 --- a/docs/environment-variables.md +++ b/docs/environment-variables.md @@ -55,6 +55,7 @@ This document outlines environment variables that can be used to customize behav | `WORKFLOW_GC_PERIOD` | `time.Duration` | `5m` | The periodicity for GC of workflows. | | `SEMAPHORE_NOTIFY_DELAY` | `time.Duration` | `1s` | Tuning Delay when notifying semaphore waiters about availability in the semaphore | | `WATCH_CONTROLLER_SEMAPHORE_CONFIGMAPS` | `bool` | `true` | Whether to watch the Controller's ConfigMap and semaphore ConfigMaps for run-time changes. When disabled, the Controller will only read these ConfigMaps once and will have to be manually restarted to pick up new changes. | +| `SKIP_WORKFLOW_DURATION_ESTIMATION` | `bool` | `false` | Whether to lookup resource usage from prior workflows to estimate usage for new workflows. | CLI parameters of the Controller can be specified as environment variables with the `ARGO_` prefix. For example: diff --git a/workflow/controller/estimation/estimator_factory.go b/workflow/controller/estimation/estimator_factory.go index 192f2a7c2513..74e087bd9a85 100644 --- a/workflow/controller/estimation/estimator_factory.go +++ b/workflow/controller/estimation/estimator_factory.go @@ -9,6 +9,7 @@ import ( "github.com/argoproj/argo-workflows/v3/persist/sqldb" wfv1 "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1" + "github.com/argoproj/argo-workflows/v3/util/env" "github.com/argoproj/argo-workflows/v3/workflow/common" "github.com/argoproj/argo-workflows/v3/workflow/controller/indexes" "github.com/argoproj/argo-workflows/v3/workflow/hydrator" @@ -28,12 +29,19 @@ type estimatorFactory struct { var _ EstimatorFactory = &estimatorFactory{} +var ( + skipWorkflowDurationEstimation = env.LookupEnvStringOr("SKIP_WORKFLOW_DURATION_ESTIMATION", "false") +) + func NewEstimatorFactory(wfInformer cache.SharedIndexInformer, hydrator hydrator.Interface, wfArchive sqldb.WorkflowArchive) EstimatorFactory { return &estimatorFactory{wfInformer, hydrator, wfArchive} } func (f *estimatorFactory) NewEstimator(wf *wfv1.Workflow) (Estimator, error) { defaultEstimator := &estimator{wf: wf} + if skipWorkflowDurationEstimation == "true" { + return defaultEstimator, nil + } for labelName, indexName := range map[string]string{ common.LabelKeyWorkflowTemplate: indexes.WorkflowTemplateIndex, common.LabelKeyClusterWorkflowTemplate: indexes.ClusterWorkflowTemplateIndex,