Azure python SDK - AzureHttpError: The condition specified using HTTP conditional header(s) is not met
Azure python SDK - AzureHttpError: The condition specified using HTTP conditional header(s) is not met
我正在尝试使用以下代码从 Azure Blob 存储下载一个大型 VHD 文件 (30GB):
blob_service.get_blob_to_path('vhds', '20161206092429.vhd', '20161206092429.vhd')
其中第一个参数是容器名称,第二个是 blob 名称,第三个是本地 file/path 它将被保存的地方。这个 30GB 的下载工作正常,但突然间我开始收到这个错误:
AzureHttpError: The condition specified using HTTP conditional
header(s) is not met. ConditionNotMet
The
condition specified using HTTP conditional header(s) is not met.
RequestId:88b6ac24-0001-0001-5ec0-4f490d000000
Time:2016-12-06T12:57:13.5389237Z
下载现在可以正常运行一段时间:有时时间很短,有时时间很长。甚至高达 9 或 10GB 的完整 30GB 下载。
根据这个问题:
这似乎是一个竞争条件,但如果不深入研究和处理 SDK 代码,这对解决问题没有多大帮助。关于可能导致此问题的原因的任何建议,因为下载以前是有效的?可能是 Azure 云中断了?
随着VHD的变化,其相关的ETag也会发生变化。一旦发生这种情况,文件复制操作将不再有效。我相信这就是您通过调用 blob_service.get_blob_to_path()
看到的内容,因为您的 vhd 正在与 运行 VM 一起使用。并且...即使虚拟机处于 idle - 运行 OS 永远不会真正空闲 - 总会有一些后台操作,可能会写入磁盘。
并不是说它能确保文件复制操作成功,但您需要先关闭 VM,然后再启动复制。
或者,您可以制作 VHD 的快照,然后通过快照而不是原始 vhd 进行复制(这样您就可以在复制操作期间继续使用您的 vhd)。
如果您使用 sas_token 创建 blob 服务,它可能只被设置为持续一个小时。如果是这种情况,您可以将创建令牌的到期时间更改为稍后的时间点。
我正在尝试使用以下代码从 Azure Blob 存储下载一个大型 VHD 文件 (30GB):
blob_service.get_blob_to_path('vhds', '20161206092429.vhd', '20161206092429.vhd')
其中第一个参数是容器名称,第二个是 blob 名称,第三个是本地 file/path 它将被保存的地方。这个 30GB 的下载工作正常,但突然间我开始收到这个错误:
AzureHttpError: The condition specified using HTTP conditional header(s) is not met.
ConditionNotMet
The condition specified using HTTP conditional header(s) is not met. RequestId:88b6ac24-0001-0001-5ec0-4f490d000000 Time:2016-12-06T12:57:13.5389237Z
下载现在可以正常运行一段时间:有时时间很短,有时时间很长。甚至高达 9 或 10GB 的完整 30GB 下载。
根据这个问题:
这似乎是一个竞争条件,但如果不深入研究和处理 SDK 代码,这对解决问题没有多大帮助。关于可能导致此问题的原因的任何建议,因为下载以前是有效的?可能是 Azure 云中断了?
随着VHD的变化,其相关的ETag也会发生变化。一旦发生这种情况,文件复制操作将不再有效。我相信这就是您通过调用 blob_service.get_blob_to_path()
看到的内容,因为您的 vhd 正在与 运行 VM 一起使用。并且...即使虚拟机处于 idle - 运行 OS 永远不会真正空闲 - 总会有一些后台操作,可能会写入磁盘。
并不是说它能确保文件复制操作成功,但您需要先关闭 VM,然后再启动复制。
或者,您可以制作 VHD 的快照,然后通过快照而不是原始 vhd 进行复制(这样您就可以在复制操作期间继续使用您的 vhd)。
如果您使用 sas_token 创建 blob 服务,它可能只被设置为持续一个小时。如果是这种情况,您可以将创建令牌的到期时间更改为稍后的时间点。