> ## Documentation Index
> Fetch the complete documentation index at: https://docs.e6data.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Controller

> controller

ReferenceApplies to: Unified engine deployments

`[controller]`

## Settings

### `max_planning_depth`

Limits how deeply the controller may recurse while planning work.

* **Default:** `128`
* **Type:** integer; positive

> **Example**
>
> `128` prevents planning from expanding through more than 128 nested levels.

### `max_planning_nodes`

Limits how many nodes the controller may handle while planning one workload or query.

* **Default:** `100000`
* **Type:** integer; positive

> **Example**
>
> `100000` bounds planning work for a complex query. It is separate from the count of rows the query reads.

### `source_discovery_limit`

Limits how many source changes one discovery request may return to the controller.

* **Default:** `100`
* **Type:** integer; positive

> **Example**
>
> `100` asks a source enumerator for at most 100 changes at once. Additional changes can be discovered in later requests.

### `max_source_splits`

Limits how many separate source pieces a planned read may contain.

* **Default:** `100000`
* **Type:** integer; positive

> **Example**
>
> A file scan with 200000 pieces cannot be admitted under a limit of `100000`, even if the individual files are small.

### `max_result_schema_bytes`

Limits the size of a task result’s saved column schema.

* **Default:** `8388608`
* **Type:** integer (bytes); positive

> **Example**
>
> `8388608` allows up to 8 MiB describing column names and types. It does not include the result rows themselves.

### `catalog_page_size`

Sets how many catalog entries the controller asks for in each listing request.

* **Default:** `100`
* **Type:** integer; positive

> **Example**
>
> `100` lists a catalog in pages of up to 100 entries instead of trying to load every entry in one response.

### `max_catalog_result_rows`

Limits how many rows catalog-backed SQL metadata queries may return.

* **Default:** `10000`
* **Type:** integer; positive

> **Example**
>
> `10000` bounds the rows returned by an engine catalog listing. This is separate from a query scanning rows in a data table.

### `max_catalog_result_bytes`

Limits the bytes returned by catalog-backed SQL metadata queries.

* **Default:** `67108864`
* **Type:** integer (bytes); positive

> **Example**
>
> `67108864` gives that metadata result a 64 MiB budget. The row-count limit applies at the same time.

### `retry_delay`

Sets how long the controller waits before checking work that needs another attempt.

* **Default:** `1 s`
* **Type:** duration

> **Example**
>
> `{ secs = 1, nanos = 0 }` waits one second between checks. It does not automatically repeat an unconfirmed table write.

## Source I/O

### `source_io_limits.max_batch_rows`

Limits how many rows one connector read returns at once.

* **Default:** `65536`
* **Type:** integer; positive

> **Example**
>
> `65536` caps a connector batch at 65536 rows. A full scan can still read many batches.

### `source_io_limits.max_buffered_bytes`

Limits how many bytes this component keeps in its data buffer.

* **Default:** `33554432`
* **Type:** integer (bytes); positive

> **Example**
>
> `33554432` gives the buffer 32 MiB. This is one component’s buffer budget, not the whole worker’s memory limit.

### `source_io_limits.max_concurrent_requests`

Limits how many data-storage requests this component may make at once.

* **Default:** `4`
* **Type:** integer; positive

> **Example**
>
> `4` allows four simultaneous I/O requests. Raising it can improve throughput but increases pressure on storage and memory.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.