{"record":{"id":"f8937a65b64b1af9","repo":"apache/seatunnel","slug":"no-checkpoint-found-for-job-job-id-is-jobid","errorCode":null,"errorMessage":"No checkpoint found for job, job id is: ${jobId}","messagePattern":"No checkpoint found for job, job id is: (.+?)","errorType":"exception","errorClass":"CheckpointStorageException","httpStatus":null,"severity":"error","filePath":"seatunnel-engine/seatunnel-engine-storage/checkpoint-storage-plugins/checkpoint-storage-hdfs/src/main/java/org/apache/seatunnel/engine/checkpoint/storage/hdfs/HdfsStorage.java","lineNumber":157,"sourceCode":"    @Override\n    public List<PipelineState> getAllCheckpoints(String jobId) throws CheckpointStorageException {\n        String path = getStorageParentDirectory() + jobId;\n        List<String> fileNames = getFileNames(path);\n        if (fileNames.isEmpty()) {\n            log.info(\"No checkpoint found for this job, the job id is: \" + jobId);\n            return new ArrayList<>();\n        }\n        List<PipelineState> states = new ArrayList<>();\n        fileNames.forEach(\n                file -> {\n                    try {\n                        states.add(readPipelineState(file, jobId));\n                    } catch (CheckpointStorageException e) {\n                        log.error(\"Failed to read checkpoint data from file: \" + file, e);\n                    }\n                });\n        if (states.isEmpty()) {\n            throw new CheckpointStorageException(\n                    \"No checkpoint found for job, job id is: \" + jobId);\n        }\n        return states;\n    }\n\n    @Override\n    public List<PipelineState> getLatestCheckpoint(String jobId) throws CheckpointStorageException {\n        String path = getStorageParentDirectory() + jobId;\n        List<String> fileNames = getFileNames(path);\n        if (fileNames.isEmpty()) {\n            log.info(\"No checkpoint found for this  job, the job id is: \" + jobId);\n            return new ArrayList<>();\n        }\n        Set<String> latestPipelineNames = getLatestPipelineNames(fileNames);\n        List<PipelineState> latestPipelineStates = new ArrayList<>();\n        latestPipelineNames.forEach(\n                fileName -> {\n                    try {","sourceCodeStart":139,"sourceCodeEnd":175,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-engine/seatunnel-engine-storage/checkpoint-storage-plugins/checkpoint-storage-hdfs/src/main/java/org/apache/seatunnel/engine/checkpoint/storage/hdfs/HdfsStorage.java#L139-L175","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\n// assume default storage dir\nList<PipelineState> states = hdfsStorage.getAllCheckpoints(jobId);\n// after\n// ensure same base dir the writer used\nMap<String,String> cfg = Map.of(\n    \"storage.type\", \"hdfs\",\n    \"fs.defaultFS\", \"hdfs://namenode:8020\",\n    \"storage.path\", \"/seatunnel/checkpoints\"); // matches writer config\nHdfsStorage hdfsStorage = new HdfsStorage(cfg);\nList<PipelineState> states = hdfsStorage.getAllCheckpoints(jobId);","handlingStrategy":"try-catch","validationCode":"// check checkpoint files exist before calling getAllCheckpoints\nPath jobDir = new Path(baseDir + \"/\" + jobId);\nif (!fs.exists(jobDir) || fs.listStatus(jobDir).length == 0) {\n  throw new IllegalStateException(\"No checkpoint directory/files for jobId \" + jobId);\n}","typeGuard":null,"tryCatchPattern":"try {\n  List<PipelineState> states = storage.getAllCheckpoints(jobId);\n} catch (CheckpointStorageException e) {\n  if (e.getMessage().startsWith(\"No checkpoint found for job\")) {\n    log.error(\"No checkpoints for jobId \" + jobId + \"; verify jobId and storage path, or restart without savepoint\");\n  } else throw e;\n}","preventionTips":["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"],"tags":["checkpoint-storage","hdfs","not-found"],"backgroundTag":"resource-not-found","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}