跳到主要内容

远程持久文件列表过滤器

QWen Plus 中英对照 Remote Persistent File List Filters

传入和流式传入远程文件通道适配器 (FTPSFTP 和其他技术) 默认配置了相应的 AbstractPersistentFileListFilter 实现,并使用内存中的 MetadataStore 进行配置。要在集群中运行,可以将其替换为使用共享 MetadataStore 的过滤器(有关详细信息,请参阅 Metadata Store)。这些过滤器用于防止多次获取相同的文件(除非其修改时间发生变化)。从 5.2 版开始,在文件被获取之前会立即将其添加到过滤器中(如果获取失败则回退)。

important

在发生灾难性故障(如断电)时,当前正在获取的文件可能会留在过滤器中,并且在重新启动应用程序时不会被重新获取。在这种情况下,你需要手动将此文件从 MetadataStore 中删除。

在以前的版本中,文件是在获取之前进行过滤的,这意味着在发生灾难性故障后,多个文件可能会处于这种状态。

为了便于这种新行为,FileListFilter 中添加了两种新方法。

boolean accept(F file);

boolean supportsSingleFileFiltering();
java

如果过滤器在 supportsSingleFileFiltering 中返回 true,则它 必须 实现 accept()

如果远程过滤器不支持单个文件过滤(例如 AbstractMarkerFilePresentFileListFilter),适配器将恢复到之前的行为。

如果使用了多个过滤器(使用 CompositeFileListFilterChainFileListFilter),那么 所有 的委托过滤器都必须支持单个文件过滤,以便组合过滤器能够支持它。

持久化文件列表过滤器现在有一个布尔属性 forRecursion。将此属性设置为 true,也会设置 alwaysAcceptDirectories,这意味着在出站网关 (lsmget) 上的递归操作每次都会遍历整个目录树。这是为了解决目录树深层的变化未被检测到的问题。此外,forRecursion=true 会导致使用文件的完整路径作为元数据存储键;这解决了如果不同目录中出现同名文件时过滤器无法正常工作的问题。重要提示:这意味着持久化元数据存储中现有的键将不会被顶级目录下的文件找到。因此,默认情况下该属性为 false;这可能会在未来版本中更改。