Экспорт (0) Печать
Развернуть все

Аренда больших двоичных объектов

Обновлено: Январь 2014 г.

Операция Lease Blob устанавливает блокировку для большого двоичного объекта и управляет ей для операций записи и удаления. Длительность блокировки может составлять от 15 до 60 секунд либо быть бесконечной. В версиях до 2012-02-12 длительность блокировки составляла 60 секунд.

ImportantВажно!
Начиная с версии 2012-02-12, некоторые операции Lease Blob работают не так, как в предыдущих версиях. Например, операция Lease Blob ранее позволяла продлить аренду после ее освобождения. Начиная с версии 2012-02-12, такой запрос завершается ошибкой, в то время как запросы прежних версий Lease Blob по-прежнему будут выполняться успешно. Список изменений поведения этой операции см. в разделе Changes to Lease Blob introduced in version 2012-02-12 в подразделе Remarks.

Операция Lease Blob может быть вызвана в одном из пяти режимов:

  • Acquire — запрос новой аренды;

  • Renew — продление существующей аренды;

  • Change — изменение идентификатора существующей аренды;

  • Release — освобождение аренды, если она больше не нужна, чтобы другой клиент смог сразу же получить аренду на большой двоичный объект;

  • Break — завершение аренды, при этом другой клиент не сможет получить новую аренду, пока не истечет срок текущей.

Запрос Lease Blob можно составить следующим образом. Рекомендуется использовать протокол HTTPS. Замените myaccount именем нужной учетной записи хранения.

 

  URI запроса метода PUT Версия HTTP

https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=lease

HTTP/1.1

При построении запроса к эмулированной службе хранилища укажите имя узла эмулятора и порт службы BLOB-объектов как 127.0.0.1:10000, затем укажите имя эмулированной учетной записи хранилища.

 

  URI запроса метода PUT Версия HTTP

http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=lease

HTTP/1,0

HTTP/1.1

Дополнительные сведения см. в Использование эмулятора хранилища Azure для разработки и тестирования.

В URI запроса могут быть заданы следующие дополнительные параметры.

 

Параметр Описание

timeout

Необязательно. Параметр timeout указывается в секундах. Дополнительные сведения см. в Задание времени ожидания для операций службы BLOB-объектов.

В следующей таблице перечислены обязательные и необязательные заголовки запросов.

 

Заголовок запроса Описание

Authorization

Обязательно. Указывает схему проверки подлинности, имя учетной записи и подпись. Дополнительные сведения см. в Проверка подлинности для служб хранения Azure.

Date или x-ms-date

Обязательно. Задает время в формате UTC для запроса. Дополнительные сведения см. в Проверка подлинности для служб хранения Azure.

x-ms-version

Необязательно. Задает версию операции, используемой для этого запроса. Дополнительные сведения см. в Управление версиями для служб хранилища Azure.

x-ms-lease-id: <ID>

Обязательно при продлении, изменении или освобождении аренды.

Значение x-ms-lease-id может быть указано в любом допустимом формате строки GUID. Список допустимых форматов строки GUID см. в разделе Конструктор GUID (строка).

x-ms-lease-action: <acquire | renew | change | release | break>

acquire: запрашивает новую аренду. Если BLOB-объект не имеет активной аренды, то служба BLOB-объектов создает для него аренду и возвращает новый идентификатор аренды. Если BLOB-объект имеет активную аренду, то запросить новую можно только с помощью идентификатора активной аренды. Однако можно указать другое значение x-ms-lease-duration, в том числе отрицательное значение (-1) для аренды с бесконечным сроком.

renew: продлевает аренду. Аренду можно продлить, если ее идентификатор, указанный в запросе, соответствует идентификатору, связанному с большим двоичным объектом. Обратите внимание, что аренда может быть продлена, если ее срок истек и если большой двоичный объект не был изменен и не получил новую аренду с момента истечения срока. При продлении аренды срок действия начинается заново.

change: версия 2012-02-12 и более поздняя версия. Изменяет идентификатор активной аренды. Значение change должно включать идентификатор текущей аренды в x-ms-lease-id и идентификатор новой аренды в x-ms-proposed-lease-id.

release: освобождает аренду. Аренду можно освободить, если ее идентификатор, указанный в запросе, соответствует идентификатору, связанному с большим двоичным объектом. Освобождение аренды позволяет другому клиенту сразу приобрести аренду для большого двоичного объекта.

break: прекращает аренду, если большой двоичный объект имеет активную аренду. После прекращения аренду нельзя продлить. Авторизованный запрос может прекратить аренду. В запросе не обязательно указывать соответствующий идентификатор аренды. В случае прекращения аренды допускается, чтобы срок ее действия истек до конца, и в этот период в отношении BLOB-объекта можно выполнить только операции break или release. После успешного прекращения аренды ответ указывает интервал в секундах, прежде чем можно будет приобрести новую аренду.

Прекращенную аренду также можно освободить, в этом случае другой клиент сразу сможет приобрести аренду на большой двоичный объект.

x-ms-lease-break-period: N

Версия 2012-02-12 и более поздние, необязательно. Для операции break это предполагаемая длительность аренды в секундах, прежде чем она может быть прекращена (0–60 секунд). Период прерывания используется только в том случае, если он не превышает оставшееся время аренды. В противном случае используется оставшееся время аренды. Новая аренда не будет доступна до истечения срока прерывания, однако аренду можно удерживать дольше срока прерывания. Если этот заголовок не появляется после операции break, то аренда с конечным сроком прекращается по истечении оставшегося времени, а бесконечная аренда прекращается сразу.

x-ms-lease-duration: -1 | N

Версия 2012-02-12 и более поздние — разрешено и требуется для операции acquire. Указывает срок аренды в секундах или отрицательное число (-1) для бесконечной аренды. Конечная аренда может находиться в пределах от 15 до 60 секунд. Срок аренды не может быть изменен с помощью renew или change.

x-ms-proposed-lease-id: <ID>

Версия 2012-02-12 и более поздние — необязательно для acquire, обязательно для change. Идентификатор предлагаемой аренды в формате строки GUID. Служба BLOB-объектов возвращает значение 400 (Invalid request), если идентификатор предлагаемой аренды указан в неверном формате. Список допустимых форматов строки GUID см. в разделе Конструктор GUID (строка).

Origin

Необязательно. Указывает источник, от которого выдан запрос. Наличие этого заголовка приводит к присутствию в ответе заголовков совместного использования ресурсов. Более подробные сведения см. в разделе Поддержка общего доступа к ресурсам независимо от источника (CORS) для служб хранилища Azure.

x-ms-client-request-id

Необязательно. Предоставляет сформированное клиентом непрозрачное значение с ограничением в 1 КБ, которое записывается в журналы аналитики, когда включено ведение журналов аналитики хранилища. Этот заголовок настоятельно рекомендуется использовать для соотнесения действий, выполняемых на стороне клиента, с запросами, получаемыми сервером. Дополнительные сведения см. в разделах Сведения о ведении журнала службы аналитики хранилища и Ведение журналов в Windows Azure: использование журналов для отслеживания запросов к хранилищу.

Эта операция также поддерживает использование условных заголовков для выполнения операции при выполнении определенного условия. Дополнительные сведения см. в Указание условных заголовков для операций со службой BLOB-объектов.

В следующем примере показан запрос на приобретение аренды.


Request Syntax:
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=lease HTTP/1.1

Request Headers:
x-ms-version: 2012-02-12
x-ms-lease-action: acquire
x-ms-lease-duration: -1
x-ms-proposed-lease-id: 1f812371-a41d-49e6-b123-f4b542e851c5
x-ms-date: Thu, 26 Jan 2012 23:30:18 GMT
Authorization: SharedKey testaccount1:esSKMOYdK4o+nGTuTyeOLBI+xqnqi6aBmiW4XI699+o=

Ответ включает код состояния HTTP и набор заголовков ответа.

Коды состояния успешного выполнения для операций аренды.

  • Acquire: успешная операция возвращает код состояния 201 (создано).

  • Renew: успешная операция возвращает код состояния 200 (ОК).

  • Change: успешная операция возвращает код состояния 200 (ОК).

  • Release: успешная операция возвращает код состояния 200 (ОК).

  • Break: успешная операция возвращает код состояния 202 (принято).

Сведения о кодах состояния см. в разделе Коды состояний и ошибок.

Ответ для этой операции включает следующие заголовки. Ответ может также включать дополнительные стандартные заголовки HTTP. Все стандартные заголовки соответствуют Спецификации протокола HTTP/1.1.

 

Синтаксис Описание

ETag

Заголовок ETag содержит значение, которое позволяет выполнять операции условно. Дополнительные сведения см. в разделе Указание условных заголовков для операций со службой BLOB-объектов.

Этот заголовок возвращается для запросов, сделанных к 2013-08-15 и последующей версии, а значение ETag задается в кавычках.

Операция Lease Blob не изменяет это свойство.

Last-Modified

Дата и время последнего изменения BLOB-объекта. Дата в формате согласно RFC 1123. Дополнительные сведения см. в разделе Представление значений даты и времени в заголовках.

Любая операция записи в большой двоичный объект, включая обновления метаданных или свойств, изменяет время последнего изменения большого двоичного объекта. Операция Lease Blob не изменяет это свойство.

x-ms-lease-id: <id>

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

Успешная операция продления также возвращает идентификатор активной аренды.

x-ms-lease-time: seconds

Приблизительное время, оставшееся до истечения срока аренды в секундах. Этот заголовок возвращается только для успешного запроса прекращения аренды. Если прекращение немедленное, возвращается 0.

x-ms-request-id

Этот заголовок однозначно определяет выполненный запрос, его также можно использовать для устранения связанных с запросом неполадок. Дополнительные сведения см. в Устранение неполадок при API-операциях.

x-ms-version

Указывает версию службы BLOB-объектов, используемую для выполнения запроса. Этот заголовок возвращается для запросов к версии 2009-09-19 и более поздним версиям.

Дата

Значение даты и времени в формате UTC, сформированное службой и указывающее время, когда был инициирован ответ.

Access-Control-Allow-Origin

Возвращается, если запрос содержит заголовок Origin и включен CORS с совпадающим правилом. В случае совпадения этот заголовок возвращает значение заголовка источника запроса.

Access-Control-Expose-Headers

Возвращается, если запрос содержит заголовок Origin и включен CORS с совпадающим правилом. Возвращает список заголовков ответа, которые должны быть предоставлены клиенту или отправителю запроса.

Access-Control-Allow-Credentials

Возвращается, если запрос содержит заголовок Origin и включен CORS с совпадающим правилом, которое не допускает использования всех источников. Этот заголовок будет установлен в значение true.

Ниже приведен пример ответа на запрос приобретения аренды.

Response Status:
HTTP/1.1 201 Created

Response Headers:
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: cc6b209a-b593-4be1-a38a-dde7c106f402
x-ms-version: 2012-02-12
x-ms-lease-id: 1f812371-a41d-49e6-b123-f4b542e851c5
Date: Thu, 26 Jan 2012 23:30:18 GMT

Эта операция может быть отменена владельцем учетной записи и любым обладателем подписанного URL-адреса с разрешениями на запись для этого большого двоичного объекта или контейнера.

Аренда большого двоичного объекта предоставляет монопольный доступ к большому двоичному объекту для записи в него и удаления. Для записи в большой двоичный объект с активной арендой клиент должен включить идентификатор активной аренды в запрос записи. Аренда предоставляется на срок, указанный в момент приобретения аренды, который может составлять от 15 секунд до 1 минуты или длиться бесконечно.

Когда клиент приобретает аренду, возвращается идентификатор аренды. Служба BLOB-объектов создает идентификатор аренды, если он не указан в запросе приобретения. Клиент может использовать этот идентификатор аренды для продления аренды, изменения своего идентификатора или освобождения аренды.

Когда аренда активна, идентификатор аренды необходимо включать в запрос любой из следующих операций:

Если идентификатор аренды не включен, то эти операции с арендуемым большим двоичным объектом завершаются ошибкой 412 – Precondition failed.

Следующие операции с арендуемым большим двоичным объектом выполняются успешно без указания идентификатора аренды.

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

Все операции контейнера разрешены для контейнера, который включает большие двоичные объекты с активной арендой, в том числе Удалить контейнер. Поэтому контейнер может быть удален даже в том случае, если большие двоичные объекты внутри него имеют активную аренду. Операция Аренда контейнера позволяет управлять правами удаления контейнера.

На следующей диаграмме показаны 5 состояний аренды и команды или события, которые приводят к изменению состояния аренды.

Состояния аренды BLOB-объекта и триггеры изменения состояния

Состояния аренды

Аренда может находиться в 5 состояниях в зависимости от того, заблокирована ли она, а также возможно ли для нее продление в этом состоянии. Указанные действия с арендой изменяют состояние аренды.

 

  Заблокированная аренда Разблокированная аренда

Продлеваемая аренда

Арендовано

Срок действия истек

Непродлеваемая аренда

Прекращение

Прекращенная, доступна

  • Available — аренда разблокирована и может быть приобретена. Разрешенное действие: acquire.

  • Leased — аренда заблокирована. Разрешенные действия: acquire (только с тем же идентификатором аренды), renew, change, release и break.

  • Expired — срок аренды истек. Разрешенные действия: acquire, renew, release и break.

  • Breaking — аренда прекращена, однако блокировка сохраняется до истечения срока. Разрешенные действия: release и break.

  • Broken — аренда прекращена, срок истек. Разрешенные действия: acquire, release и break.

После истечения срока аренды идентификатор аренды сохраняется службой BLOB-объектов до повторного изменения или аренды. Клиент может попытаться продлить или освободить аренду с помощью идентификатора аренды с истекшим сроком и узнать, была ли операция успешной и был ли изменен большой двоичный объект за время, пока идентификатор аренды был действительным.

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

Если аренда не освобождается, а срок аренды истекает, клиенту придется подождать не более минуты, прежде чем приобретение новой аренды для большого двоичного объекта будет доступно. Однако клиент может продлить аренду с помощью идентификатора аренды сразу же, если большой двоичный объект не был изменен.

Обратите внимание, что аренда не может быть предоставлена на моментальный снимок большого двоичного объекта, поскольку моментальные снимки доступны только для чтения. Запрос аренды для моментального снимка завершается кодом состояния 400 (неверный запрос).

Свойство большого двоичного объекта Last-Modified-Time не обновляется путем вызова метода Lease Blob.

В следующих таблицах показаны результаты действий с большими двоичными объектами с арендой в разных состояниях. Буквы (А), (B) и (C) представляют идентификаторы аренды, а (X) — идентификатор аренды, созданный службой BLOB-объектов.

Результаты действий с большими двоичными объектами по состоянию аренды

  Доступно Арендовано (А) Прекращение (А) Прекращено (А) Истек срок (А)

Запись с помощью (А)

Ошибка (412)

Арендовано (А), успешная запись

Прекращение (А), успешная запись

Ошибка (412)

Ошибка (412)

Запись с помощью (B)

Ошибка (412)

Ошибка (409)

Ошибка (412)

Ошибка (412)

Ошибка (412)

Запись, аренда не указана

Доступно, успешная запись

Ошибка (412)

Ошибка (412)

Доступно, успешная запись

Доступно, успешная запись

Чтение с помощью (А)

Ошибка (412)

Арендовано (А), успешное чтение

Прекращение (А), успешное чтение

Ошибка (412)

Ошибка (412)

Чтение с помощью (B)

Ошибка (412)

Ошибка (409)

Ошибка (409)

Ошибка (412)

Ошибка (412)

Чтение, аренда не указана

Доступно, успешное чтение

Арендовано (А), успешное чтение

Прекращение (А), успешное чтение

Прекращение (А), успешное чтение

Истек срок (А), успешное чтение

Результаты операций с большими двоичными объектами по состоянию аренды

  Доступно Арендовано (А) Прекращение (А) Прекращено (А) Истек срок (А)

Acquire — предлагаемый идентификатор аренды отсутствует

Арендовано (X)

Ошибка (409)

Ошибка (409)

Арендовано (X)

Арендовано (X)

Acquire (A)

Арендовано (А)

Арендовано (А), новый срок

Ошибка (409)

Арендовано (А)

Арендовано (А)

Acquire (B)

Арендовано (B)

Ошибка (409)

Ошибка (409)

Арендовано (B)

Арендовано (B)

Break, срок=0

Ошибка (409)

Прекращено (А)

Прекращено (А)

Прекращено (А)

Прекращено (А)

Break, срок>0

Ошибка (409)

Прекращение (А)

Прекращение (А)

Прекращено (А)

Прекращено (А)

Change, (A) в (B)

Ошибка (409)

Арендовано (B)

Ошибка (409)

Ошибка (409)

Ошибка (409)

Change, (B) в (A)

Ошибка (409)

Арендовано (А)

Ошибка (409)

Ошибка (409)

Ошибка (409)

Change, (B) в (C)

Ошибка (409)

Ошибка (409)

Ошибка (409)

Ошибка (409)

Ошибка (409)

Renew (A)

Ошибка (409)

Арендовано (А), сброс срока

Ошибка (409)

Ошибка (409)

Арендовано (А), если большой двоичный объект не был изменен.

Ошибка (409), если большой двоичный объект был изменен.

Renew (B)

Ошибка (409)

Ошибка (409)

Ошибка (409)

Ошибка (409)

Ошибка (409)

Release (A)

Ошибка (409)

Доступно

Доступно

Доступно

Доступно

Release (B)

Ошибка (409)

Ошибка (409)

Ошибка (409)

Ошибка (409)

Ошибка (409)

Срок истекает

Доступно

Истек срок (А)

Прекращено (А)

Прекращено (А)

Истек срок (А)

Changes to Lease Blob introduced in version 2012-02-12

В следующем списке указаны изменения в поведении аренды больших двоичных объектов в версии 2012-02-12.

  • Вызов метода приобретения аренды теперь должен включать заголовок срока аренды. Попытка получить аренду без указания срока аренды завершается ошибкой 400 Bad Request – Missing required header.

  • После освобождения аренды ее уже нельзя продлить. Попытка продления в этом случае завершается ошибкой 409 Conflict – The lease ID specified did not match the lease ID for the blob. Приложения, которые вызвали освобождение и затем продление, теперь должны сохранить ETag из вызова освобождения и затем вызвать приобретение с условным заголовком If-Match, чтобы выполнить приобретение, только если большой двоичный объект не был изменен.

  • После освобождения аренды ее уже нельзя прекратить. Попытка прекращения в этом случае завершается ошибкой 409 Conflict – There is currently no lease on the blob.

  • Теперь можно прекратить прекращение или прекращенную аренду и сделать операции прекращения идемпотентными. В предыдущих версиях такое действие завершалось ошибкой 409 Conflict – The lease has already been broken and cannot be broken again. Это новшество позволяет уменьшить время прекращения. Если при прекращении аренды, которая находится в состоянии прекращения, указать время, меньшее чем оставшееся время прекращения, то используется наименьшее время.

Показ:
© 2015 Microsoft