2

あなたの賢い人たちがバグの正しいおかしさで私を助けることができるかどうか疑問に思っています.

並行して 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 の間に違いはないため、これは開発ストレージのバグであると想定しています。これに対処する最善の方法についてのアイデアはありますか?

ありがとう!

4

1 に答える 1

0

これを Windows Azure MSDN フォーラム ( http://tinyurl.com/wazforum ) に投稿しましたか?

その場合は、WA ストレージ チームの誰かが参加して調査し、開発ストレージのバグであることを確認する必要があります。

于 2010-06-23T23:44:35.483 に答える