apache/seatunnel · error · PaimonConnectorException
TABLE_PRE_COMMIT_FAILED
TABLE_PRE_COMMIT_FAILED
Error message
Paimon pre-commit failed.
What it means
PaimonSinkWriter.prepareCommit wraps any exception occurring while flushing writers, bucket assigners, or preparing Paimon committables during checkpoint into TABLE_PRE_COMMIT_FAILED with the fixed message "Paimon pre-commit failed.". The real cause is always in the wrapped exception.
Source
Thrown at seatunnel-connectors-v2/connector-paimon/src/main/java/org/apache/seatunnel/connectors/seatunnel/paimon/sink/PaimonSinkWriter.java:320
@Override
public Optional<PaimonCommitInfo> prepareCommit() throws IOException {
return Optional.empty();
}
@Override
public Optional<PaimonCommitInfo> prepareCommit(long checkpointId) throws IOException {
try {
List<CommitMessage> fileCommittables =
((StreamTableWrite) tableWrite).prepareCommit(waitCompaction(), checkpointId);
committables.addAll(fileCommittables);
if (!bucketAssigners.isEmpty()) {
List<PaimonBucketAssigner> assigners = new ArrayList<>(bucketAssigners);
bucketAssigners.clear();
assigners.forEach(assigner -> assigner.prepareCommit(checkpointId));
}
return Optional.of(new PaimonCommitInfo(fileCommittables, checkpointId, commitUser));
} catch (Exception e) {
throw new PaimonConnectorException(
PaimonConnectorErrorCode.TABLE_PRE_COMMIT_FAILED,
"Paimon pre-commit failed.",
e);
}
}
@Override
public List<PaimonSinkState> snapshotState(long checkpointId) throws IOException {
PaimonSinkState paimonSinkState =
new PaimonSinkState(new ArrayList<>(committables), commitUser, checkpointId);
committables.clear();
return Collections.singletonList(paimonSinkState);
}
@Override
public void abortPrepare() {}
@OverrideView on GitHub (pinned to cf67b549a7)
Solutions
- Inspect the cause exception in the logs for the root IO/commit failure
- Check storage (HDFS/S3) health, quota, and connectivity from worker nodes
- Retry the failed checkpoint / restart from the last completed checkpoint (Paimon commits are transactional)
- Increase checkpoint timeout and tune writer buffer settings if timeouts are the trigger
Example fix
null
Defensive patterns
Strategy: retry
Try / catch
try { writer.prepareCommit(checkpointId); } catch (PaimonConnectorException e) { if (PaimonConnectorErrorCode.TABLE_PRE_COMMIT_FAILED.equals(e.getErrorCode())) { log.error("Paimon pre-commit failed; cause:", e.getCause()); /* rely on checkpoint restart / retry once */ } else { throw e; } } Prevention
- Monitor storage health/quotas for HDFS/S3
- Tune checkpoint timeout and writer buffers
- Alert on worker disk pressure before checkpoints
When it happens
Trigger: prepareCommit() is invoked at checkpoint/normal pre-commit and any underlying operation throws: file IO failure on data files, bucket assigner snapshot failure, committable serialization, or manifest writes.
Common situations: HDFS/S3 outage or quota exceeded at checkpoint time; disk pressure on TaskManager/worker; checkpoint timeouts under load; corrupted in-progress Paimon data files.
Related errors
- Single file mode is not supported when checkpoint is enabled
- Failed to flush data in prepareCommit
- Failed to flush data during prepareCommit()
- BRANCH_NOT_EXISTS
- Cross Partitions Upsert Dynamic Bucket Mode is not supported
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/f31bf0d9bf482e0a.
Report an issue: GitHub.