{"record":{"id":"68f88d66de02d975","repo":"apache/seatunnel","slug":"connect-to-doris-failed","errorCode":null,"errorMessage":"Connect to doris {} failed.","messagePattern":"Connect to doris (.+?) failed\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/backend/BackendClient.java","lineNumber":98,"sourceCode":"                                new TConfiguration(),\n                                routing.getHost(),\n                                routing.getPort(),\n                                socketTimeout,\n                                connectTimeout);\n                TProtocol protocol = factory.getProtocol(transport);\n                client = new TDorisExternalService.Client(protocol);\n                log.trace(\n                        \"Connect status before open transport to {} is '{}'.\",\n                        routing,\n                        isConnected);\n                if (!transport.isOpen()) {\n                    transport.open();\n                    isConnected = true;\n                    log.info(\"Success connect to {}.\", routing);\n                    break;\n                }\n            } catch (TTransportException e) {\n                log.warn(ErrorMessages.CONNECT_FAILED_MESSAGE, routing, e);\n                ex = e;\n            }\n        }\n        if (!isConnected) {\n            log.error(ErrorMessages.CONNECT_FAILED_MESSAGE, routing);\n            //            throw new ConnectedFailedException(routing.toString(), ex);\n            throw new DorisConnectorException(\n                    DorisConnectorErrorCode.BACKEND_CLIENT_FAILED, routing.toString(), ex);\n        }\n    }\n\n    private void close() {\n        log.trace(\"Connect status before close with '{}' is '{}'.\", routing, isConnected);\n        isConnected = false;\n        if ((transport != null) && transport.isOpen()) {\n            transport.close();\n            log.info(\"Closed a connection to {}.\", routing);\n        }","sourceCodeStart":80,"sourceCodeEnd":116,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/backend/BackendClient.java#L80-L116","documentation":"BackendClient.open tries to establish a Thrift TTransport connection to a Doris BE node, iterating over retries. When all attempts fail it logs this error (CONNECT_FAILED_MESSAGE with the routing) and previously logged a warn with the exception. Notably the ConnectedFailedException throw is commented out, so failure here does not throw directly — downstream scanner operations will fail instead.","triggerScenarios":"All retry attempts to open the Thrift transport to the BE httpPort/routing fail with TTransportException: BE host unreachable, wrong address, BE not running, firewall blocking the thrift port, or Kerberos/TLS transport issues.","commonSituations":"Misconfigured doris.frontend/BE addresses in the connector config; FE returns BE node that is dead; Docker/K8s network isolation; BE port (thrift internal service port, default 9060) not exposed; security settings mismatch.","solutions":["Verify the routing/BE address and port printed in the log are reachable (telnet/nc).","Check the Doris BE process status (be show backends / BE logs).","Fix network/firewall rules to allow the connector host to reach the BE thrift port.","Ensure FE-derived backends are healthy and registered (SHOW BACKENDS; Alive=true).","Re-enable or handle the ConnectedFailedException path if you own the code so failures fail fast instead of surfacing later."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// before job submission, verify BE reachability\n// nc -zv <be-host> <thrift-port>  (default 9060)\n// and in Doris: SHOW BACKENDS; ensure Alive=true for all nodes","typeGuard":null,"tryCatchPattern":"try {\n    reader.read();\n} catch (DorisConnectorException e) {\n    // caused by failed BackendClient.open; check routing addresses and BE health before retrying\n}","preventionTips":["Verify FE-provided BE addresses are reachable from SeaTunnel workers (watch NAT/Docker port mapping).","Keep BE thrift ports open in firewalls/security groups.","Monitor SHOW BACKENDS for dead nodes before running jobs.","Pin connector options to known-good BE endpoints if FE advertises unroutable hosts."],"tags":["network","thrift","doris","connectivity"],"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"}