apache/seatunnel · error · IllegalStateException
SeaTunnel server is not available on this node.
Error message
SeaTunnel server is not available on this node.
What it means
LoggerLevelService.httpConfig resolves the node's HttpConfig through the SeaTunnelServer obtained from the Hazelcast NodeEngine. When the SeaTunnel server extension is not registered on the current node (e.g. the node is a client-lite member or the engine server was not started), it throws this IllegalStateException because log-level management cannot proceed without the engine's HTTP configuration.
Source
Thrown at seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/rest/service/LoggerLevelService.java:254
}
private JsonObject loggerJson(String name, Level level) {
JsonObject logger =
new JsonObject()
.add(NAME, name)
.add(LEVEL, level == null ? null : level.name())
.add(ORIGIN, LogLevels.origin(name));
Level fileLevel = LogLevels.levelBeforeOverride(name);
if (fileLevel != null) {
logger.add(FILE_LEVEL, fileLevel.name());
}
return logger;
}
private HttpConfig httpConfig() {
SeaTunnelServer seaTunnelServer = getSeaTunnelServer(false);
if (seaTunnelServer == null) {
throw new IllegalStateException("SeaTunnel server is not available on this node.");
}
return seaTunnelServer.getSeaTunnelConfig().getEngineConfig().getHttpConfig();
}
private String nodeId() {
return nodeEngine.getThisAddress().getHost() + ":" + httpConfig().getPort();
}
/**
* Short reason of a failed member request, the stack trace goes to the node log instead. The
* root cause is reported, because the wrappers a failed operation collects on the way out
* ({@code CompletionException} around an {@code ExecutionException} around the real failure)
* say nothing about what went wrong.
*/
private static String errorMessage(Throwable t) {
Throwable cause = t;
while (cause.getCause() != null && cause.getCause() != cause) {
cause = cause.getCause();View on GitHub (pinned to cf67b549a7)
Solutions
- Send the logger-level request to a node that runs the full SeaTunnel engine (master/worker), not a lite/client member.
- Check node startup logs for SeaTunnelServer initialization errors; fix the failed server bootstrap and restart the node.
- Verify the cluster configuration so all engine members register the SeaTunnelServer extension service.
Example fix
// before # request routed to a node without the engine curl -X GET 'http://lite-node:8080/log-level' // after # route to a master/worker node running the engine curl -X GET 'http://master-node:8080/log-level'
Defensive patterns
Strategy: type-guard
Validate before calling
// check the node runs the engine before calling logger-level APIs
if (!isEngineNode(nodeAddress)) throw new Error("logger-level API requires a master/worker node, not a lite member"); Type guard
boolean isEngineNode(Address address) {
SeaTunnelServer srv = nodeEngine.getService(SeaTunnelServer.SERVICE_NAME);
return srv != null;
} Try / catch
try { getLogLevel(node); } catch (IllegalStateException e) { if (e.getMessage().contains("SeaTunnel server is not available")) { routeToEngineNode(node); } else throw e; } Prevention
- Maintain a registry of engine-enabled node addresses and send management APIs only to them.
- Verify SeaTunnelServer started successfully in node logs after each deployment.
- Avoid lite/client-only members in clusters managed via the REST API.
When it happens
Trigger: Calling any logger-level REST operation against a cluster node where getSeaTunnelServer(false) returns null — i.e. the SeaTunnelServer service is not available in that member's NodeEngine services map.
Common situations: Hitting the wrong node in a mixed deployment where some members run only Hazelcast without the SeaTunnel engine; misconfigured extension services after a partial startup; sending the request to a client-coordinator node instead of a worker/master node.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- master not yet known
- Failed to get HTTP port from member {}, skip.
- Logger level request to member {} failed
- Handler not reset
- MDCContext is already activated
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/e03b5d4da87f108e.
Report an issue: GitHub.