リモート永続ファイルリストフィルター
受信およびストリーミング受信リモートファイルチャネルアダプター(FTP
、SFTP
、その他のテクノロジ)は、デフォルトで AbstractPersistentFileListFilter
の対応する実装で構成され、メモリ内 MetadataStore
で構成されます。クラスターで実行するには、共有 MetadataStore
を使用してこれらをフィルターに置き換えることができます(詳細については、メタデータストアを参照してください)。これらのフィルターは、同じファイルが複数回フェッチされるのを防ぐために使用されます(変更された時間の変更がない限り)。バージョン 5.2 以降、ファイルは、ファイルがフェッチされる直前にフィルターに追加されます(フェッチが失敗した場合は、逆になります)。
致命的な障害(停電など)が発生した場合、現在フェッチされているファイルがフィルターに残り、アプリケーションの再起動時に再フェッチされない可能性があります。この場合、このファイルを MetadataStore から手動で削除する必要があります。 |
以前のバージョンでは、ファイルは取得される前にフィルタリングされていたため、壊滅的な障害が発生した後、いくつかのファイルがこの状態になる可能性がありました。
この新しい動作を容易にするために、FileListFilter
に 2 つの新しいメソッドが追加されました。
boolean accept(F file);
boolean supportsSingleFileFiltering();
フィルターが supportsSingleFileFiltering
で true
を返す場合、accept()
を実装する必要があります。
リモートフィルターが単一ファイルのフィルター処理(AbstractMarkerFilePresentFileListFilter
など)をサポートしない場合、アダプターは以前の動作に戻ります。
(CompositeFileListFilter
または ChainFileListFilter
を使用して)複数のフィルターが使用されている場合、複合フィルターがそれをサポートするには、すべてのデリゲートフィルターが単一ファイルフィルタリングをサポートする必要があります。
永続ファイルリストフィルターにブールプロパティ forRecursion
が追加されました。このプロパティを true
に設定すると、alwaysAcceptDirectories
も設定されます。これは、送信ゲートウェイ(ls
および mget
)での再帰操作が常にディレクトリツリー全体を毎回トラバースすることを意味します。これは、ディレクトリツリーの奥深くで変更が検出されなかった問題を解決するためです。さらに、forRecursion=true
により、ファイルへのフルパスがメタデータストアキーとして使用されます。これにより、同じ名前のファイルが異なるディレクトリに複数回表示された場合にフィルターが正しく機能しなかった問題が解決されます。重要: これは、永続メタデータストア内の既存のキーが、最上位ディレクトリにあるファイルで見つからないことを意味します。このため、プロパティはデフォルトで false
です。これは将来のリリースで変更される可能性があります。