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
- Confirm restoreSourceJobId points to a job that actually completed a savepoint (check via REST job info endpoints)
- Use the jobId of the source job for savepoint restore if restoreSourceJobId is not provided (legacy contract fills it automatically)
- Verify the checkpoint storage (hdfs/s3/local) is reachable and contains the state files
- 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
- Always stop-with-savepoint the source job before restoring
- Record and reuse the exact source jobId
- Ensure checkpoint storage persists across cluster restarts
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
- Failed to get checkpoint data from master node, restoreSourc
- The job with id '%s' save point failed
- Job %s not found
- Job %s not running (restore in progress)
- Unsupported restore mode for checkpoint loading: ${restoreMo
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/fb6a22c5a15715b7.
Report an issue: GitHub.