apache/seatunnel · error · RuntimeException
The checkpoint coordinator(%s) don't exist
Error message
The checkpoint coordinator(%s) don't exist
What it means
CheckpointManager.getCheckpointCoordinator looks up the CheckpointCoordinator for a pipeline in coordinatorMap; if none is registered for that pipelineId it throws a RuntimeException stating the coordinator doesn't exist. This means checkpoint operations (report progress, errors, etc.) are being routed to a pipeline the manager is not tracking on this node.
Source
Thrown at seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/checkpoint/CheckpointManager.java:245
}
}
protected void handleCheckpointError(int pipelineId, boolean neverRestore) {
jobMaster.handleCheckpointError(pipelineId, neverRestore);
}
private CheckpointCoordinator getCheckpointCoordinator(TaskLocation taskLocation) {
return getCheckpointCoordinator(taskLocation.getPipelineId());
}
public void reportCheckpointErrorFromTask(TaskLocation taskLocation, String errorMsg) {
getCheckpointCoordinator(taskLocation).reportCheckpointErrorFromTask(errorMsg);
}
public CheckpointCoordinator getCheckpointCoordinator(int pipelineId) {
CheckpointCoordinator coordinator = coordinatorMap.get(pipelineId);
if (coordinator == null) {
throw new RuntimeException(
String.format("The checkpoint coordinator(%s) don't exist", pipelineId));
}
return coordinator;
}
/**
* Called by the {@link Task}. <br>
* used by Task to report the {@link SeaTunnelTaskState} of the state machine.
*/
public void reportedTask(TaskReportStatusOperation reportStatusOperation) {
// task address may change during restore.
log.debug(
"reported task({}) status {}",
reportStatusOperation.getLocation().getTaskID(),
reportStatusOperation.getStatus());
getCheckpointCoordinator(reportStatusOperation.getLocation())
.reportedTask(reportStatusOperation);
}View on GitHub (pinned to cf67b549a7)
Solutions
- Verify the pipelineId belongs to the job and the pipeline is still running before calling
- Check whether the pipeline already completed/failed — in-flight checkpoint reports after completion should be ignored, not fatal
- Guard callers (e.g., reportCheckpointErrorFromTask) to catch/handle the missing-coordinator case for late messages
- After master failover, ensure CheckpointManager restore completed before processing checkpoint messages
- Log and inspect the jobId/pipelineId in the message to confirm it isn't from a previous job run with reused IDs
Example fix
// before
CheckpointCoordinator c = checkpointManager.getCheckpointCoordinator(pipelineId);
c.reportCheckpointErrorFromTask(errorMsg);
// after
try {
checkpointManager.getCheckpointCoordinator(pipelineId)
.reportCheckpointErrorFromTask(errorMsg);
} catch (RuntimeException e) {
LOG.warn("Checkpoint coordinator for pipeline {} gone; late task report dropped", pipelineId);
} Defensive patterns
Strategy: try-catch
Validate before calling
CheckpointCoordinator c = coordinatorMap.get(pipelineId);
if (c == null) { LOG.warn("No coordinator for pipeline {}", pipelineId); return; } Type guard
Optional<CheckpointCoordinator> findCoordinator(int pipelineId) {
return Optional.ofNullable(coordinatorMap.get(pipelineId));
} Try / catch
try {
manager.getCheckpointCoordinator(pipelineId).reportCheckpointErrorFromTask(msg);
} catch (RuntimeException e) {
LOG.warn("Coordinator for pipeline {} missing; dropping late report", pipelineId);
} Prevention
- Drop (don't fail on) checkpoint messages for finished pipelines
- Complete CheckpointManager restore before processing checkpoint traffic after failover
- Validate pipelineId against the current job before reporting
When it happens
Trigger: Calling getCheckpointCoordinator(pipelineId) (or task-based report APIs that delegate to it) with a pipelineId whose coordinator was never created, or was removed after the pipeline finished/failed; also after job cleanup while tasks still emit checkpoint messages.
Common situations: Task checkpoints arriving after pipeline completion (stale messages in flight); master failover where the new master hasn't restored that pipeline's coordinator; wrong pipelineId passed by custom code or a buggy connector.
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 load readyToCloseStartingTask from IMap, key: %s
- Failed to persist readyToCloseStartingTask to IMap, key: %s
- Unknown checkpoint type:
- Failed to fetch running jobs from IMap during master switch
- wait worker register error
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/f313ede1147994f4.
Report an issue: GitHub.