Azure BLOB可能的错误 - 随机错误的文件

时间:2015-10-16 22:34:19

标签: c# azure azure-storage azure-storage-blobs

所以,我知道在Azure生命周期中报告bug有点疯狂,但我没有选择。我们走了。

我们有一项服务,您可以上传文件和下载的客户端。那个BLOB充满了大约27 GB的数据。

在一些情况下,我们的用户报告说有些文件出错了,所以我们检查了我们的MVC路线,看看是否有什么问题,什么都没发现。

因此我们创建了一个循环下载的简单控制台:

public static void Main()
{

    var firstHash = string.Empty;
    var client = new System.Net.WebClient();
    for (int i = 0; i < 5000; i++)
    {
        try
        {
            var date = DateTime.Now.ToString("HH-mm-ss-ffff");

            var destination = @"C:\Users\Israel\Downloads\RO65\BLOB - RO65 -" + date + ".rfa";
            client.DownloadFile("http://myboxfree.blob.core.windows.net/public/91fe9d90-71ce-4036-b711-a5300159abfa.rfa", destination);

            string hash = string.Empty;
            using (var md5 = MD5.Create())
            {
                using (var stream = File.OpenRead(destination))
                {
                    hash = Convert.ToBase64String(md5.ComputeHash(stream));
                }
            }

            if (string.IsNullOrEmpty(firstHash))
                firstHash = hash;

            if (hash != firstHash) hash += " ---------------------------------------------";
            Console.WriteLine("i: " + i.ToString() + " = " + hash);
        }
        catch { }
    }
}

所以这是结果 - 不时地下载错误的文件:

enter image description here

前1000次下载都没问题,是正确的文件。出乎意料的是,BLOB返回一个不同的文件,然后恢复正常。

我在文件中找到的唯一关系是扩展名和文件大小(以字节为单位)。哈希(当然)不同。

有什么想法?

1 个答案:

答案 0 :(得分:3)

我试图重新运行您的示例代码,但无法重现。

问题:

  • 对于您看到的两个不同版本的文件,您是否比较了这两个文件的内容?我想你说这是两个完全不同的blob被检索 - 但我想验证。两个文件之间的差异有多大?
  • 您是否正在使用RA-GRS并且客户端库从次要重试条件中读取 - 这意味着网络故障可能导致读取来自次要区域?

建议:

  • 您可以跟踪检索到的文件的etag吗?这允许您检查自您第一次开始阅读后blob是否已更改?
  • Storage Service确实使您能够明确验证对象的完整性,以检查它们是否在传输过程中被修改 - 可能是由于网络问题等。有关详细信息,请参阅Azure Storage Md5 Overview。然而,最简单的方法可能就是使用https,因为这些验证已内置到https中。
  • 您是否也可以尝试重新使用https,如果有帮助请告诉我?