2017-04-17 1 views
1

Ich versuche, Daten aus mehreren Java-Prozessen parallel in den gleichen Block Blob zu laden. Die Prozesse können nicht miteinander kommunizieren, so dass sie nicht wissen, wann der letzte Block hochgeladen wurde.Blöcke in Blob mit Java-Azur-Speicher-Client einfügen

Ich möchte jeden Block sofort begehen, nachdem es von einem Prozess hochgeladen wurde. Ich dachte, ich könnte commitBlockList dazu verwenden, aber sein Verhalten scheint nicht festgeschriebene Blöcke zu löschen. Ich habe versucht, den Zugriff auf den Blob über eine Lease zu synchronisieren, so dass jeder Prozess eine Lease für den Blob erhält und die Blockliste über downloadBlockList herunterlädt und die Blöcke aktualisiert, die jeder Prozess hochgeladen hat, aber dies hat immer noch unerwartetes Verhalten (Blöcke verschwinden immer wieder) Die Liste).

Gibt es eine Operation im Java Azure Storage Client, die es mir erlaubt, den festgeschriebenen Status eines SINGLE-Blocks in einem Blockspeicher-Blob zu aktualisieren? Oder gibt es einen Parameter, den ich an uploadBlock übergeben kann und der den Status des Blocks sofort nach Abschluss des Uploads auf COMMITED setzen würde?

Antwort

0

Ok, dachte ich, mein Missverständnis aus der Dokumentation: „Jeder Block Verpflichtung überschreibt die vorhandenen Eigenschaften des Blobs und Metadaten und verwirft alle nicht gebundenen Blöcke“

Ich habe die Lease nur erworben, als ich die Blockliste aktualisieren wollte, ohne zu merken, dass ich, wenn ich die Sperrliste festlegte, alle noch nicht in der Liste enthaltenen nicht committeten Blöcke zerstören würde. Ich habe den Mietvertrag nicht erhalten, als ich meine Blöcke geschrieben habe, denn das würde jegliche Parallelität zerstören, die mir dadurch entstehen würde, dass mehrere verschiedene Prozesse gleichzeitig hochgeladen werden.

Ich muss nur etwas anderes versuchen.

+0

Großartig, bitte markieren Sie es als Antwort, es wird anderen helfen. –