questdb/questdb · error · ServerConfigurationException
${PropertyKey.QWP_MAX_UNCOMMITTED_ROWS.propertyPath} must be
Error message
${PropertyKey.QWP_MAX_UNCOMMITTED_ROWS.propertyPath} must be at least 1 What it means
Validates qwp.max.uncommitted.rows (PropertyKey.QWP_MAX_UNCOMMITTED_ROWS, default QwpConstants.DEFAULT_MAX_UNCOMMITTED_ROWS), the global uncommitted-row budget for QWP ingestion. Values below 1 (0 or negative) are rejected: a non-positive commit threshold would never trigger commits and could grow memory without bound, so the server refuses to start.
Source
Thrown at core/src/main/java/io/questdb/PropServerConfiguration.java:2017
}
this.qwpMaxRowsPerTable = getInt(properties, env, PropertyKey.QWP_MAX_ROWS_PER_TABLE, QwpConstants.DEFAULT_MAX_ROWS_PER_TABLE);
if (qwpMaxRowsPerTable < 1 || qwpMaxRowsPerTable > QwpConstants.DEFAULT_MAX_ROWS_PER_TABLE) {
throw new ServerConfigurationException(
PropertyKey.QWP_MAX_ROWS_PER_TABLE.getPropertyPath()
+ " must be between 1 and "
+ QwpConstants.DEFAULT_MAX_ROWS_PER_TABLE
);
}
this.qwpMaxTablesPerConnection = getInt(properties, env, PropertyKey.QWP_MAX_TABLES_PER_CONNECTION, QwpConstants.DEFAULT_MAX_TABLES_PER_CONNECTION);
if (qwpMaxTablesPerConnection < 1) {
throw new ServerConfigurationException(
PropertyKey.QWP_MAX_TABLES_PER_CONNECTION.getPropertyPath()
+ " must be at least 1"
);
}
this.qwpMaxUncommittedRows = getLong(properties, env, PropertyKey.QWP_MAX_UNCOMMITTED_ROWS, QwpConstants.DEFAULT_MAX_UNCOMMITTED_ROWS);
if (qwpMaxUncommittedRows < 1) {
throw new ServerConfigurationException(
PropertyKey.QWP_MAX_UNCOMMITTED_ROWS.getPropertyPath()
+ " must be at least 1"
);
}
long qwpUdpCommitInterval = getMillis(properties, env, PropertyKey.QWP_UDP_COMMIT_INTERVAL, COMMIT_INTERVAL_DEFAULT);
if (qwpUdpCommitInterval < 1L) {
throw new ServerConfigurationException(
PropertyKey.QWP_UDP_COMMIT_INTERVAL.getPropertyPath()
+ " must be at least 1ms"
);
}
this.qwpUdpCommitInterval = qwpUdpCommitInterval;
int qwpUdpMaxUncommittedDatagrams = getInt(properties, env, PropertyKey.QWP_UDP_MAX_UNCOMMITTED_DATAGRAMS, 1_048_576);
if (qwpUdpMaxUncommittedDatagrams < 1) {
throw new ServerConfigurationException(
PropertyKey.QWP_UDP_MAX_UNCOMMITTED_DATAGRAMS.getPropertyPath()
+ " must be at least 1"
);View on GitHub (pinned to 6610ab113b)
Solutions
- Set qwp.max.uncommitted.rows to a positive value, e.g. 500000
- If you want commits driven mainly by the interval, set a large row budget rather than 0
- Leave the key unset for the default
Example fix
# before qwp.max.uncommitted.rows=0 # after qwp.max.uncommitted.rows=500000
Defensive patterns
Strategy: validation
Validate before calling
long rows = Long.parseLong(firstNonBlank(props.get("qwp.max.uncommitted.rows"), String.valueOf(DEFAULT)));
if (rows < 1) {
throw new IllegalStateException("qwp.max.uncommitted.rows must be >= 1, got " + rows);
} Prevention
- Prefer interval-driven commits by raising the row budget, not zeroing it
- Treat 0 in generated configs as a missing-value bug
When it happens
Trigger: Setting qwp.max.uncommitted.rows=0 or a negative long in server.conf / env. Read with getLong() and checked with '< 1' immediately after, before the UDP commit interval parsing that follows.
Common situations: Trying to switch to time-based-only commits by zeroing the row threshold (use a large value instead); copy-paste from an example config with a placeholder 0; environment templating emitting 0 for unset variables.
Related errors
- ${PropertyKey.QWP_UDP_COMMIT_INTERVAL.propertyPath} must be
- ${PropertyKey.QWP_MAX_ROWS_PER_TABLE.propertyPath} must be b
- ${PropertyKey.QWP_MAX_TABLES_PER_CONNECTION.propertyPath} mu
- ${PropertyKey.QWP_UDP_MAX_UNCOMMITTED_DATAGRAMS.propertyPath
- ${PropertyKey.QWP_UDP_MSG_COUNT.propertyPath} must be at lea
AI-assisted analysis of questdb/questdb@6610ab113b (2026-08-14).
Data as JSON: /api/errors/8eff07230dbe2303.
Report an issue: GitHub.