apache/seatunnel · critical · CommandExecuteException

SeaTunnel job executed failed

Error message

SeaTunnel job executed failed

What it means

ClientExecuteCommand.execute wraps its whole job-submission/wait logic in a try-catch and rethrows any Exception as CommandExecuteException('SeaTunnel job executed failed', e). It is a generic client-side wrapper: the original cause (network error, engine exception like 2562, serialization problem, client shutdown) is attached as the cause. Job statistics gathered so far are still logged in the finally block.

Solutions

  1. Inspect the nested cause (getCause / printed stack trace) to find the real failure.
  2. Verify the engine cluster is reachable and the cluster address in the client config (seatunnel.yaml / -m settings) is correct.
  3. Fix the underlying connector/config issue indicated by the cause, then resubmit.
  4. Ensure client and engine versions match.
Defensive patterns

Strategy: try-catch

Validate before calling

// check cluster reachability before submitting
// curl http://<master>:5801/hazelcast/rest/state or verify seatunnel.yaml cluster settings

Try / catch

try { client.execute(); } catch (CommandExecuteException e) { Throwable root = e; while (root.getCause() != null) root = root.getCause(); log.error("Job execution failed, root cause: ", root); }

Prevention

When it happens

Trigger: Any exception during execute: job submission fails, the REST/cluster client cannot reach the master node, waitForJobCompleteV2 throws, getJobMetricsSummary fails, or the SeaTunnelEngineException from a failed job propagates through this catch.

Common situations: Engine not running or wrong cluster address in the client config; job failed for connector reasons (see nested cause); interrupted client; version mismatch between client and cluster.

Related errors


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

Appendix: source

Thrown at seatunnel-core/seatunnel-starter/src/main/java/org/apache/seatunnel/core/starter/seatunnel/command/ClientExecuteCommand.java:291

                    executorService.schedule(
                            new JobStatusRunner(engineClient.getJobClient(), jobId),
                            0,
                            TimeUnit.SECONDS);
                }
                // wait for job complete
                JobResult jobResult = clientJobProxy.waitForJobCompleteV2();
                jobStatus = jobResult.getStatus();
                if (StringUtils.isNotEmpty(jobResult.getError())
                        || jobResult.getStatus().equals(JobStatus.FAILED)) {
                    throw new SeaTunnelEngineException(jobResult.getError());
                }
                // get job end time
                endTime = LocalDateTime.now();
                // get job statistic information when job finished
                jobMetricsSummary = engineClient.getJobMetricsSummary(jobId);
            }
        } catch (Exception e) {
            throw new CommandExecuteException("SeaTunnel job executed failed", e);
        } finally {
            if (jobMetricsSummary != null) {
                // print job statistics information when job finished
                log.info(
                        StringFormatUtils.formatTable(
                                "Job Statistic Information",
                                "Start Time",
                                DateTimeUtils.toString(
                                        startTime, DateTimeUtils.Formatter.YYYY_MM_DD_HH_MM_SS),
                                "End Time",
                                DateTimeUtils.toString(
                                        endTime, DateTimeUtils.Formatter.YYYY_MM_DD_HH_MM_SS),
                                "Total Time(s)",
                                Duration.between(startTime, endTime).getSeconds(),
                                "Total Read Count",
                                jobMetricsSummary.getSourceReadCount(),
                                "Total Write Count",
                                jobMetricsSummary.getSinkWriteCount(),

View on GitHub (pinned to cf67b549a7)