diff --git a/docs/environment-variables.md b/docs/environment-variables.md index 8237692361b3..99b57499a741 100644 --- a/docs/environment-variables.md +++ b/docs/environment-variables.md @@ -54,6 +54,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 as a basis for estimating resource usage on a new workflow. | 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 984e76d98cdc..1b6e7b4041e6 100644 --- a/workflow/controller/estimation/estimator_factory.go +++ b/workflow/controller/estimation/estimator_factory.go @@ -10,6 +10,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/server/utils" + "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" @@ -29,12 +30,21 @@ 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,