apache/seatunnel · warning

Post-sync operation cannot verify sink target and will be re

Error message

Post-sync operation cannot verify sink target and will be retried: action={}, source={}, target={}, checkpointId={}

What it means

isSinkTargetCommitted() verifies the sink-side target file (computed via ctx.targetFilePath()) exists, matches the captured source length, and matches content before any source-side mutation. This WARN fires when that verification itself throws any exception — the sink filesystem cannot be queried or the content comparison fails unexpectedly. The method returns false so the post-sync operation is retried rather than proceeding on unverified state.

Source

Thrown at seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/source/split/ContinuousMultipleTableFileSourceSplitEnumerator.java:1009

                        checkpointId,
                        op.getSourceLength(),
                        targetStatus == null ? null : targetStatus.getLen());
                return false;
            }
            if (!isSinkTargetContentMatched(
                    ctx, op, targetPath, sourcePathToCompareWhenFingerprintMissing)) {
                log.info(
                        "Post-sync operation is waiting for sink target content: action={}, "
                                + "source={}, target={}, checkpointId={}",
                        op.getAction(),
                        maskUriUserInfo(op.getSourcePath()),
                        maskUriUserInfo(targetPath),
                        checkpointId);
                return false;
            }
            return true;
        } catch (Exception e) {
            log.warn(
                    "Post-sync operation cannot verify sink target and will be retried: action={}, "
                            + "source={}, target={}, checkpointId={}",
                    op.getAction(),
                    maskUriUserInfo(op.getSourcePath()),
                    maskUriUserInfo(targetPath),
                    checkpointId,
                    e);
            return false;
        }
    }

    private boolean isSinkTargetContentMatched(
            TableScanContext ctx,
            FileSourceOperationState op,
            String targetPath,
            String sourcePathToCompareWhenFingerprintMissing)
            throws IOException {
        if (StringUtils.isNotBlank(op.getSourceContentFingerprint())) {

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Read the stacked exception to identify the sink-filesystem failure (connectivity, permission, throttling)
  2. Verify the sink/target filesystem config and credentials (targetFs) are correct and reachable from the JobManager
  3. Check sink-target network stability and object-store rate limits; the operation retries automatically at the next checkpoint
  4. Ensure the target file path derived by ctx.targetFilePath() points into a filesystem the job can read

Example fix

// before (sink FS credentials expired)
java.io.IOException: Cannot get file status for s3://bucket/target/...
// after
# refresh target FS credentials / verify hadoop-aws config, then restart or let the retry succeed
Defensive patterns

Strategy: retry

Validate before calling

// Before enabling post-sync delete/backup, verify the sink target filesystem is readable:
FileStatus t = targetFs.getFileStatus(targetFilePath(sourcePath));
if (t == null) throw new IOException("Sink target not visible: " + targetFilePath(sourcePath));

Try / catch

try {
    verifySinkTarget(targetPath);
} catch (Exception e) {
    // connectivity/permission/throttling on target FS; backoff and retry
}

Prevention

When it happens

Trigger: An exception is thrown while calling getFileStatusIfPresent(ctx.targetFs, targetPath), calculateContentFingerprint(ctx.targetFs, targetPath), or ctx.fileContentEquals(...) inside isSinkTargetCommitted() during checkpoint commit.

Common situations: Target filesystem (sink FS) temporarily unreachable (HDFS NameNode outage, S3 throttling, FTP connection drop); permission errors reading the sink target; timeout while streaming file contents for the byte comparison; misconfigured target FS credentials.

Understand the failure class

Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.

Related errors


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