{"record":{"id":"579c98911255e62b","repo":"apache/seatunnel","slug":"failed-to-get-response-from-doris-fe-http-code","errorCode":null,"errorMessage":"Failed to get response from Doris FE {}, http code is {}","messagePattern":"Failed to get response from Doris FE (.+?), http code is (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/rest/RestService.java","lineNumber":120,"sourceCode":"            try {\n                String response;\n                if (request instanceof HttpGet) {\n                    response =\n                            getConnectionGet(\n                                    request.getURI().toString(),\n                                    dorisSourceConfig.getUsername(),\n                                    dorisSourceConfig.getPassword(),\n                                    logger);\n                } else {\n                    response =\n                            getConnectionPost(\n                                    request,\n                                    dorisSourceConfig.getUsername(),\n                                    dorisSourceConfig.getPassword(),\n                                    logger);\n                }\n                if (StringUtils.isEmpty(response)) {\n                    logger.warn(\n                            \"Failed to get response from Doris FE {}, http code is {}\",\n                            request.getURI(),\n                            statusCode);\n                    continue;\n                }\n                logger.trace(\n                        \"Success get response from Doris FE: {}, response is: {}.\",\n                        request.getURI(),\n                        response);\n                // Handle the problem of inconsistent data format returned by http v1 and v2\n                Map map = OBJECT_MAPPER.readValue(response, Map.class);\n                if (map.containsKey(\"code\") && map.containsKey(\"msg\")) {\n                    Object data = map.get(\"data\");\n                    return OBJECT_MAPPER.writeValueAsString(data);\n                } else {\n                    return response;\n                }\n            } catch (IOException e) {","sourceCodeStart":102,"sourceCodeEnd":138,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/rest/RestService.java#L102-L138","documentation":"RestService.send got an HTTP response but the body string came back empty after a request to a Doris FE node (e.g. the /api/{db}/{table}/_query_plan or schema endpoint). It logs this warning with the FE URI and HTTP status code, then continues to the next FE address in the list. Repeated on all FEs it can lead to a connect failure.","triggerScenarios":"findPartitions -> send posts to an FE and receives an empty response body (emptyResponse) — often a 200 with empty payload, proxy stripping the body, or FE returning nothing under load.","commonSituations":"FE behind a misconfigured load balancer that drops response bodies; FE restarting/OOM during query; wrong fe_http_port hitting a service that returns empty replies; network middleware (API gateways) swallowing responses.","solutions":["Check the reported HTTP status code in the log to see whether the FE returned a non-2xx or an empty 200","Verify doris fe_nodes config points at correct host:fe_http_port (default 8030) and the FE is reachable via curl","Curl the same endpoint with the same credentials to compare behavior outside SeaTunnel","Inspect FE logs (fe.log/fe.warn.log) for errors at the time of the request","Remove intermediary proxies or configure them to preserve response bodies"],"exampleFix":"// before\n\"fe_nodes\" = \"fe-host:9030\"   // wrong: MySQL query port, not HTTP\n// after\n\"fe_nodes\" = \"fe-host:8030\"   // FE HTTP port","handlingStrategy":"retry","validationCode":"curl -u user:pass http://fe-host:8030/api/bootstrap  # verify FE returns a non-empty body","typeGuard":null,"tryCatchPattern":"// job-level\ntry {\n    sourceReader/enumerator init;\n} catch (Exception e) {\n    // inspect log for 'Failed to get response from Doris FE' and retry after FE check\n}","preventionTips":["Configure multiple healthy FE HTTP addresses in fe_nodes","Avoid proxies/gateways between SeaTunnel and FE that can strip response bodies","Monitor FE availability and http port health"],"tags":["doris","http","empty-response","fe","network"],"backgroundTag":"empty-response-body","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"}