apache/seatunnel · warning

Failed to get HTTP port from member

Error message

Failed to get HTTP port from member {}, skip.

What it means

When enumerating log file names across all cluster nodes, LogService asks each member for its HTTP port via GetNodeHttpPortOperation. If that call fails for a member (timeout, member unreachable, operation exception), this warning is logged and the member is skipped, so its logs are absent from the aggregated list.

Solutions

  1. Check that the reported member is alive and its HTTP connector is enabled (http config in seatunnel.yaml / hazelcast config).
  2. Fix network/firewall so the coordinator can reach the member's REST port.
  3. Restart the failed member; verify the REST endpoint responds locally on that node.
  4. If intentional (node being removed), ignore the warning or exclude the member from the cluster properly.

Example fix

// before (seatunnel.yaml, http disabled on one node)
// http: enable: false
// after
// http: enable: true
//   port: 8080
Defensive patterns

Strategy: retry

Validate before calling

// pre-check each member is reachable before listing logs
// for (Member m : members) {
//     if (!isPortOpen(m.getAddress().getHost(), restPort(m), timeoutMs)) {
//         skip(m); // avoid the warn+skip path
//     }
// }

Try / catch

try {
    int port = (int) NodeEngineUtil.sendOperationToMemberNode(nodeEngine, new GetNodeHttpPortOperation(), member.getAddress()).get();
} catch (Exception e) {
    log.warn("Member {} unreachable for HTTP port, skipping logs", member.getAddress(), e);
}

Prevention

When it happens

Trigger: Calling the all-log-names REST endpoint when one member is down, network partitioned, or its REST/HTTP service failed to start (port conflict, http disabled in config), making GetNodeHttpPortOperation hang or throw.

Common situations: Node crashed or being decommissioned during the request; seatunnel http port disabled/misconfigured on one node; firewall blocking inter-member REST port; slow node exceeding operation timeout.

Understand the failure class

Background: ECONNREFUSED and "connection refused" / "could not connect to server" errors: what they mean and how to fix them — this error's family across 44 libraries.

Related errors


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

Appendix: source

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

        HttpConfig httpConfig =
                seaTunnelServer.getSeaTunnelConfig().getEngineConfig().getHttpConfig();
        String contextPath = httpConfig.getContextPath();

        List<Tuple3<String, String, String>> allLogNameList = new ArrayList<>();

        for (Member member : nodeEngine.getClusterService().getMembers()) {
            String host = member.getAddress().getHost();
            int nodeHttpPort;
            try {
                nodeHttpPort =
                        (int)
                                NodeEngineUtil.sendOperationToMemberNode(
                                                nodeEngine,
                                                new GetNodeHttpPortOperation(),
                                                member.getAddress())
                                        .get();
            } catch (Exception e) {
                log.warn("Failed to get HTTP port from member {}, skip.", member.getAddress(), e);
                continue;
            }

            String url = "http://" + host + ":" + nodeHttpPort + contextPath;
            String logUrl = url + REST_URL_GET_ALL_LOG_NAME;

            String allName =
                    httpConfig.isEnableBasicAuth()
                            ? sendGet(
                                    logUrl,
                                    httpConfig.getBasicAuthUsername(),
                                    httpConfig.getBasicAuthPassword())
                            : sendGet(logUrl);

            if (StringUtils.isBlank(allName)) {
                log.warn("GET {} returned empty body (null/empty). Skip this node.", logUrl);
                continue;
            }

View on GitHub (pinned to cf67b549a7)