{"record":{"id":"f766abe7052ba89c","repo":"apache/druid","slug":"error-reading-response-from-get-on-url-s","errorCode":null,"errorMessage":"Error reading response from GET on url [%s]","messagePattern":"Error reading response from GET on url \\[(.+?)\\]","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java","lineNumber":877,"sourceCode":"            LOG.debug(\n                \"Get on [%s], Status: [%s] reason: [%s], Response [%s].\",\n                url,\n                returnCode.get(),\n                reasonString.get(),\n                response\n            );\n            return response;\n          }\n          catch (IOException ex) {\n            throw new IOE(ex, \"Failed to parser GET lookups response from [%s]. response [%s].\", url, result);\n          }\n        } else {\n          final ByteArrayOutputStream baos = new ByteArrayOutputStream();\n          try {\n            StreamUtils.copyAndClose(result, baos);\n          }\n          catch (IOException ex) {\n            LOG.warn(ex, \"Error reading response from GET on url [%s]\", url);\n          }\n\n          throw new IOE(\n              \"GET request failed to [%s] : [%d] : [%s]  Response: [%s]\",\n              url,\n              returnCode.get(),\n              reasonString.get(),\n              StringUtils.fromUtf8(baos.toByteArray())\n          );\n        }\n      }\n    }\n\n    @VisibleForTesting\n    HttpResponseHandler<InputStream, InputStream> makeResponseHandler(\n        final AtomicInteger returnCode,\n        final AtomicReference<String> reasonString\n    )","sourceCodeStart":859,"sourceCodeEnd":895,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java#L859-L895","documentation":"getLookupStateForNode() performs an HTTP GET against a lookup node to fetch its current lookup state. On a failed (non-success) status, it attempts to read the response body; if reading fails with IOException it logs a warning, then throws an IOException describing the failed GET with whatever body was captured.","triggerScenarios":"GET to a node's lookup status endpoint returns non-OK and the error stream cannot be read (connection reset, premature EOF).","commonSituations":"Node restarting during rolling deploy; firewall/load balancer cutting the connection; TLS or auth misconfiguration causing abrupt connection close.","solutions":["Confirm the node is up and serving the lookup status endpoint.","Check network path (LB timeouts, firewall) between coordinator and node.","Ensure druid host/port configuration for the tier's nodes is correct."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { Map<String, LookupBean> state = getLookupStateForNode(url); } catch (IOException e) { LOG.warn(\"GET %s failed; node will be retried next cycle\", url); }","preventionTips":["Avoid querying nodes mid-restart; drain/deploy with rolling updates","Verify host/port and TLS configuration for discovered nodes","Monitor LB idle timeouts that abort in-flight responses"],"tags":["http","network","io"],"backgroundTag":"http-request-failed","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}