apache/seatunnel · error · JobNotFoundException

Job %s not found

Error message

Job %s not found

What it means

CoordinatorService.getJobDAGInfo (getRunningJobDAGInfo path) throws JobNotFoundException when neither the running job info IMap nor restore data holds the requested jobId. It means the master node has no record of this job's DAG: the job never ran on this cluster, was fully released/finished and purged, or state was lost (e.g. IMap persistence absent after cluster restart).

Source

Thrown at seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/CoordinatorService.java:1908

            return jobInfo;
        }

        JobMaster runningJobMaster = runningJobMasterMap.get(jobId);
        if (runningJobMaster != null) {
            return runningJobMaster.getJobDAGInfo();
        }

        PendingJobInfo pendingJobInfo = pendingJobQueue.getById(jobId);
        if (pendingJobInfo != null) {
            return pendingJobInfo.getJobMaster().getJobDAGInfo();
        }

        JobInfo runningJobInfo = runningJobInfoIMap.get(jobId);
        if (runningJobInfo != null) {
            return restoreJobDAGInfo(runningJobInfo);
        }

        throw new JobNotFoundException(String.format("Job %s not found", jobId));
    }

    private JobDAGInfo restoreJobDAGInfo(JobInfo jobInfo) {
        JobImmutableInformation jobImmutableInformation = restoreJobImmutableInformation(jobInfo);
        return restoreJobDAGInfo(jobImmutableInformation);
    }

    private JobDAGInfo restoreJobDAGInfo(JobImmutableInformation jobImmutableInformation) {
        ClassLoaderService classLoaderService = seaTunnelServer.getClassLoaderService();
        LogicalDag logicalDag =
                DAGUtils.restoreLogicalDag(
                        jobImmutableInformation,
                        nodeEngine.getSerializationService(),
                        classLoaderService);
        return DAGUtils.getJobDAGInfo(
                logicalDag,
                jobImmutableInformation,
                engineConfig,

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Verify the jobId is correct and the job is still running: list jobs (REST /hazelcast/rest/maps/running-jobs or bin/seatunnel.sh -l) before querying its DAG.
  2. For finished jobs, use the job info/history APIs (job state from running-jobs or finished-jobs endpoints) instead of the running DAG endpoint.
  3. Confirm you are querying the same cluster that ran the job (check cluster name and Hazelcast connection settings).
  4. If job metadata disappears after restart, enable/check IMap persistence (seatunnel.yaml connector package / persistence settings) and rely on checkpoint storage for restore.

Example fix

// before: blindly fetch DAG for a saved jobId
JobDAGInfo info = client.getJobDAGInfo(jobId);
// after: check job state first
JobState state = client.getJobState(jobId); // throws/returns unknown if job absent
if (state != null) {
    JobDAGInfo info = client.getJobDAGInfo(jobId);
}
Defensive patterns

Strategy: validation

Validate before calling

List<RunningJobInfo> jobs = client.listJobs(true); // or REST /running-jobs
if (jobs.stream().noneMatch(j -> j.getJobId() == targetJobId)) {
    throw new IllegalArgumentException("Job " + targetJobId + " is not running on this cluster");
}

Type guard

boolean jobExists(long jobId, Set<Long> knownJobIds) { return knownJobIds.contains(jobId); }

Try / catch

try {
    JobDAGInfo info = client.getJobDAGInfo(jobId);
} catch (JobNotFoundException e) {
    log.warn("Job {} has no DAG info (not running or purged)", jobId);
}

Prevention

When it happens

Trigger: Calling getJobDAGInfo/getRunningJobDAGInfo via REST or SeaTunnelClient for a jobId that is not present in runningJobInfoIMap and cannot be restored; querying after the job finished and its JobMaster was released; querying a different cluster than the one that ran the job.

Common situations: Typo in jobId passed to the REST endpoint /seatunnel/running-job/{jobId}; polling a finished job's DAG info; cluster restarted without checkpoint/imap persistence so job metadata is gone; pointing the client at the wrong cluster (dev vs prod).

Understand the failure class

Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.

Related errors


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