diff --git a/cmd/workflow/simulate/limits.go b/cmd/workflow/simulate/limits.go index 4feffa84..d1dbdb71 100644 --- a/cmd/workflow/simulate/limits.go +++ b/cmd/workflow/simulate/limits.go @@ -4,9 +4,13 @@ import ( _ "embed" "encoding/json" "fmt" + "math" "os" "strings" + "time" + "github.com/smartcontractkit/chainlink-common/pkg/config" + "github.com/smartcontractkit/chainlink-common/pkg/settings" "github.com/smartcontractkit/chainlink-common/pkg/settings/cresettings" ) @@ -93,6 +97,70 @@ func applyEngineLimits(cfg *cresettings.Workflows, limits *SimulationLimits) { // NOTE: ChainAllowed is NOT overridden — simulation keeps allow-all } +// disableEngineLimits sets all engine limit fields to very high values, +// effectively disabling limit enforcement when --limits none is used. +func disableEngineLimits(cfg *cresettings.Workflows) { + maxInt := settings.Setting[int]{DefaultValue: math.MaxInt32} + maxSize := settings.Setting[config.Size]{DefaultValue: math.MaxInt32} + maxDuration := settings.Setting[time.Duration]{DefaultValue: 24 * time.Hour} + + // Execution limits + cfg.ExecutionTimeout = maxDuration + cfg.ExecutionResponseLimit = maxSize + cfg.ExecutionConcurrencyLimit = maxInt + + // Capability limits + cfg.CapabilityConcurrencyLimit = maxInt + cfg.CapabilityCallTimeout = maxDuration + cfg.SecretsConcurrencyLimit = maxInt + + // Trigger limits + cfg.TriggerRegistrationsTimeout = maxDuration + cfg.TriggerEventQueueLimit = maxInt + cfg.TriggerEventQueueTimeout = maxDuration + cfg.TriggerSubscriptionTimeout = maxDuration + cfg.TriggerSubscriptionLimit = maxInt + + // WASM limits + cfg.WASMMemoryLimit = maxSize + cfg.WASMBinarySizeLimit = maxSize + cfg.WASMCompressedBinarySizeLimit = maxSize + cfg.WASMConfigSizeLimit = maxSize + cfg.WASMSecretsSizeLimit = maxSize + + // Log limits + cfg.LogLineLimit = maxSize + cfg.LogEventLimit = maxInt + + // HTTPAction limits + cfg.HTTPAction.CallLimit = maxInt + cfg.HTTPAction.CacheAgeLimit = maxDuration + cfg.HTTPAction.ConnectionTimeout = maxDuration + cfg.HTTPAction.RequestSizeLimit = maxSize + cfg.HTTPAction.ResponseSizeLimit = maxSize + + // ConfidentialHTTP limits + cfg.ConfidentialHTTP.CallLimit = maxInt + cfg.ConfidentialHTTP.ConnectionTimeout = maxDuration + cfg.ConfidentialHTTP.RequestSizeLimit = maxSize + cfg.ConfidentialHTTP.ResponseSizeLimit = maxSize + + // Consensus limits + cfg.Consensus.CallLimit = maxInt + cfg.Consensus.ObservationSizeLimit = maxSize + + // ChainWrite limits + cfg.ChainWrite.TargetsLimit = maxInt + cfg.ChainWrite.ReportSizeLimit = maxSize + + // ChainRead limits + cfg.ChainRead.CallLimit = maxInt + cfg.ChainRead.PayloadSizeLimit = maxSize + + // Secrets limits + cfg.Secrets.CallLimit = maxInt +} + // HTTPRequestSizeLimit returns the HTTP action request size limit in bytes. func (l *SimulationLimits) HTTPRequestSizeLimit() int { return int(l.Workflows.HTTPAction.RequestSizeLimit.DefaultValue) diff --git a/cmd/workflow/simulate/simulate.go b/cmd/workflow/simulate/simulate.go index b4803f35..cdd372b6 100644 --- a/cmd/workflow/simulate/simulate.go +++ b/cmd/workflow/simulate/simulate.go @@ -684,6 +684,8 @@ func run( // Apply simulation limits to engine-level settings when --limits is set if simLimits != nil { applyEngineLimits(cfg, simLimits) + } else if inputs.LimitsPath == "none" { + disableEngineLimits(cfg) } // Always allow all chains in simulation, overriding any chain restrictions from limits cfg.ChainAllowed = commonsettings.PerChainSelector(