現在、分散アプリケーションで奇妙な問題に直面しています。このアプリケーションは通常、次のことを行います。
- NFSv3 ファイルシステムからのデータの読み取りと書き込み
- tmpfs ファイルシステムからのデータの読み取りと書き込み
- 1 つのプロセスが tmpfs でファイルを生成し、別のプロセス (または最終的に pthread である別の Java スレッド) でそれらにアクセスします。
- 1 つのプロセスが NFSv3 でファイルを生成し、別のプロセス (または最終的に pthread である別の Java スレッド) でそれらにアクセスします。
- NFSv3 にデータを書き込み、別のマシンから同じデータを読み取る
NFSv3 で多くの遅延の問題が発見されましたが、これらの問題は既知のものです。NFS にファイルを書き込んで、別のマシンから読み取ろうとすると、他のマシンで stat syscall が実行されたときに、利用できるようになるまでに最大 90 秒かかることがあります。
そのため、この問題に対処するためにいくつかの再試行コードを実装しました。
最近、tmpfs でも同様の動作を発見しましたが、これは RAM にあるため、書き込みの最後に別のスレッドが実行された同じマシンが書き込みの最後にファイルを参照する必要があると考えましたが、エラーが発生しました。
そこで、別の再試行ブロックを再度実装することにしました
問題は、コードがファイルへの書き込みを停止したときに tmpfs がトランザクションに対応するかどうかです。
そして、より一般的には、異なるファイルシステムでこの概念がどのように適用されるのでしょうか?
ありがとうマルコ