apache/seatunnel · warning
Failed to get response from Doris FE {}, http code is {}
Error message
Failed to get response from Doris FE {}, http code is {} What it means
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.
Source
Thrown at seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/rest/RestService.java:120
try {
String response;
if (request instanceof HttpGet) {
response =
getConnectionGet(
request.getURI().toString(),
dorisSourceConfig.getUsername(),
dorisSourceConfig.getPassword(),
logger);
} else {
response =
getConnectionPost(
request,
dorisSourceConfig.getUsername(),
dorisSourceConfig.getPassword(),
logger);
}
if (StringUtils.isEmpty(response)) {
logger.warn(
"Failed to get response from Doris FE {}, http code is {}",
request.getURI(),
statusCode);
continue;
}
logger.trace(
"Success get response from Doris FE: {}, response is: {}.",
request.getURI(),
response);
// Handle the problem of inconsistent data format returned by http v1 and v2
Map map = OBJECT_MAPPER.readValue(response, Map.class);
if (map.containsKey("code") && map.containsKey("msg")) {
Object data = map.get("data");
return OBJECT_MAPPER.writeValueAsString(data);
} else {
return response;
}
} catch (IOException e) {View on GitHub (pinned to cf67b549a7)
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
Example fix
// before "fe_nodes" = "fe-host:9030" // wrong: MySQL query port, not HTTP // after "fe_nodes" = "fe-host:8030" // FE HTTP port
Defensive patterns
Strategy: retry
Validate before calling
curl -u user:pass http://fe-host:8030/api/bootstrap # verify FE returns a non-empty body
Try / catch
// job-level
try {
sourceReader/enumerator init;
} catch (Exception e) {
// inspect log for 'Failed to get response from Doris FE' and retry after FE check
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- Failed to connect to back all address
- REST_SERVICE_FAILED
- Failed to get response from Doris
- SCHEMA_CHANGE_FAILED
- STREAM_LOAD_FAILED
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/579c98911255e62b.
Report an issue: GitHub.