v.22.1Improvement

Added Timeout and Execute Settings for Executable Components in Storage

Added settings command_read_timeout, command_write_timeout for StorageExecutable, StorageExecutablePool, ExecutableDictionary, ExecutablePoolDictionary, ExecutableUserDefinedFunctions. Setting command_read_timeout controls timeout for reading data from command stdout in milliseconds. Setting command_write_timeout timeout for writing data to command stdin in milliseconds. Added settings command_termination_timeout for ExecutableUserDefinedFunction, ExecutableDictionary, StorageExecutable. Added setting execute_direct for ExecutableUserDefinedFunction, by default true. Added setting execute_direct for ExecutableDictionary, ExecutablePoolDictionary, by default false. #30957 (Maksim Kita).
Added configurable timeout settings and execution mode options for external command integrations including StorageExecutable, StorageExecutablePool, ExecutableDictionary, ExecutablePoolDictionary, and ExecutableUserDefinedFunctions.

Why it matters

These new settings allow users to control read and write timeouts when interacting with external commands, improving reliability and preventing hangs due to unresponsive subprocesses. The command_termination_timeout setting enables graceful termination control, while the execute_direct setting provides flexibility in execution modes suited to the specific external integration, enhancing robustness and configurability.

How to use it

Users can enable and configure these features by setting the following parameters in their ClickHouse configuration or query settings:

- command_read_timeout: specifies the timeout in milliseconds for reading from the external command's stdout.
- command_write_timeout: specifies the timeout in milliseconds for writing to the external command's stdin.
- command_termination_timeout: defines the timeout for gracefully terminating external commands.
- execute_direct: toggles direct execution mode (defaults differ by component; true for ExecutableUserDefinedFunction, false for dictionaries).

Example configuration snippet:

command_read_timeout: 5000
command_write_timeout: 5000
command_termination_timeout: 2000
execute_direct: true