{"record":{"id":"2feb2117fdb8a9b3","repo":"apache/seatunnel","slug":"invalid-config-2feb21","errorCode":"INVALID_CONFIG","errorMessage":"Option 'hosts' must contain at least one graphd address.","messagePattern":"Option 'hosts' must contain at least one graphd address\\.","errorType":"error_code","errorClass":"NebulaGraphConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-nebulagraph/src/main/java/org/apache/seatunnel/connectors/seatunnel/nebulagraph/config/NebulaGraphSinkConfig.java","lineNumber":80,"sourceCode":"                requirePositive(config.get(NebulaGraphSinkOptions.BATCH_SIZE), \"batch_size\");\n        this.timeoutMillis =\n                requirePositive(\n                        config.get(NebulaGraphSinkOptions.TIMEOUT_MILLIS), \"timeout_millis\");\n        this.maxRetries =\n                requireNonNegative(config.get(NebulaGraphSinkOptions.MAX_RETRIES), \"max_retries\");\n        this.retryIntervalMillis =\n                requireNonNegative(\n                        config.get(NebulaGraphSinkOptions.RETRY_INTERVAL_MILLIS),\n                        \"retry_interval_millis\");\n    }\n\n    public static NebulaGraphSinkConfig of(ReadonlyConfig config) {\n        return new NebulaGraphSinkConfig(config);\n    }\n\n    private static List<HostAddress> parseHosts(List<String> values) {\n        if (values == null || values.isEmpty()) {\n            throw invalid(\"Option 'hosts' must contain at least one graphd address.\");\n        }\n        List<HostAddress> result = new ArrayList<>(values.size());\n        for (String value : values) {\n            result.add(parseHost(value));\n        }\n        return Collections.unmodifiableList(result);\n    }\n\n    static HostAddress parseHost(String value) {\n        String address = requireNotBlank(value, \"hosts\").trim();\n        String host;\n        String portText;\n        if (address.startsWith(\"[\")) {\n            int bracket = address.indexOf(']');\n            if (bracket <= 1\n                    || bracket + 1 >= address.length()\n                    || address.charAt(bracket + 1) != ':') {\n                throw invalid(\"Invalid graphd address '\" + value + \"'. Expected [ipv6]:port.\");","sourceCodeStart":62,"sourceCodeEnd":98,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-nebulagraph/src/main/java/org/apache/seatunnel/connectors/seatunnel/nebulagraph/config/NebulaGraphSinkConfig.java#L62-L98","documentation":"NebulaGraphSinkConfig.parseHosts throws this when the 'hosts' option is null or an empty list. The NebulaGraph sink needs at least one graphd address to establish a session. It fails fast at config parsing time instead of failing later during connection.","triggerScenarios":"NebulaGraphSinkConfig.of(config) -> parseHosts(config.get(HOSTS)) where HOSTS is not configured in the sink options, or configured as an empty list.","commonSituations":"User forgot the hosts option in the SeaTunnel config HOCON file; templating/env substitution left the list empty; copy-pasted a config for a different connector that uses a different option name.","solutions":["Add the 'hosts' option to the NebulaGraph sink config with at least one graphd address, e.g. hosts = [\"127.0.0.1:9669\"].","If using variable substitution, confirm the substituted value is non-empty at job submission time.","Verify the option name is exactly 'hosts' for this connector and not a variant like 'graph_hosts'."],"exampleFix":"// before\nNebulaGraph {\n  url = \"...\"\n}\n// after\nNebulaGraph {\n  hosts = [\"graphd0:9669\", \"graphd1:9669\"]\n  url = \"...\"\n}","handlingStrategy":"validation","validationCode":"List<String> hosts = config.get(\"hosts\");\nif (hosts == null || hosts.isEmpty()) {\n    throw new IllegalArgumentException(\"hosts must list at least one graphd address, e.g. [\\\"graphd0:9669\\\"]\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always include hosts = [\"graphd:9669\"] in the NebulaGraph sink block","Lint SeaTunnel configs in CI for required connector options","Check substituted variables are non-empty at submission time"],"tags":["nebulagraph","config","invalid-config"],"backgroundTag":"missing-required-config-field","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"}