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() {}

    @Override

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Inspect the cause exception in the logs for the root IO/commit failure
  2. Check storage (HDFS/S3) health, quota, and connectivity from worker nodes
  3. Retry the failed checkpoint / restart from the last completed checkpoint (Paimon commits are transactional)
  4. 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

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


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/f31bf0d9bf482e0a. Report an issue: GitHub.