apache/seatunnel · error · CheckpointStorageException
No checkpoint found for job, job id is: ${jobId}
Error message
No checkpoint found for job, job id is: ${jobId} What it means
HdfsStorage.getAllCheckpoints lists checkpoint files under the job's directory and deserializes each into PipelineState. If no readable checkpoint states are found for the given jobId — directory empty, missing, or all files failing to read (read failures are only logged, not fatal) — it throws this CheckpointStorageException naming the jobId.
Source
Thrown at seatunnel-engine/seatunnel-engine-storage/checkpoint-storage-plugins/checkpoint-storage-hdfs/src/main/java/org/apache/seatunnel/engine/checkpoint/storage/hdfs/HdfsStorage.java:157
@Override
public List<PipelineState> getAllCheckpoints(String jobId) throws CheckpointStorageException {
String path = getStorageParentDirectory() + jobId;
List<String> fileNames = getFileNames(path);
if (fileNames.isEmpty()) {
log.info("No checkpoint found for this job, the job id is: " + jobId);
return new ArrayList<>();
}
List<PipelineState> states = new ArrayList<>();
fileNames.forEach(
file -> {
try {
states.add(readPipelineState(file, jobId));
} catch (CheckpointStorageException e) {
log.error("Failed to read checkpoint data from file: " + file, e);
}
});
if (states.isEmpty()) {
throw new CheckpointStorageException(
"No checkpoint found for job, job id is: " + jobId);
}
return states;
}
@Override
public List<PipelineState> getLatestCheckpoint(String jobId) throws CheckpointStorageException {
String path = getStorageParentDirectory() + jobId;
List<String> fileNames = getFileNames(path);
if (fileNames.isEmpty()) {
log.info("No checkpoint found for this job, the job id is: " + jobId);
return new ArrayList<>();
}
Set<String> latestPipelineNames = getLatestPipelineNames(fileNames);
List<PipelineState> latestPipelineStates = new ArrayList<>();
latestPipelineNames.forEach(
fileName -> {
try {View on GitHub (pinned to cf67b549a7)
Solutions
- Verify the jobId is correct by listing running/finished jobs via the REST API
- Confirm the checkpoint storage base directory config matches where the job actually wrote (same fs.defaultFS and path)
- List the job directory on HDFS (hdfs dfs -ls <storage-parent>/<jobId>) to see whether files exist
- Check server logs for 'Failed to read checkpoint data from file' entries indicating corrupt files
- If checkpoints were deleted, restart the job without savepoint restore instead
Example fix
// before
// assume default storage dir
List<PipelineState> states = hdfsStorage.getAllCheckpoints(jobId);
// after
// ensure same base dir the writer used
Map<String,String> cfg = Map.of(
"storage.type", "hdfs",
"fs.defaultFS", "hdfs://namenode:8020",
"storage.path", "/seatunnel/checkpoints"); // matches writer config
HdfsStorage hdfsStorage = new HdfsStorage(cfg);
List<PipelineState> states = hdfsStorage.getAllCheckpoints(jobId); Defensive patterns
Strategy: try-catch
Validate before calling
// check checkpoint files exist before calling getAllCheckpoints
Path jobDir = new Path(baseDir + "/" + jobId);
if (!fs.exists(jobDir) || fs.listStatus(jobDir).length == 0) {
throw new IllegalStateException("No checkpoint directory/files for jobId " + jobId);
} Try / catch
try {
List<PipelineState> states = storage.getAllCheckpoints(jobId);
} catch (CheckpointStorageException e) {
if (e.getMessage().startsWith("No checkpoint found for job")) {
log.error("No checkpoints for jobId " + jobId + "; verify jobId and storage path, or restart without savepoint");
} else throw e;
} Prevention
- Copy jobIds from the REST job-info endpoint, not manually from logs
- Use the exact same storage config (fs.defaultFS + storage.path) as the job that wrote checkpoints
- Do not purge checkpoint files while a job may need restore; set retention above max job duration
- Grep server logs for 'Failed to read checkpoint data' to detect corrupt-file scenarios that surface as this error
When it happens
Trigger: Calling getAllCheckpoints(jobId) when: the job never wrote checkpoints (or storage config points to a different base directory than the one the job wrote to), the jobId is wrong/typo'd, all checkpoint files are corrupt (each read threw CheckpointStorageException and was logged), or files were deleted by cleanup/retention.
Common situations: Trying to restore/stop-with-savepoint a job whose checkpoints were purged by retention policy, pointing the client at a different cluster or namespace than where checkpoints were written, wrong jobId copied from logs, or corrupted files after a cluster crash leaving read failures in the logs.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- Failed to get file system
- Failed to serialize checkpoint data, state: ${state}
- Failed to write checkpoint data, file: ${tmpFilePath}, state
- Failed to rename tmp file to final file
- No checkpoint found, job(${jobId}), pipeline(${pipelineId}),
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/f8937a65b64b1af9.
Report an issue: GitHub.