1

Я пытаюсь загрузить большой файл VHD (30GB) от Azure Blob Storage, используя следующий код:Azure SDK питона - AzureHttpError: условие задается с помощью HTTP-заголовка условного (ов) не встретил

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

где первый параметр - имя контейнера, второе - имя blob, а третий - локальный файл/путь, в котором он будет сохранен. Это 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 или 10 ГБ полной загрузки 30 ГБ.

В соответствии с этим вопросы:

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 код. Любые предложения о том, что может быть причиной этого, поскольку загрузка работала ранее? Может быть, перерыв на облаке Лазур?

+0

Это не связано с отключением. Просто любопытно - активно ли вы используете этот VHD (например, он используется в качестве диска для виртуальной машины, которая в настоящее время работает)? –

+0

Работает VM, к которой подключен vhd. Но никто не регистрируется в нем. Вы думаете, что отключение ВМ позволит решить эту проблему? –

ответ

2

В качестве изменений VHD изменится связанный с ним ETag. Как только это произойдет, операция копирования файлов больше не будет действительной. Я считаю, что это то, что вы видите по вашему звонку до blob_service.get_blob_to_path(), так как ваш VHD используется с запущенной виртуальной машиной. И ... даже если vm idle - работающая ОС никогда не бывает бездействующей - всегда есть некоторые фоновые операции, которые, вероятно, записываются на диск.

Не то, чтобы это обеспечило успешную операцию копирования файлов, но перед началом копирования вам нужно будет отключить виртуальную машину.

В качестве альтернативы вы можете сделать снимок VHD, а затем сделать копию через моментальный снимок вместо исходного vhd (что позволит вам продолжать использовать ваш VHD во время операции копирования).

0

Если вы создаете свой сервис blob с помощью sas_token, он может быть установлен только на час. Если это так, вы можете изменить время истечения срока действия маркера при создании на более поздний момент времени.