apache/seatunnel · error

Retention scan failed: backupPath=

Error message

Retention scan failed: backupPath={}, maxAge={}, interval={}

What it means

Logged by ContinuousMultipleTableFileSourceSplitEnumerator.runRetentionOnce when a file-retention scan/cleanup cycle throws — the recursive backup-directory cleanup (deleting files older than the retention max-age) failed for the given backup path. Counters report it as a failed operation without failing the job.

Solutions

  1. Verify the backup path is accessible with valid credentials
  2. Check filesystem permissions for deletion under the backup directory
  3. Monitor failed_operations counts and investigate filesystem health
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/source/split/ContinuousMultipleTableFileSourceSplitEnumerator.java:1218 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

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

        if (hasAnyRetentionEnabled) {
            log.info(
                    "Retention scan finished at checkpoint {}: deleted_files={}, failed_operations={}.",
                    checkpointId,
                    deleted,
                    failed);
        }
    }

    private RetentionResult runRetentionOnce(TableScanContext ctx, long nowMillis) {
        RetentionResult result = new RetentionResult();
        long expireBefore = nowMillis - ctx.retentionMaxAge.toMillis();
        try {
            cleanupRetentionRecursively(ctx.sourceFs, ctx.backupPath, expireBefore, result);
        } catch (Exception e) {
            result.failedOperations++;
            incCounter(retentionFailedCounter);
            log.warn(
                    "Retention scan failed: backupPath={}, maxAge={}, interval={}",
                    maskUriUserInfo(ctx.backupPath),
                    ctx.retentionMaxAge,
                    ctx.retentionCheckInterval,
                    e);
        }
        return result;
    }

    private void cleanupRetentionRecursively(
            HadoopFileSystemProxy fs, String path, long expireBefore, RetentionResult result)
            throws IOException {
        FileStatus[] statuses;
        try {
            statuses = fs.listStatus(path);
        } catch (java.io.FileNotFoundException e) {
            return;
        }

View on GitHub (pinned to cf67b549a7)