apache/seatunnel · warning

GET {} -> HTTP {}

Error message

GET {} -> HTTP {}

What it means

BaseLogService.sendGet() performs an HTTP GET to a node's log endpoint. If the response status is not 200, it logs this warning with the URL and status code, drains the error stream, and returns no body. This indicates the remote log-service endpoint responded but with an error status.

Source

Thrown at seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/rest/service/BaseLogService.java:95

            connection.setRequestMethod("GET");
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(5000);

            // Basic Auth
            if (user != null && pass != null) {
                String auth = user + ":" + pass;
                String token =
                        Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.UTF_8));
                connection.setRequestProperty(AUTHORIZATION_HEADER, BASIC_PREFIX + token);
            }

            connection.connect();

            int code = connection.getResponseCode();
            if (code == HttpURLConnection.HTTP_OK) {
                return readResponseBody(connection.getInputStream());
            } else {
                log.warn("GET {} -> HTTP {}", urlString, code);
                drainErrorStream(connection);
            }
        } catch (IOException e) {
            log.error("Send GET failed: url={}, err={}", urlString, ExceptionUtils.getMessage(e));
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
        }
        return null;
    }

    private String readResponseBody(InputStream is) throws IOException {
        try (InputStream input = is;
                ByteArrayOutputStream output = new ByteArrayOutputStream()) {

            byte[] buf = new byte[4096];
            int len;

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Check the exact HTTP status code in the log line and address it specifically (404 → enable REST/HTTP service on the node).
  2. Verify hazelcast/seatunnel REST port configuration (e.g. jetty server port) and firewall rules.
  3. Confirm the target member is alive and part of the cluster.
  4. Retry the request; transient 5xx from a loaded node often clears.
Defensive patterns

Strategy: validation

Validate before calling

// preflight the endpoint before fetching logs
HttpURLConnection c = (HttpURLConnection) new URL(urlString).openConnection();
c.setConnectTimeout(3000);
if (c.getResponseCode() != 200) { handle non-OK status explicitly; }

Try / catch

try {
    String body = sendGet(urlString);
} catch (IOException e) {
    log.error("log endpoint unreachable: {}, err={}", urlString, e.getMessage());
}

Prevention

When it happens

Trigger: GET to a cluster member's REST log URL returns e.g. 404 (REST endpoints disabled), 401/403 (auth), or 5xx (remote node error); sendGet detects code != HTTP_OK.

Common situations: seatunnel REST service not enabled (Jetty port not configured) on the target node; wrong port in the URL; requesting logs from a node that just left the cluster; reverse proxy returning 502/503.

Understand the failure class

Background: "API error: {status}" and "HTTP 401/403/404/429/5xx" errors: non-2xx HTTP responses explained — this error's family across 27 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/5e33a6f3a8ae7b29. Report an issue: GitHub.