2017-04-17 11 views
1

複数のJavaプロセスから同じブロックブロブにパラレルにデータをアップロードしようとしています。プロセスはお互いに話す方法がないので、最後のブロックがいつアップロードされたかはわかりません。ブロックをJava Azureストレージクライアントでブロブにプッシュ

各ブロックは、プロセスによってアップロードされた直後にコミットしたいと思います。私はこれを行うためにcommitBlockListを使うことができると思っていましたが、その振る舞いはコミットされていないブロックを消してしまうようです。私は、各プロセスがBLOBのリースを取得し、downloadBlockListを介してブロックリストをプルダウンし、各プロセスがアップロードしたブロックを更新するように、BLOBへのアクセスを同期しようとしましたが、これはまだ予期しない動作をしますリスト)。

Java AzureストレージクライアントにブロックストレージBLOB内のSINGLEブロックのコミットされたステータスを更新する操作がありますか?あるいは、uploadBlockに渡すことができるいくつかのパラメータがあります。これにより、ブロックのステータスは、アップロードが完了した後にCOMMITEDに設定されます。

答えて

0

[OK]を、私はドキュメントから、私の誤解を考え出し:

「任意のブロックのコミットメントは、ブロブの既存のプロパティとメタデータを上書きし、コミットされていないすべてのブロックを破棄します。」

ブロックリストを更新したいときにリースを取得していましたが、ブロックリストをコミットしたときに、リストに含まれていないコミットされていないブロックがすべて破棄されることに気付いていませんでした。ブロックを書くときに私はリースを取得しませんでした。それは、複数の異なるプロセスを同時にアップロードすることから得られる並列性を破壊するためです。

私は他の何かを試す必要があります。

+0

偉大な、それは答えとしてマークしてください、それは他の人に役立つでしょう。 –

関連する問題