{"record":{"id":"4244f1de1eb32fc7","repo":"apache/seatunnel","slug":"create-be-reader-failed","errorCode":"CREATE_BE_READER_FAILED","errorMessage":"Format of StarRocks BE address[%s] is illegal","messagePattern":"Format of StarRocks BE address\\[(.+?)\\] is illegal","errorType":"error_code","errorClass":"StarRocksConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-starrocks/src/main/java/org/apache/seatunnel/connectors/seatunnel/starrocks/client/source/StarRocksBeReadClient.java","lineNumber":66,"sourceCode":"public class StarRocksBeReadClient implements Serializable {\n    private static final String DEFAULT_CLUSTER_NAME = \"default_cluster\";\n\n    private TStarrocksExternalService.Client client;\n    private final String ip;\n    private final int port;\n    private String contextId;\n    private int readerOffset = 0;\n    private final SourceConfig sourceConfig;\n    private SeaTunnelRowType seaTunnelRowType;\n    private ArrowToSeatunnelRowReader rowBatch;\n    protected AtomicBoolean eos = new AtomicBoolean(false);\n\n    public StarRocksBeReadClient(String beNodeInfo, SourceConfig sourceConfig) {\n        this.sourceConfig = sourceConfig;\n        log.debug(\"Parse StarRocks BE address: '{}'.\", beNodeInfo);\n        String[] hostPort = beNodeInfo.split(\":\");\n        if (hostPort.length != 2) {\n            throw new StarRocksConnectorException(\n                    StarRocksConnectorErrorCode.CREATE_BE_READER_FAILED,\n                    String.format(\"Format of StarRocks BE address[%s] is illegal\", beNodeInfo));\n        }\n        this.ip = hostPort[0].trim();\n        this.port = Integer.parseInt(hostPort[1].trim());\n        TBinaryProtocol.Factory factory = new TBinaryProtocol.Factory();\n        TSocket socket =\n                new TSocket(\n                        ip,\n                        port,\n                        sourceConfig.getConnectTimeoutMs(),\n                        sourceConfig.getConnectTimeoutMs());\n        try {\n            socket.open();\n        } catch (TTransportException e) {\n            socket.close();\n            throw new StarRocksConnectorException(\n                    StarRocksConnectorErrorCode.CREATE_BE_READER_FAILED,","sourceCodeStart":48,"sourceCodeEnd":84,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-starrocks/src/main/java/org/apache/seatunnel/connectors/seatunnel/starrocks/client/source/StarRocksBeReadClient.java#L48-L84","documentation":"Thrown by the StarRocksBeReadClient constructor when the BE node address string cannot be split into exactly one host and one port by ':'. The constructor requires a `host:port` string to build the Thrift connection to the StarRocks backend.","triggerScenarios":"Constructing StarRocksBeReadClient with a beNodeInfo string like \"192.168.1.10\" (no port), \"host:9010:extra\", or an empty string; the split(\";\")-delimited node list from FE query plan yields a malformed BE address.","commonSituations":"Misconfigured `URL`/node addresses in the source config (missing port); FE returning IPv6 addresses containing multiple colons that break the naive split; trailing whitespace or semicolons in the node list producing empty segments.","solutions":["Ensure each BE address in the source config is in `host:port` form with the Thrift port (default 9060 / heartbeats port).","Check what the FE returns in the scan plan (`SHOW BACKENDS`) and confirm the address format.","For IPv6, bracket the address or upgrade the connector — the naive split cannot handle bare IPv6.","Trim stray separators (spaces, trailing semicolons) from the node URL list."],"exampleFix":"// before\nsource {\n  StarRocks {\n    nodeUrls = [\"fe-host:8030\", \"be-host\"]   // missing port\n  }\n}\n// after\nsource {\n  StarRocks {\n    nodeUrls = [\"fe-host:8030\", \"be-host:9060\"]\n  }\n}","handlingStrategy":"validation","validationCode":"// Validate each node address before job launch:\nfor addr in $NODE_URLS; do\n  [[ \"$addr\" =~ ^[^:]+:[0-9]+$ ]] || { echo \"Bad BE/FE address: $addr (need host:port)\" >&2; exit 1; }\ndone","typeGuard":null,"tryCatchPattern":"try {\n    client = new StarRocksBeReadClient(beNodeInfo, sourceConfig);\n} catch (StarRocksConnectorException e) {\n    if (e.getMessage().contains(\"is illegal\")) {\n        throw new ConfigException(\"Node address must be host:port: \" + beNodeInfo, e);\n    }\n    throw e;\n}","preventionTips":["Always include the thrift port on BE addresses (typically 9060).","Avoid bare IPv6 literals — the parser splits on ':' only.","Trim whitespace and stray separators from node URL lists.","Cross-check addresses against `SHOW BACKENDS`."],"tags":["starrocks","address-format","config","be-reader"],"backgroundTag":"invalid-url-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"}