{"record":{"id":"9a03fca0f8619a03","repo":"apache/seatunnel","slug":"jobresult-error","errorCode":null,"errorMessage":"${jobResult.error}","messagePattern":"\\$\\{jobResult\\.error\\}","errorType":"exception","errorClass":"SeaTunnelEngineException","httpStatus":null,"severity":"critical","filePath":"seatunnel-core/seatunnel-starter/src/main/java/org/apache/seatunnel/core/starter/seatunnel/command/ClientExecuteCommand.java","lineNumber":283,"sourceCode":"                executorService.scheduleAtFixedRate(\n                        jobMetricsRunner,\n                        0,\n                        seaTunnelConfig.getEngineConfig().getPrintJobMetricsInfoInterval(),\n                        TimeUnit.SECONDS);\n\n                if (!isLocalMode) {\n                    // LOCAL mode does not require running the job status runner\n                    executorService.schedule(\n                            new JobStatusRunner(engineClient.getJobClient(), jobId),\n                            0,\n                            TimeUnit.SECONDS);\n                }\n                // wait for job complete\n                JobResult jobResult = clientJobProxy.waitForJobCompleteV2();\n                jobStatus = jobResult.getStatus();\n                if (StringUtils.isNotEmpty(jobResult.getError())\n                        || jobResult.getStatus().equals(JobStatus.FAILED)) {\n                    throw new SeaTunnelEngineException(jobResult.getError());\n                }\n                // get job end time\n                endTime = LocalDateTime.now();\n                // get job statistic information when job finished\n                jobMetricsSummary = engineClient.getJobMetricsSummary(jobId);\n            }\n        } catch (Exception e) {\n            throw new CommandExecuteException(\"SeaTunnel job executed failed\", e);\n        } finally {\n            if (jobMetricsSummary != null) {\n                // print job statistics information when job finished\n                log.info(\n                        StringFormatUtils.formatTable(\n                                \"Job Statistic Information\",\n                                \"Start Time\",\n                                DateTimeUtils.toString(\n                                        startTime, DateTimeUtils.Formatter.YYYY_MM_DD_HH_MM_SS),\n                                \"End Time\",","sourceCodeStart":265,"sourceCodeEnd":301,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-core/seatunnel-starter/src/main/java/org/apache/seatunnel/core/starter/seatunnel/command/ClientExecuteCommand.java#L265-L301","documentation":"After waiting for the job to finish via clientJobProxy.waitForJobCompleteV2(), ClientExecuteCommand throws a SeaTunnelEngineException carrying jobResult.getError() when the engine reported an error or the final JobStatus is FAILED. The message shown to the user is the engine-side error text (the literal '${jobResult.error}' in the catalog means the message is dynamic). It surfaces the root failure of the executed pipeline to the CLI caller.","triggerScenarios":"A submitted job completes with status FAILED, or waitForJobCompleteV2 returns a JobResult whose error field is non-empty — e.g. a connector threw during reading/writing, a task failed and the job failed over and gave up, or checkpointing timed out.","commonSituations":"Bad connector config causing runtime failures; sink unable to connect to the target database; data-quality errors in transforms; engine worker crashes; resource exhaustion on the cluster.","solutions":["Read the error text returned in the exception — it contains the engine-side root cause — and fix the underlying connector/config problem.","Check the Zeta master/worker logs for the full stack trace of the failing task.","Validate the config with --dry-run before resubmitting to catch connectivity/static issues early.","Retry the job after fixing; if transient (network, resource), resubmit once resources are available."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// before submitting: validate config and connectivity\n// seatunnel.sh --config job.conf --dry-run CONNECT","typeGuard":null,"tryCatchPattern":"try { client.execute(); } catch (SeaTunnelEngineException e) { log.error(\"Job failed on engine: {}\", e.getMessage()); alertOps(e.getMessage()); }","preventionTips":["Run --dry-run CONNECT before production submissions","Monitor engine worker logs for the root task failure","Pre-verify source/sink connectivity and credentials","Set reasonable checkpoint/retry settings for transient failures"],"tags":["job-execution","engine","job-failed"],"backgroundTag":"job-execution-failed","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}