ファイルがリモートディスクに保持され、VMware キャッシュ、NAS キャッシュなどを通過していることを確認するための「トリック」または「ハック」を探しています。
FileOutputStream をフラッシュして閉じるだけでは不十分です。Channel.force(true) はどちらでもないと思います。
私は次のようなことを考えています:
- ファイルに書き込み、ファイルを読み戻す
- ファイルの書き込み、タイムスタンプの確認、ファイルの名前変更、別のタイムスタンプの確認
- 「間違った内容」でファイルを書き込み、元の内容で上書きし、読み返し、内容を確認する
誰かが同じ問題を抱えていて、解決策を見つけたのかもしれません。
私の要件は、データを失わないことです。Java アプリケーションは次のように動作します。
- リモート ソースからファイルを受け入れる
- デジタル署名と認定されたタイムスタンプを追加して、新しいファイルを作成します。このファイルが失われると、どのような方法でも再作成できなくなります。
- このファイルをストレージに書き込む
- ファイルをデータベース上で署名済みとしてマークする
- すべてが問題ないことをリモート側に伝えます
今夜、クラッシュが発生し、ステップ 5 の後、データが実際にリモート ストアにフラッシュされる前に 3 つのトランザクションが失敗しました。したがって、データベースはすべて問題ないと言います。リモート側にも同じことが伝えられましたが、15 秒間の署名付きデータが失われました。そして、これは良くありません。
正しい解決策は、リモート ファイル システムの「同期マウント」を実行することです。しかし、これは短期間で実現するものではありません。この場合でも、アプリが VMWare サーバー上で実行されていることを考えると、このシナリオを完全に信頼することはできません。
ですから、このようなインシデントを防止 (軽減) するための「ベスト エフォート ハック」が必要です。