apache/seatunnel · error · UnsupportedOperationException
Checkpoint storage is unavailable
Error message
Checkpoint storage is unavailable
What it means
JobMaster's checkpoint storage delegate has not been initialized, so its CheckpointStorageOperations implementation is a stub that throws UnsupportedOperationException('Checkpoint storage is unavailable') for every checkpoint operation. storeCheckPoint would persist a pipeline's checkpoint state but the backing storage is not wired up in this JobMaster instance.
Solutions
- Verify the job was submitted with checkpointing enabled and that the Zeta master node initialized checkpoint storage successfully
- Inspect master node logs for earlier initialization errors that left the checkpoint storage unavailable and fix the root cause
- Restart the cluster so the JobMaster rebuilds its checkpoint storage binding before the job restores/saves state
- If running programmatically/tests, construct the JobMaster with a real checkpoint storage implementation rather than the unavailable stub
Defensive patterns
Strategy: try-catch
Validate before calling
// Before relying on checkpoint persistence, verify the master's storage is bound: // check job checkpointing config and master startup logs; there is no public API flag, // so guard operationally. boolean checkpointStorageReady = jobMaster != null && clusterMasterLogsShowCheckpointStorageInitialized;
Try / catch
try {
jobMaster.storeCheckPoint(pipelineState);
} catch (UnsupportedOperationException e) {
if ("Checkpoint storage is unavailable".equals(e.getMessage())) {
// re-init/restart master checkpoint storage, then retry
} else {
throw e;
}
} Prevention
- Enable checkpointing correctly in the job config so the engine initializes checkpoint storage at master startup
- Monitor master node logs for checkpoint storage bootstrap failures
- Restart the Zeta cluster after any storage init failure before resuming jobs
- Avoid calling JobMaster checkpoint APIs on stub/test instances without a real storage
When it happens
Trigger: Calling JobMaster.storeCheckPoint(PipelineState) on a JobMaster whose checkpoint storage accessor is not available — typically before/without proper checkpoint storage initialization or in a mode where checkpoint persistence is disabled.
Common situations: Running jobs with checkpointing expected but the checkpoint storage service (e.g. IMap-based storage on the master node) failed to initialize; calling checkpoint APIs programmatically against a JobMaster constructed in tests or degraded mode; engine version changes that altered checkpoint storage bootstrap.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- currentThread already be interrupted, skip trigger…
- ACKNOWLEDGE_FAILED
- ACKNOWLEDGE_FAILED
- checkpoint do not exist or have already been committed.
- checkpoint do not exist or have already been committed.
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/fbab88adcc4f3486.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/master/JobMaster.java:388
if (checkpointEnabled && startWithSavePoint) {
throw new IllegalStateException(
"Checkpoint is enabled and job starts with savepoint, but checkpoint storage is not available");
}
// When checkpoint is disabled, CheckpointManager will not touch the storage. We still need
// a non-null placeholder to avoid NPEs during job initialization (especially in local
// example runs where SeaTunnelServer components may initialize asynchronously).
return new UnsupportedCheckpointStorage();
}
private static final class UnsupportedCheckpointStorage implements CheckpointStorage {
private static UnsupportedOperationException unavailable() {
return new UnsupportedOperationException("Checkpoint storage is unavailable");
}
@Override
public String storeCheckPoint(PipelineState state) {
throw unavailable();
}
@Override
public void asyncStoreCheckPoint(PipelineState state) {
throw unavailable();
}
@Override
public List<PipelineState> getAllCheckpoints(String jobId) {
throw unavailable();
}
@Override
public List<PipelineState> getLatestCheckpoint(String jobId) {
throw unavailable();
}
@OverrideView on GitHub (pinned to cf67b549a7)