【问题标题】:Azure python SDK - AzureHttpError: The condition specified using HTTP conditional header(s) is not metAzure python SDK - AzureHttpError:不满足使用 HTTP 条件标头指定的条件
【发布时间】:2017-04-21 03:22:47
【问题描述】:

我正在尝试使用以下代码从 Azure Blob 存储下载一个大型 VHD 文件 (30GB):

blob_service.get_blob_to_path('vhds', '20161206092429.vhd', '20161206092429.vhd')

其中第一个参数是容器名称,第二个参数是 blob 名称,第三个参数是保存它的本地文件/路径。这个 30GB 的下载工作正常,但突然间我开始收到这个错误:

AzureHttpError:使用 HTTP 条件指定的条件 不符合标头。 ConditionNotMetThe 不满足使用 HTTP 条件标头指定的条件。 请求ID:88b6ac24-0001-0001-5ec0-4f490d000000 时间:2016-12-06T12:57:13.5389237Z

现在可以在一段时间内正常下载:有时很短,有时很长。甚至高达 9 或 10GB 的完整 30GB 下载。

根据这个问题:

Azure Blob: "The condition specified using HTTP conditional header(s) is not met"

304: The condition specified using HTTP conditional header(s) is not met

这似乎是一种竞争条件,但如果不深入研究并处理 SDK 代码,这对解决问题没有多大帮助。有什么建议可以导致这种情况,因为下载之前可以正常工作?可能是 Azure 云中断?

【问题讨论】:

  • 这与中断无关。只是好奇 - 您是否在积极使用此 vhd(例如,它是否用作当前正在运行的 VM 的磁盘)?
  • vhd 附加的虚拟机正在运行。但是没有人登录它。你认为关闭虚拟机可以解决这个问题吗?

标签: python azure azure-blob-storage azure-sdk azure-sdk-python


【解决方案1】:

随着 VHD 的变化,其相关的 ETag 也会发生变化。一旦发生这种情况,文件复制操作将不再有效。我相信这就是您通过调用blob_service.get_blob_to_path() 所看到的,因为您的 vhd 正在与正在运行的 VM 一起使用。而且...即使 vm idle - 运行中的操作系统永远不会真正空闲 - 总会有一些后台操作,可能会写入磁盘。

并不是说它会确保文件复制操作成功,但您需要先关闭 VM,然后再启动复制。

或者,您可以制作 VHD 的快照,然后通过快照而不是原始 vhd 进行复制(这样您就可以在复制操作期间继续使用您的 vhd)。

【讨论】:

    【解决方案2】:

    如果您使用 sas_token 创建您的 blob 服务,它可能只设置为持续一个小时。如果是这种情况,您可以将创建令牌时的到期时间更改为以后的时间点。

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 2011-09-01
      • 2020-09-30
      • 2021-06-16
      • 2016-08-10
      • 2022-11-27
      • 1970-01-01
      • 2023-02-22
      • 2021-05-15
      相关资源
      最近更新 更多