apache/seatunnel · error · IllegalArgumentException

No checkpoint found for jobId=${jobId}, restoreMode=${restor

Error message

No checkpoint found for jobId=${jobId}, restoreMode=${restoreMode}, restoreSourceJobId=${restoreSourceJobId}

What it means

When starting a job from the REST API in a restore mode (savepoint/restore), RestJobExecutionEnvironment loads the checkpoint state for the source job from the master node. If the returned list of pipeline checkpoint data is empty or null, it throws IllegalArgumentException because there is nothing to restore the job's state from.

Source

Thrown at seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/rest/RestJobExecutionEnvironment.java:153

        jarUrls.addAll(commonPluginJars);
        jarUrls.addAll(immutablePair.getRight());
        actions.forEach(
                action -> {
                    addCommonPluginJarsToAction(
                            action, new HashSet<>(commonPluginJars), Collections.emptySet());
                });
        return getLogicalDagGenerator().generate();
    }

    @Override
    protected MultipleTableJobConfigParser getJobConfigParser() {
        List<JobPipelineCheckpointData> pipelineCheckpoints = Collections.emptyList();
        if (restoreMode.isRestore()) {
            LOGGER.info(
                    String.format("Start with %s, get checkpoint state from server", restoreMode));
            pipelineCheckpoints = loadPipelineCheckpointsFromMasterNode();
            if (pipelineCheckpoints == null || pipelineCheckpoints.isEmpty()) {
                throw new IllegalArgumentException(
                        "No checkpoint found for jobId="
                                + jobConfig.getJobContext().getJobId()
                                + ", restoreMode="
                                + restoreMode
                                + ", restoreSourceJobId="
                                + restoreSourceJobId);
            }
        }
        MetadataConfig metaDataConfig =
                seaTunnelServer.getSeaTunnelConfig().getEngineConfig().getMetadataConfig();
        return new MultipleTableJobConfigParser(
                seaTunnelJobConfig,
                idGenerator,
                jobConfig,
                commonPluginJars,
                restoreMode.isRestore(),
                pipelineCheckpoints,
                metaDataConfig);

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Confirm restoreSourceJobId points to a job that actually completed a savepoint (check via REST job info endpoints)
  2. Use the jobId of the source job for savepoint restore if restoreSourceJobId is not provided (legacy contract fills it automatically)
  3. Verify the checkpoint storage (hdfs/s3/local) is reachable and contains the state files
  4. Re-run the original job with stop-with-savepoint to generate a valid savepoint before restoring

Example fix

// before: wrong/absent savepoint source
POST /submit-job?jobId=123&isStartWithSavePoint=true
// after: ensure source job 123 has a savepoint, then restore
POST /submit-job?isStartWithSavePoint=true&restoreSourceJobId=123
Defensive patterns

Strategy: validation

Validate before calling

// ensure the source job has savepoint data before restore
curl http://master:8080/job-info/:restoreSourceJobId  # verify checkpoints/savepoint exist

Try / catch

try {
    submitRestoreJob();
} catch (IllegalArgumentException e) {
    if (e.getMessage().contains("No checkpoint found")) {
        // take a fresh savepoint of the source job first
    }
}

Prevention

When it happens

Trigger: GET/POST submission with isStartWithSavePoint/restoreMode set and a restoreSourceJobId whose checkpoint data does not exist or has been purged (e.g. job history expired, savepoint never taken, wrong jobId).

Common situations: Typo in restoreSourceJobId; the original job was canceled without savepoint; checkpoint storage cleaned or cluster state (running-job-state map) lost after cluster restart; restore attempted from a different cluster without shared storage.

Related errors


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