{"record":{"id":"3e04caf6ca7d2893","repo":"apache/seatunnel","slug":"nodes-d-host-must-not-be-blank-in-host-port","errorCode":null,"errorMessage":"nodes[%d]: host must not be blank in 'host:port', got: %s","messagePattern":"nodes\\[(.+?)\\]: host must not be blank in 'host:port', got: (.+?)","errorType":"validation","errorClass":"OptionValidationException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-redis/src/main/java/org/apache/seatunnel/connectors/seatunnel/redis/config/RedisNodesValidator.java","lineNumber":52,"sourceCode":"                + RedisBaseOptions.MIN_PORT\n                + \", \"\n                + RedisBaseOptions.MAX_PORT\n                + \"]\";\n    }\n\n    @Override\n    public boolean evaluate(ReadonlyConfig config, List<String> value)\n            throws OptionValidationException {\n        for (int i = 0; i < value.size(); i++) {\n            String node = value.get(i);\n            if (node == null || !NODE_PATTERN.matcher(node).matches()) {\n                throw new OptionValidationException(\n                        \"nodes[%d]: must be in 'host:port' format, got: %s\", i, node);\n            }\n            int colon = node.indexOf(':');\n            String host = node.substring(0, colon);\n            if (host.trim().isEmpty()) {\n                throw new OptionValidationException(\n                        \"nodes[%d]: host must not be blank in 'host:port', got: %s\", i, node);\n            }\n            String portStr = node.substring(colon + 1);\n            int port;\n            try {\n                port = Integer.parseInt(portStr);\n            } catch (NumberFormatException e) {\n                throw new OptionValidationException(\n                        \"nodes[%d]: port '%s' is out of range [%d, %d]\",\n                        i, portStr, RedisBaseOptions.MIN_PORT, RedisBaseOptions.MAX_PORT);\n            }\n            if (port < RedisBaseOptions.MIN_PORT || port > RedisBaseOptions.MAX_PORT) {\n                throw new OptionValidationException(\n                        \"nodes[%d]: port %d is out of range [%d, %d]\",\n                        i, port, RedisBaseOptions.MIN_PORT, RedisBaseOptions.MAX_PORT);\n            }\n        }\n        return true;","sourceCodeStart":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-redis/src/main/java/org/apache/seatunnel/connectors/seatunnel/redis/config/RedisNodesValidator.java#L34-L70","documentation":"Redis connector validation of the `nodes` option failed because a node entry in 'host:port' format has a blank host part (e.g. ':6379'). The RedisNodesValidator parses each node string, splits it at the first colon, and rejects entries whose host portion is empty or whitespace-only. This fail-fast check prevents later connection failures with confusing Jedis errors.","triggerScenarios":"Calling the validator's evaluate() with a nodes list where any entry is ':6379', ' :6379', or otherwise has no text before the colon; typically caused by a typo or an empty env-variable substitution in the host portion.","commonSituations":"Users templating config with env vars like ${REDIS_HOST}:6379 where REDIS_HOST is unset, copy-paste of cluster node lists with a leading comma producing an empty host, or hand-edited config dropping the hostname.","solutions":["Set a non-blank hostname before the colon for every node entry (e.g. '127.0.0.1:6379').","If the host comes from an env var or placeholder, verify it is set and non-empty at config-render time.","Check for stray commas or whitespace in the nodes list producing an empty host segment.","Run the validation before job submission by inspecting the rendered config JSON."],"exampleFix":"// before\nnodes = [\":6379\"]\n// after\nnodes = [\"127.0.0.1:6379\"]","handlingStrategy":"validation","validationCode":"for (String node : nodes) {\n    int colon = node.indexOf(':');\n    if (colon <= 0 || node.substring(0, colon).trim().isEmpty()) {\n        throw new IllegalArgumentException(\"node host blank: \" + node);\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always specify 'host:port' with a real hostname","Validate rendered config when using env-var templating","Trim node lists to avoid empty segments from stray commas"],"tags":["redis","config-validation","host-port"],"backgroundTag":"invalid-argument-format","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}