apache/seatunnel · error · CheckpointStorageException
No checkpoint found, job(${jobId}), pipeline(${pipelineId}),
Error message
No checkpoint found, job(${jobId}), pipeline(${pipelineId}), checkpoint(${checkpointId}) What it means
LocalFileStorage.getCheckpoint throws CheckpointStorageException after exhausting all candidate files without finding a readable checkpoint whose file name matches the requested job, pipeline, and checkpoint id. Each candidate file that fails to parse is logged (with the underlying exception) and skipped; if none match or deserialize, this terminal 'No checkpoint found' error is thrown. It signals the checkpoint data is absent or unreadable/corrupt for the given ids.
Source
Thrown at seatunnel-engine/seatunnel-engine-storage/checkpoint-storage-plugins/checkpoint-storage-local-file/src/main/java/org/apache/seatunnel/engine/checkpoint/storage/localfile/LocalFileStorage.java:318
}
for (File file : fileList) {
String fileName = file.getName();
if (pipelineId.equals(getPipelineIdByFileName(fileName))
&& checkpointId.equals(getCheckpointIdByFileName(fileName))) {
try {
byte[] data = FileUtils.readFileToByteArray(file);
return deserializeCheckPointData(data);
} catch (Exception e) {
log.error(
"Failed to delete checkpoint {} for job {}, pipeline {}",
checkpointId,
jobId,
pipelineId,
e);
}
}
}
throw new CheckpointStorageException(
String.format(
"No checkpoint found, job(%s), pipeline(%s), checkpoint(%s)",
jobId, pipelineId, checkpointId));
}
@Override
public synchronized void deleteCheckpoint(String jobId, String pipelineId, String checkpointId)
throws CheckpointStorageException {
String parentPath = getStorageParentDirectory() + jobId;
Collection<File> fileList = new ArrayList<>();
try {
fileList = FileUtils.listFiles(new File(parentPath), FILE_EXTENSIONS, false);
} catch (Exception e) {
if (!(e.getCause() instanceof NoSuchFileException)) {
throw new CheckpointStorageException(ExceptionUtils.getMessage(e));
}
}
if (fileList.isEmpty()) {View on GitHub (pinned to cf67b549a7)
Solutions
- Verify the jobId/pipelineId/checkpointId triple actually exists — list the files under the storage directory for the job.
- Check the preceding log lines: the method logs the per-file exception (e) with jobId/pipelineId, revealing whether files are corrupt.
- If files are truncated/corrupt, recover from an earlier completed checkpoint or re-run the job.
- For multi-node deployments, use a shared checkpoint storage plugin (e.g. HDFS/OSS/S3) instead of local file so the data is reachable from the querying node.
Example fix
// before
storage.getCheckpoint(jobId, pipelineId, latestCheckpointId); // throws if file unreadable
// after
try {
return storage.getCheckpoint(jobId, pipelineId, latestCheckpointId);
} catch (CheckpointStorageException e) {
log.warn("Checkpoint {}/{}/{} unavailable, falling back", jobId, pipelineId, latestCheckpointId, e);
return storage.getLatestCheckpointByJobIdAndPipelineId(jobId, pipelineId);
} Defensive patterns
Strategy: fallback
Validate before calling
// Verify the checkpoint file actually exists before requesting it
java.nio.file.Path jobDir = java.nio.file.Path.of(storageParentDir, jobId);
boolean exists = java.nio.file.Files.isDirectory(jobDir)
&& java.util.stream.Stream.of(jobDir.toFile().listFiles()).anyMatch(f -> f.getName().contains(pipelineId)); Try / catch
try {
return storage.getCheckpoint(jobId, pipelineId, checkpointId);
} catch (CheckpointStorageException e) {
log.warn("Checkpoint {}/{}/{} not found or unreadable; falling back to latest", jobId, pipelineId, checkpointId, e);
return storage.getLatestCheckpointByJobIdAndPipelineId(jobId, pipelineId);
} Prevention
- Only request checkpoint ids that were reported as completed (snapshot finish) by the engine.
- Use shared checkpoint storage in multi-node/Kubernetes deployments; local files vanish with the pod.
- Check per-file skip logs emitted just before this error to detect corrupt/truncated checkpoint data.
- Configure a redundant checkpoint storage plugin for critical jobs.
When it happens
Trigger: Calling getCheckpoint(jobId, pipelineId, checkpointId) when the job directory contains no files named for that pipeline/checkpoint combination, or all matching files fail to deserialize (corrupt/partially written checkpoint data files).
Common situations: Requesting a checkpoint id that was never completed (only completed checkpoints are stored); checkpoint files truncated by an abrupt node kill; local storage lost after a container restart in Kubernetes; asking for checkpoints from a job that ran on a different node with non-shared local storage.
Understand the failure class
Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.
Related errors
- Failed to get all checkpoints for job ${jobId}
- ${ExceptionUtils.getMessage(e)}
- No checkpoint found for job ${jobId}
- No checkpoint found for job, job id is: ${jobId}
- The checkpoint coordinator(%s) don't exist
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/4735ad53e4e7691e.
Report an issue: GitHub.