{"record":{"id":"faa0cd7c2f8cf8b2","repo":"apache/seatunnel","slug":"host-is-null","errorCode":"HOST_IS_NULL","errorMessage":"None of the host in `load_url` could be connected.","messagePattern":"None of the host in `load_url` could be connected\\.","errorType":"error_code","errorClass":"StarRocksConnectorException","httpStatus":null,"severity":"critical","filePath":"seatunnel-connectors-v2/connector-starrocks/src/main/java/org/apache/seatunnel/connectors/seatunnel/starrocks/client/StarRocksStreamLoadVisitor.java","lineNumber":103,"sourceCode":"     * Creates a visitor with explicit HTTP transport and label-state timeout for deterministic\n     * boundary tests.\n     */\n    StarRocksStreamLoadVisitor(\n            SinkConfig sinkConfig,\n            TableSchema tableSchema,\n            HttpHelper httpHelper,\n            long labelStateTimeoutMs) {\n        this.sinkConfig = sinkConfig;\n        this.tableSchema = tableSchema;\n        this.httpHelper = httpHelper;\n        this.labelStateTimeoutMs = Math.max(1, labelStateTimeoutMs);\n        checkBatchMaxBytes(sinkConfig.getBatchMaxBytes(), sinkConfig.getBatchMaxSize());\n    }\n\n    public Boolean doStreamLoad(StarRocksFlushTuple flushData) throws IOException {\n        String host = getAvailableHost();\n        if (null == host) {\n            throw new StarRocksConnectorException(\n                    StarRocksConnectorErrorCode.HOST_IS_NULL,\n                    \"None of the host in `load_url` could be connected.\");\n        }\n        String loadUrl =\n                new StringBuilder(host)\n                        .append(\"/api/\")\n                        .append(sinkConfig.getDatabase())\n                        .append(\"/\")\n                        .append(sinkConfig.getTable())\n                        .append(\"/_stream_load\")\n                        .toString();\n        if (LOG.isDebugEnabled()) {\n            LOG.debug(\n                    String.format(\n                            \"Start to join batch data: rows[%d] bytes[%d] label[%s].\",\n                            flushData.getRows().size(),\n                            flushData.getBytes(),\n                            flushData.getLabel()));","sourceCodeStart":85,"sourceCodeEnd":121,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-starrocks/src/main/java/org/apache/seatunnel/connectors/seatunnel/starrocks/client/StarRocksStreamLoadVisitor.java#L85-L121","documentation":"Thrown by StarRocksStreamLoadVisitor.doStreamLoad() when getAvailableHost() returns null, i.e., none of the hosts configured in `load_url` respond. No Stream Load request is even attempted; the flush cannot proceed because there is no reachable StarRocks FE node.","triggerScenarios":"getAvailableHost() probes each host in sinkConfig.getLoadUrl() and all fail to connect (connection refused/timeout); load_url is empty or malformed so no candidate host can be produced.","commonSituations":"Wrong http port (default 8030) in load_url; StarRocks FE down; firewall/security group blocking the SeaTunnel worker; DNS name unresolvable; load_url missing entirely from config.","solutions":["Verify load_url lists reachable FE http (not query) ports, e.g. [\"fe1:8030\",\"fe2:8030\"].","Test connectivity from the SeaTunnel worker: curl http://<fe-host>:8030/api/health.","Check FE process status and restart if stopped; confirm firewall rules allow worker→FE traffic.","Add multiple FE hosts to load_url so a single-node failure doesn't blank the candidate list."],"exampleFix":"// before\nload_url = [\"fe-host:9020\"]\n// after: correct http port + multiple FEs\nload_url = [\"fe1:8030\", \"fe2:8030\"]","handlingStrategy":"validation","validationCode":"// validate load_url before submitting the job\nfor host in load_url:\n    assert telnet(host, 8030) succeeds\n// e.g. curl -sf http://fe1:8030/api/bootstrap","typeGuard":"boolean feReachable(List<String> loadUrls) {\n    return loadUrls.stream().anyMatch(u -> pingHttp(u, 3000));\n}","tryCatchPattern":"try {\n    sink.write(rows);\n} catch (StarRocksConnectorException e) {\n    if (e.getErrorCode() == StarRocksConnectorErrorCode.HOST_IS_NULL) {\n        // fail fast: fix load_url/FE before replaying\n    }\n}","preventionTips":["List multiple FE hosts in load_url for redundancy","Use the FE http port (default 8030), not the query port (9030)","Smoke-test connectivity from the SeaTunnel worker host before launch"],"tags":["starrocks","network","connectivity","load-url"],"backgroundTag":"connection-refused","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}