apache/druid · error · IOException
Failed to parser GET lookups response from
Error message
Failed to parser GET lookups response from [%s]. response [%s].
What it means
getLookupStateForNode() throws this IOException when a GET of a node's current lookup state returns 2xx but the response body cannot be parsed due to an IOException during body read. The coordinator needs this response to compare actual vs. desired lookup state and decide on updates.
Solutions
- Retry the GET — the management loop will re-sync state on the next pass
- Check lookup node logs and GC/health; an overloaded node may be dropping streams
- Inspect intermediary proxies for response truncation or timeouts
- Increase HTTP read timeouts in the coordinator's HttpClientConfig if responses are large
Defensive patterns
Strategy: retry
Try / catch
try {
state = coordinator.getLookupStateForNode(host);
} catch (IOException e) {
if (e.getMessage().startsWith("Failed to parser GET lookups response")) {
// transient: retry or fall back to last-known state
}
} Prevention
- Cache last-known-good lookup state to fall back on transient read failures
- Increase HTTP read timeouts for large lookup states
- Monitor node load; overloaded nodes truncate streamed responses
- Schedule lookup syncs outside peak load windows
When it happens
Trigger: GET to the lookup node's /lookup lookups endpoint succeeds at the status level but the body stream throws IOException mid-read — connection reset, truncated chunked response, or socket timeout while reading.
Common situations: Overloaded lookup nodes closing connections during large state responses, proxies timing out long-running GETs, transient network failures between coordinator and historical/lookup nodes.
Understand the failure class
Background: 'Something went wrong' / 'Request failed (500)' / 'HTTP error! status: 404' — what failed HTTP requests actually mean and how to find the real cause — this error's family across 28 libraries.
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
Related errors
- Error reading response
- Error reading response from GET on url
- Failed to parse update response from
- Action [ ] failed for worker [ ] with status ( )
- An external HTTP table with a URI must also provide the…
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/069948078fbb5ecc.
Report an issue: GitHub.
Appendix: source
Thrown at server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java:869
lookupCoordinatorManagerConfig.getHostTimeout()
).get()) {
if (returnCode.get() == HttpURLConnection.HTTP_OK) {
try {
final LookupsState<LookupExtractorFactoryMapContainer> response = smileMapper.readValue(
result,
LOOKUPS_STATE_TYPE_REFERENCE
);
LOG.debug(
"Get on [%s], Status: [%s] reason: [%s], Response [%s].",
url,
returnCode.get(),
reasonString.get(),
response
);
return response;
}
catch (IOException ex) {
throw new IOE(ex, "Failed to parser GET lookups response from [%s]. response [%s].", url, result);
}
} else {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
StreamUtils.copyAndClose(result, baos);
}
catch (IOException ex) {
LOG.warn(ex, "Error reading response from GET on url [%s]", url);
}
throw new IOE(
"GET request failed to [%s] : [%d] : [%s] Response: [%s]",
url,
returnCode.get(),
reasonString.get(),
StringUtils.fromUtf8(baos.toByteArray())
);
}View on GitHub (pinned to 9b90983fd2)