{"record":{"id":"f06e66fb52c3b3d2","repo":"apache/seatunnel","slug":"retention-scan-failed-backuppath-maxage-i","errorCode":null,"errorMessage":"Retention scan failed: backupPath={}, maxAge={}, interval={}","messagePattern":"Retention scan failed: backupPath=(.+?), maxAge=(.+?), interval=(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/source/split/ContinuousMultipleTableFileSourceSplitEnumerator.java","lineNumber":1218,"sourceCode":"\n        if (hasAnyRetentionEnabled) {\n            log.info(\n                    \"Retention scan finished at checkpoint {}: deleted_files={}, failed_operations={}.\",\n                    checkpointId,\n                    deleted,\n                    failed);\n        }\n    }\n\n    private RetentionResult runRetentionOnce(TableScanContext ctx, long nowMillis) {\n        RetentionResult result = new RetentionResult();\n        long expireBefore = nowMillis - ctx.retentionMaxAge.toMillis();\n        try {\n            cleanupRetentionRecursively(ctx.sourceFs, ctx.backupPath, expireBefore, result);\n        } catch (Exception e) {\n            result.failedOperations++;\n            incCounter(retentionFailedCounter);\n            log.warn(\n                    \"Retention scan failed: backupPath={}, maxAge={}, interval={}\",\n                    maskUriUserInfo(ctx.backupPath),\n                    ctx.retentionMaxAge,\n                    ctx.retentionCheckInterval,\n                    e);\n        }\n        return result;\n    }\n\n    private void cleanupRetentionRecursively(\n            HadoopFileSystemProxy fs, String path, long expireBefore, RetentionResult result)\n            throws IOException {\n        FileStatus[] statuses;\n        try {\n            statuses = fs.listStatus(path);\n        } catch (java.io.FileNotFoundException e) {\n            return;\n        }","sourceCodeStart":1200,"sourceCodeEnd":1236,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/source/split/ContinuousMultipleTableFileSourceSplitEnumerator.java#L1200-L1236","documentation":"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.","triggerScenarios":"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.","commonSituations":"See trigger scenarios.","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"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}