次のように動作する2つの別個のJavaプロセス、プロデューサーとコンシューマーがあります。
プロデューサー:
write data file
close data file
write hash file
close hash file
消費者:
wait until hash file exists
read data file
act on data file
close data file
delete data file
delete hash file
ハッシュファイルは、データファイルが完全であることを通知するためにこのコードでのみ使用されます。ハッシュの値はここでは検証されません。通常の負荷では、3秒ごとに1回のハンドオフが必要です。非常に重い負荷がかかると、レートは100ミリ秒ごとに1回のハンドオフに増加する可能性があります。ファイルシステムはext3で、data=orderedです。
消費者に不完全なファイルが表示されないようにするにはどうすればよいですか?
1つのオプションは、データファイルの内容をハッシュと照合することですが、これは不必要にコストがかかるようです。使用を検討しjava.nio.channels.FileLock
ましたが、プロデューサーがクラッシュした場合、ファイルがまだ不完全であってもOSがすべてのロックを解放するため、ハッシュチェックの必要性がなくなるのではないかと心配しています。これは実際には、不完全なファイルを作成する可能性が非常に高いケースです。たぶん、ロックに加えて、コンシューマーがまだ実行されていることを確認しますか?