{"record":{"id":"74dfe97bf618adbe","repo":"questdb/questdb","slug":"propertykey-qwp-udp-max-uncommitted-datagrams-pr","errorCode":null,"errorMessage":"${PropertyKey.QWP_UDP_MAX_UNCOMMITTED_DATAGRAMS.propertyPath} must be at least 1","messagePattern":"(.+?) must be at least 1","errorType":"validation","errorClass":"ServerConfigurationException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/io/questdb/PropServerConfiguration.java","lineNumber":2032,"sourceCode":"            }\n            this.qwpMaxUncommittedRows = getLong(properties, env, PropertyKey.QWP_MAX_UNCOMMITTED_ROWS, QwpConstants.DEFAULT_MAX_UNCOMMITTED_ROWS);\n            if (qwpMaxUncommittedRows < 1) {\n                throw new ServerConfigurationException(\n                        PropertyKey.QWP_MAX_UNCOMMITTED_ROWS.getPropertyPath()\n                                + \" must be at least 1\"\n                );\n            }\n            long qwpUdpCommitInterval = getMillis(properties, env, PropertyKey.QWP_UDP_COMMIT_INTERVAL, COMMIT_INTERVAL_DEFAULT);\n            if (qwpUdpCommitInterval < 1L) {\n                throw new ServerConfigurationException(\n                        PropertyKey.QWP_UDP_COMMIT_INTERVAL.getPropertyPath()\n                                + \" must be at least 1ms\"\n                );\n            }\n            this.qwpUdpCommitInterval = qwpUdpCommitInterval;\n            int qwpUdpMaxUncommittedDatagrams = getInt(properties, env, PropertyKey.QWP_UDP_MAX_UNCOMMITTED_DATAGRAMS, 1_048_576);\n            if (qwpUdpMaxUncommittedDatagrams < 1) {\n                throw new ServerConfigurationException(\n                        PropertyKey.QWP_UDP_MAX_UNCOMMITTED_DATAGRAMS.getPropertyPath()\n                                + \" must be at least 1\"\n                );\n            }\n            this.qwpUdpMaxUncommittedDatagrams = qwpUdpMaxUncommittedDatagrams;\n            this.qwpUdpMsgBufferSize = getIntSize(properties, env, PropertyKey.QWP_UDP_MSG_BUFFER_SIZE, 65_536);\n            if (qwpUdpMsgBufferSize < QwpConstants.HEADER_SIZE) {\n                throw new ServerConfigurationException(\n                        PropertyKey.QWP_UDP_MSG_BUFFER_SIZE.getPropertyPath()\n                                + \" must be at least \"\n                                + QwpConstants.HEADER_SIZE\n                                + \" bytes\"\n                );\n            }\n            this.qwpUdpMsgCount = getInt(properties, env, PropertyKey.QWP_UDP_MSG_COUNT, 10_000);\n            if (qwpUdpMsgCount < 1) {\n                throw new ServerConfigurationException(\n                        PropertyKey.QWP_UDP_MSG_COUNT.getPropertyPath()","sourceCodeStart":2014,"sourceCodeEnd":2050,"githubUrl":"https://github.com/questdb/questdb/blob/6610ab113b84528a73388b0722a38b97f9df78c2/core/src/main/java/io/questdb/PropServerConfiguration.java#L2014-L2050","documentation":"Validates qwp.udp.max.uncommitted.datagrams (PropertyKey.QWP_UDP_MAX_UNCOMMITTED_DATAGRAMS, default 1_048_576), the count-based commit trigger for the QWP UDP path: once this many datagrams are buffered, a commit fires. Values below 1 (0 or negative) are rejected at config load because the trigger would never arm.","triggerScenarios":"Explicitly setting qwp.udp.max.uncommitted.datagrams=0 or a negative number in server.conf or via QDB_ environment variables. Simple '< 1' check right after getInt().","commonSituations":"Disabling count-based commits in favor of interval commits by zeroing the knob (use a very large value instead); placeholder zeros from config templates; units confusion with the byte-size sibling keys (this one is a plain count, not a size).","solutions":["Set qwp.udp.max.uncommitted.datagrams to a positive count, e.g. 1000000","If interval commits should dominate, raise this number instead of zeroing it","Leave the key unset to inherit the 1,048,576 default"],"exampleFix":"# before\nqwp.udp.max.uncommitted.datagrams=0\n\n# after\nqwp.udp.max.uncommitted.datagrams=1000000","handlingStrategy":"validation","validationCode":"int datagrams = Integer.parseInt(firstNonBlank(props.get(\"qwp.udp.max.uncommitted.datagrams\"), \"1048576\"));\nif (datagrams < 1) {\n    throw new IllegalStateException(\"qwp.udp.max.uncommitted.datagrams must be >= 1, got \" + datagrams);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["This key is a count; its siblings are byte sizes - keep suffixes straight","Disable UDP ingestion with qwp.udp.enabled=false, never by zeroing knobs"],"tags":["config","qwp","udp","ingestion","startup"],"backgroundTag":null,"analyzedSha":"6610ab113b84528a73388b0722a38b97f9df78c2","analyzedAt":"2026-08-14T15:30:21.451Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}