あなたの賢い人たちがバグの正しいおかしさで私を助けることができるかどうか疑問に思っています.
並行して BLOB ブロックをアップロードしています。これは、ライブ ストレージに対して実行する場合は問題なく動作しますが、開発ストレージに対しては、時折ブロックに対して「指定された BLOB は既に存在します」というエラーが表示されます。奇妙な/皮肉なことに、ブロブが既に存在する場合、エラーは表示されません。
これが私のコードです:
var container = _cloudBlobClient.GetContainerReference(containerName);
container.CreateIfNotExist();
CloudBlockBlob blob = container.GetBlockBlobReference(blobname);
// calc number of blocks. Add 1 for remainder
var blockCount = ((int)Math.Floor((double)(length / mainBlockSize))) + 1;
var blockIds = new List<string>();
Parallel.For(0, blockCount, j =>
{
int blockSize = mainBlockSize;
// if the last block then calculate the remaining block size
if (j == blockCount - 1)
blockSize = (int)length - (mainBlockSize * (blockCount - 1));
var bytes = new byte[blockSize];
string blockId = Convert.ToBase64String(Encoding.UTF8.GetBytes(j.ToString("00000")));
lock (_mutex)
{
// these operations need to co-exist so the correct block order is maintained
blockIds.Add(blockId);
stream.Read(bytes, 0, blockSize);
}
blob.PutBlock(blockId, new MemoryStream(bytes), null);
});
// commit the blob with the list of blocks
blob.PutBlockList(blockIds);
設定してみました
_cloudBlobClient.ParallelOperationThreadCount = 1;
このスレッドで示唆されているように、UploadFile-CloudBlockBlob の動作とは何ですか? 違いがあるかどうかを確認しますが、それでもエラーが発生します。
アーグ!「ライブでは機能するが、マシンのバグでは機能しない」というのは初めてです!:)
Fiddler を使用してすべてのストレージ要求を確認しましたが、Live と Dev の間に違いはないため、これは開発ストレージのバグであると想定しています。これに対処する最善の方法についてのアイデアはありますか?
ありがとう!