在Azure开发存储上,当并行上传块blob时,我得到“指定的blob已经存在”

时间:2010-06-23 23:05:52

标签: azure parallel-processing azure-storage azure-storage-blobs

想知道你是否聪明的人可以帮助我正确处理一个错误。

我正在并行上传blob块,这对于实时存储运行时效果非常好但是对于dev存储我偶然阻止了“指定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;

正如此帖子What is the Behaviour of UploadFile-CloudBlockBlob?所建议的那样,看看它是否会产生任何影响,但仍然存在错误。

精氨酸!我第一次有“在现场工作但不在我的机器上工作”! :)

我已经用Fiddler检查了所有存储请求,Live和Dev之间没有区别,所以我假设这是开发存储的一个错误。关于如何最好地处理这个的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

您是否已在Windows Azure MSDN论坛(http://tinyurl.com/wazforum)上发布此内容?

如果你这样做,来自WA存储团队的人应该跳入,调查并确认它是dev存储的错误。