0

NFSを介してそれぞれにディレクトリがマップされた2つのサーバーがあります。

サーバーAのプロセス(シェルスクリプト)は、ファイルをマップされたドライブに配置します。

サーバーBのJavaプロセスは、マップされたドライブを定期的にポーリングし、ファイルが見つかるとすぐに処理します。ファイルが処理された後-名前が変更されます(その後、サーバーAでcronされたプロセスによって削除されます)

このファイルは小さな.propertiesファイルです。すべてが2、3サイクルうまく機能します。その後、サーバーAとサーバーBは、マップされたドライブの内容を異なる方法で表示し始めます。NFSキャッシングと属性ルックアップを無効にしました。問題はまだあります。

ビューが壊れているサーバーに移動して実行すると、次のようになります。

ls

停止したファイルが表示されます。しかし、もう一度やると、正しいファイルリストが出力されます。

この問題についてご協力いただければ幸いです。

4

3 に答える 3

1

私の問題は、タイマーでループすると、以下のコマンドが実際のディレクトリコンテンツの表示を停止することでした。NFSサーバーと同期しなくなります。

File[] files = dir.listFiles(new MyFileFilter() );

私が持っている解決策は、故意に存在しないファイルを要求することです。これにより、NFSクライアントがその状態を修正または更新できるようになると思います。

// Key point is here: we ask NFS client to obtain unexisting file. Since the client
// cannot find it locally - it will make a call to the NFS server which will 
// fix client cache or whatever it uses locally when cache is disabled.
File temp = new File(dir, "unexisting.file");
temp.exists();

この回避策の背後にあるメカニズムを知っている場合は、共有してください!

于 2011-03-17T14:29:50.123 に答える
0

どのNFSサーバーが使用されていますか?そのサーバーがファイル変更通知をサポートしている場合は、ポーリングの代わりにそれを使用できます。

于 2011-03-14T14:40:33.263 に答える
0

どの種類のキャッシュを無効にしましたか?NFSはディレクトリエントリのキャッシュをサポートしています。オプションとnfsLinuxのacdirminマニュアルページを参照してください。または、同じマニュアルの「データとメタデータの一貫性」の章。acdirmax

于 2011-12-07T08:07:31.700 に答える