Azure python SDK - AzureHttpError: условие, указанное с использованием условных заголовков HTTP, не выполняется

Я пытаюсь загрузить большой VHD-файл (30 ГБ) из хранилища BLOB-объектов Azure, используя следующий код:

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

где первый параметр - это имя контейнера, второй - имя большого двоичного объекта, а третий - локальный файл / путь, в котором он будет сохранен. Эта загрузка 30 ГБ работала нормально, но внезапно я начал получать эту ошибку:

AzureHttpError: условие, указанное с помощью условных заголовков HTTP, не выполнено. ConditionNotMetУсловие, указанное с помощью условных заголовков HTTP, не выполнено. RequestId:88b6ac24-0001-0001-5ec0-4f490d000000 Время:2016-12-06T12:57:13.5389237Z

Загрузка теперь выполняется нормально в течение некоторого случайного времени: иногда очень короткое, а иногда долгое. Даже до 9 или 10 ГБ полной загрузки 30 ГБ.

По этим вопросам:

BLOB-объект Azure: "Условие, указанное с помощью условных заголовков HTTP, не выполнено"

304: условие, указанное с использованием условных заголовков HTTP, не выполнено

Кажется, это условие гонки, но это мало помогает в решении проблемы без погружения в код SDK и работы с ним. Любые предложения о том, что может быть причиной этого, так как загрузка работала ранее? Может быть, сбой в облаке Azure?

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам