--- description: "Conductor application server configuration — tuning durable execution, workflow engine scalability, system task workers, and production deployment settings." --- # App Configuration The Conductor application server offers extensive customization options to optimize its operation for specific environments. These configuration parameters allow fine-tuning of various aspects of the server's behavior, performance, and integration capabilities. All of these parameters are grouped under the `conductor.app` namespace. ### Configuration | Field | Type | Description | Notes | |:--------------------------------------------|:---------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------| | stack | String | Name of the stack within which the app is running. e.g. `devint`, `testintg`, `staging`, `prod` etc. | Default is "test" | | appId | String | The ID with which the app has been registered. e.g. `conductor`, `myApp` | Default is "conductor" | | executorServiceMaxThreadCount | int | The maximum number of threads to be allocated to the executor service threadpool. e.g. `50` | Default is 50 | | workflowOffsetTimeout | Duration | The timeout duration to set when a workflow is pushed to the decider queue. Example: `30s` or `1m` | Default is 30 seconds | | maxPostponeDurationSeconds | Duration | The maximum timeout duration to set when a workflow with running task is pushed to the decider queue. Example: `30m` or `1h` | Default is 3600 seconds | | sweeperThreadCount | int | The number of threads to use for background sweeping on active workflows. Example: `8` if there are 4 processors (2x4) | Default is 2 times the number of available processors | | sweeperWorkflowPollTimeout | Duration | The timeout for polling workflows to be swept. Example: `2000ms` or `2s` | Default is 2000 milliseconds | | eventProcessorThreadCount | int | The number of threads to configure the threadpool in the event processor. Example: `4` | Default is 2 | | eventMessageIndexingEnabled | boolean | Whether to enable indexing of messages within event payloads. Example: `true` or `false` | Default is true | | eventExecutionIndexingEnabled | boolean | Whether to enable indexing of event execution results. Example: `true` or `false` | Default is true | | workflowExecutionLockEnabled | boolean | Whether to enable the workflow execution lock. Example: `true` or `false` | Default is false | | lockLeaseTime | Duration | The time for which the lock is leased. Example: `60000ms` or `1m` | Default is 60000 milliseconds | | lockTimeToTry | Duration | The time for which the thread will block in an attempt to acquire the lock. Example: `500ms` or `1s` | Default is 500 milliseconds | | activeWorkerLastPollTimeout | Duration | The time to consider if a worker is actively polling for a task. Example: `10s` | Default is 10 seconds | | taskExecutionPostponeDuration | Duration | The time for which a task execution will be postponed if rate-limited or concurrent execution limited. Example: `60s` | Default is 60 seconds | | taskIndexingEnabled | boolean | Whether to enable indexing of tasks. Example: `true` or `false` | Default is true | | taskExecLogIndexingEnabled | boolean | Whether to enable indexing of task execution logs. Example: `true` or `false` | Default is true | | asyncIndexingEnabled | boolean | Whether to enable asynchronous indexing to Elasticsearch. Example: `true` or `false` | Default is false | | systemTaskWorkerThreadCount | int | The number of threads in the threadpool for system task workers. Example: `8` if there are 4 processors (2x4) | Default is 2 times the number of available processors | | systemTaskMaxPollCount | int | The maximum number of threads to be polled within the threadpool for system task workers. Example: `8` | Default is equal to systemTaskWorkerThreadCount | | systemTaskWorkerCallbackDuration | Duration | The interval after which a system task will be checked by the system task worker for completion. Example: `30s` | Default is 30 seconds | | systemTaskWorkerPollInterval | Duration | The interval at which system task queues will be polled by system task workers. Example: `50ms` | Default is 50 milliseconds | | systemTaskWorkerExecutionNamespace | String | The namespace for the system task workers to provide instance-level isolation. Example: `namespace1`, `namespace2` | Default is an empty string | | isolatedSystemTaskWorkerThreadCount | int | The number of threads to be used within the threadpool for system task workers in each isolation group. Example: `4` | Default is 1 | | asyncUpdateShortRunningWorkflowDuration | Duration | The duration of workflow execution qualifying as short-running when async indexing to Elasticsearch is enabled. Example: `30s` | Default is 30 seconds | | asyncUpdateDelay | Duration | The delay with which short-running workflows will be updated in Elasticsearch when async indexing is enabled. Example: `60s` | Default is 60 seconds | | ownerEmailMandatory | boolean | Whether to validate the owner email field as mandatory within workflow and task definitions. Example: `true` or `false` | Default is true | | eventQueueSchedulerPollThreadCount | int | The number of threads used in the Scheduler for polling events from multiple event queues. Example: `8` if there are 4 processors (2x4) | Default is equal to the number of available processors | | eventQueuePollInterval | Duration | The time interval at which the default event queues will be polled. Example: `100ms` | Default is 100 milliseconds | | eventQueuePollCount | int | The number of messages to be polled from a default event queue in a single operation. Example: `10` | Default is 10 | | eventQueueLongPollTimeout | Duration | The timeout for the poll operation on the default event queue. Example: `1000ms` | Default is 1000 milliseconds | | workflowInputPayloadSizeThreshold | DataSize | The threshold of the workflow input payload size beyond which the payload will be stored in ExternalPayloadStorage. Example: `5120KB` | Default is 5120 kilobytes | | maxWorkflowInputPayloadSizeThreshold | DataSize | The maximum threshold of the workflow input payload size beyond which input will be rejected and the workflow marked as FAILED. Example: `10240KB` | Default is 10240 kilobytes | | workflowOutputPayloadSizeThreshold | DataSize | The threshold of the workflow output payload size beyond which the payload will be stored in ExternalPayloadStorage. Example: `5120KB` | Default is 5120 kilobytes | | maxWorkflowOutputPayloadSizeThreshold | DataSize | The maximum threshold of the workflow output payload size beyond which output will be rejected and the workflow marked as FAILED. Example: `10240KB` | Default is 10240 kilobytes | | taskInputPayloadSizeThreshold | DataSize | The threshold of the task input payload size beyond which the payload will be stored in ExternalPayloadStorage. Example: `3072KB` | Default is 3072 kilobytes | | maxTaskInputPayloadSizeThreshold | DataSize | The maximum threshold of the task input payload size beyond which the task input will be rejected and the task marked as FAILED_WITH_TERMINAL_ERROR. Example: `10240KB` | Default is 10240 kilobytes | | taskOutputPayloadSizeThreshold | DataSize | The threshold of the task output payload size beyond which the payload will be stored in ExternalPayloadStorage. Example: `3072KB` | Default is 3072 kilobytes | | maxTaskOutputPayloadSizeThreshold | DataSize | The maximum threshold of the task output payload size beyond which the task output will be rejected and the task marked as FAILED_WITH_TERMINAL_ERROR. Example: `10240KB` | Default is 10240 kilobytes | | maxWorkflowVariablesPayloadSizeThreshold | DataSize | The maximum threshold of the workflow variables payload size beyond which the task changes will be rejected and the task marked as FAILED_WITH_TERMINAL_ERROR. Example: `256KB` | Default is 256 kilobytes | | taskExecLogSizeLimit | int | The maximum size of task execution logs. Example: `10000` | Default is 10 | ### Example usage In your configuration file add the configuration as you need ```properties # Conductor App Configuration # Name of the stack within which the app is running. e.g. devint, testintg, staging, prod etc. conductor.app.stack=test # The ID with which the app has been registered. e.g. conductor, myApp conductor.app.appId=conductor # The maximum number of threads to be allocated to the executor service threadpool. e.g. 50 conductor.app.executorServiceMaxThreadCount=50 # The timeout duration to set when a workflow is pushed to the decider queue. Example: 30s or 1m conductor.app.workflowOffsetTimeout=30s # The number of threads to use for background sweeping on active workflows. Example: 8 if there are 4 processors (2x4) conductor.app.sweeperThreadCount=8 # The timeout for polling workflows to be swept. Example: 2000ms or 2s conductor.app.sweeperWorkflowPollTimeout=2000ms # The number of threads to configure the threadpool in the event processor. Example: 4 conductor.app.eventProcessorThreadCount=4 # Whether to enable indexing of messages within event payloads. Example: true or false conductor.app.eventMessageIndexingEnabled=true # Whether to enable indexing of event execution results. Example: true or false conductor.app.eventExecutionIndexingEnabled=true # Whether to enable the workflow execution lock. Example: true or false conductor.app.workflowExecutionLockEnabled=false # The time for which the lock is leased. Example: 60000ms or 1m conductor.app.lockLeaseTime=60000ms # The time for which the thread will block in an attempt to acquire the lock. Example: 500ms or 1s conductor.app.lockTimeToTry=500ms # The time to consider if a worker is actively polling for a task. Example: 10s conductor.app.activeWorkerLastPollTimeout=10s # The time for which a task execution will be postponed if rate-limited or concurrent execution limited. Example: 60s conductor.app.taskExecutionPostponeDuration=60s # Whether to enable indexing of tasks. Example: true or false conductor.app.taskIndexingEnabled=true # Whether to enable indexing of task execution logs. Example: true or false conductor.app.taskExecLogIndexingEnabled=true # Whether to enable asynchronous indexing to Elasticsearch. Example: true or false conductor.app.asyncIndexingEnabled=false # The number of threads in the threadpool for system task workers. Example: 8 if there are 4 processors (2x4) conductor.app.systemTaskWorkerThreadCount=8 # The maximum number of threads to be polled within the threadpool for system task workers. Example: 8 conductor.app.systemTaskMaxPollCount=8 # The interval after which a system task will be checked by the system task worker for completion. Example: 30s conductor.app.systemTaskWorkerCallbackDuration=30s # The interval at which system task queues will be polled by system task workers. Example: 50ms conductor.app.systemTaskWorkerPollInterval=50ms # The namespace for the system task workers to provide instance-level isolation. Example: namespace1, namespace2 conductor.app.systemTaskWorkerExecutionNamespace= # The number of threads to be used within the threadpool for system task workers in each isolation group. Example: 4 conductor.app.isolatedSystemTaskWorkerThreadCount=4 # The duration of workflow execution qualifying as short-running when async indexing to Elasticsearch is enabled. Example: 30s conductor.app.asyncUpdateShortRunningWorkflowDuration=30s # The delay with which short-running workflows will be updated in Elasticsearch when async indexing is enabled. Example: 60s conductor.app.asyncUpdateDelay=60s # Whether to validate the owner email field as mandatory within workflow and task definitions. Example: true or false conductor.app.ownerEmailMandatory=true # The number of threads used in the Scheduler for polling events from multiple event queues. Example: 8 if there are 4 processors (2x4) conductor.app.eventQueueSchedulerPollThreadCount=8 # The time interval at which the default event queues will be polled. Example: 100ms conductor.app.eventQueuePollInterval=100ms # The number of messages to be polled from a default event queue in a single operation. Example: 10 conductor.app.eventQueuePollCount=10 # The timeout for the poll operation on the default event queue. Example: 1000ms conductor.app.eventQueueLongPollTimeout=1000ms # The threshold of the workflow input payload size beyond which the payload will be stored in ExternalPayloadStorage. Example: 5120KB conductor.app.workflowInputPayloadSizeThreshold=5120KB # The maximum threshold of the workflow input payload size beyond which input will be rejected and the workflow marked as FAILED. Example: 10240KB conductor.app.maxWorkflowInputPayloadSizeThreshold=10240KB # The threshold of the workflow output payload size beyond which the payload will be stored in ExternalPayloadStorage. Example: 5120KB conductor.app.workflowOutputPayloadSizeThreshold=5120KB # The maximum threshold of the workflow output payload size beyond which output will be rejected and the workflow marked as FAILED. Example: 10240KB conductor.app.maxWorkflowOutputPayloadSizeThreshold=10240KB # The threshold of the task input payload size beyond which the payload will be stored in ExternalPayloadStorage. Example: 3072KB conductor.app.taskInputPayloadSizeThreshold=3072KB # The maximum threshold of the task input payload size beyond which the task input will be rejected and the task marked as FAILED_WITH_TERMINAL_ERROR. Example: 10240KB conductor.app.maxTaskInputPayloadSizeThreshold=10240KB # The threshold of the task output payload size beyond which the payload will be stored in ExternalPayloadStorage. Example: 3072KB conductor.app.taskOutputPayloadSizeThreshold=3072KB # The maximum threshold of the task output payload size beyond which the task output will be rejected and the task marked as FAILED_WITH_TERMINAL_ERROR. Example: 10240KB conductor.app.maxTaskOutputPayloadSizeThreshold=10240KB # The maximum threshold of the workflow variables payload size beyond which the task changes will be rejected and the task marked as FAILED_WITH_TERMINAL_ERROR. Example: 256KB conductor.app.maxWorkflowVariablesPayloadSizeThreshold=256KB # The maximum size of task execution logs. Example: 10000 conductor.app.taskExecLogSizeLimit=10000 ```