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
- Verify the backup path is accessible with valid credentials
- Check filesystem permissions for deletion under the backup directory
- 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)