VENTAS: 1-800-867-1389

Lease Blob

Actualizado: enero de 2014

La operación Lease Blob establece y administra un bloqueo en un blob para las operaciones de escritura y eliminación. La duración del bloqueo puede ser de 15 a 60 segundos o infinita. En las versiones anteriores a 2012-02-12, la duración del bloqueo es de 60 segundos.

ImportantImportante
A partir de la versión 2012-02-12, algunos comportamientos de la operación Lease Blob son distintos de los de las versiones anteriores. Por ejemplo, en las versiones anteriores de la operación Lease Blob, se podía renovar una concesión depués de haberla liberado. A partir de la versión 2012-02-12, esta solicitud de concesión produce un error, mientras que las llamadas con versiones anteriores de Lease Blob siguen funcionando. Para obtener una lista de los cambios en el comportamiento de esta operación, vea la sección Changes to Lease Blob introduced in version 2012-02-12, situada debajo de Remarks.

Existen cinco formas de llamar a la operación Lease Blob:

  • Acquire, para solicitar una nueva concesión.

  • Renew, para renovar una concesión existente.

  • Change, para cambiar el identificador de una concesión existente.

  • Release, para liberar la concesión si ya no se necesita con objeto de que otro cliente pueda adquirir inmediatamente una concesión sobre el blob.

  • Break, para finalizar la concesión y asegurarse de que ningún otro cliente podrá adquirir una nueva hasta que haya expirado el período actual de concesión.

La solicitud Lease Blob se puede construir como sigue. Se recomienda HTTPS. Reemplace myaccount por el nombre de la cuenta de almacenamiento:

 

  URI de solicitud del método PUT Versión de HTTP

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

HTTP/1.1

Al realizar una solicitud en el servicio de almacenamiento emulado, especifique el nombre de host del emulador y el puerto del servicio Blob como 127.0.0.1:10000, seguido del nombre de la cuenta de almacenamiento emulado:

 

  URI de solicitud del método PUT Versión de HTTP

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

HTTP/1,0

HTTP/1.1

Para obtener más información, vea Uso del emulador de almacenamiento de Azure para desarrollo y prueba.

Se pueden especificar los parámetros adicionales siguientes en el URI de solicitud.

 

Parámetro Descripción

timeout

Opcional. El parámetro timeout se expresa en segundos. Para obtener más información, vea Establecer los tiempos de espera para las operaciones del servicio Blob.

En la tabla siguiente se describen los encabezados de solicitud requeridos y opcionales.

 

Encabezado de solicitud Descripción

Authorization

Requerido. Especifica el esquema de autenticación, el nombre de la cuenta y la firma. Para obtener más información, vea Autenticación para los servicios de almacenamiento de Azure.

Date O bien x-ms-date

Requerido. Especifica la hora universal coordinada (UTC) para la solicitud. Para obtener más información, vea Autenticación para los servicios de almacenamiento de Azure.

x-ms-version

Opcional. Especifica la versión de la operación que se utiliza para esta solicitud. Para obtener más información, vea Control de versiones de los servicios de almacenamiento de Azure.

x-ms-lease-id: <ID>

Obligatorio para renovar, cambiar o liberar la concesión.

El valor de x-ms-lease-id se puede especificar con cualquier formato válido de cadena de GUID. Vea Constructor de Guid (cadena) para obtener una lista de formatos válidos de cadena de GUID.

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

acquire: solicita una nueva concesión. Si el blob no tiene una concesión activa, el servicio Blob crea una concesión sobre el blob y devuelve un nuevo identificador de concesión. Si el blob tiene una concesión activa, solo se puede solicitar una nueva utilizando el identificador de la concesión activa, pero es posible especificar un nuevo valor de x-ms-lease-duration, incluido un valor negativo (-1) para una concesión que no expira nunca.

renew: renueva la concesión. La concesión se puede renovar si el identificador de concesión especificado en la solicitud coincide con el que está asociado al blob. Tenga en cuenta que la concesión se puede renovar incluso si ha expirado, siempre que el blob no se haya modificado o concedido de nuevo desde la caducidad de la concesión. Cuando se renueva una concesión, el reloj que controla su duración se reinicia.

change: versión 2012-02-12 y versiones más recientes. Cambia el identificador de concesión de una concesión activa. La acción change debe incluir el identificador actual de concesión en x-ms-lease-id y un nuevo identificador de concesión en x-ms-proposed-lease-id.

release: libera la concesión. La concesión se puede liberar si el identificador de concesión especificado en la solicitud coincide con el que está asociado al blob. Liberar la concesión permite a otro cliente adquirir inmediatamente la concesión sobre el blob en cuanto finaliza la operación de liberación.

break: interrumpe la concesión si el blob tiene una concesión activa. Una vez que se interrumpe una concesión, no es posible renovarla. Cualquier solicitud autorizada puede interrumpir la concesión; no es necesario que la solicitud especifique un identificador de concesión que coincida. Cuando se interrumpe una concesión, se deja que transcurra el período de interrupción de la concesión, durante el cual no se puede realizar en el blob ninguna operación de concesión excepto break y release. Cuando una concesión se interrumpe correctamente, la respuesta indica el intervalo en segundos que debe transcurrir hasta que se pueda obtener una nueva concesión.

Una concesión interrumpida también puede liberarse, en cuyo caso otro cliente puede adquirir inmediatamente la concesión sobre el blob.

x-ms-lease-break-period: N

Versión 2012-02-12 y versiones más recientes; opcional. Para una operación break, es la duración propuesta de la concesión (entre 0 y 60 segundos) durante la cual la concesión debería continuar antes de interrumpirla. Este período de interrupción solo se utiliza si es menor que el tiempo restante de la concesión. Si es más largo, se utiliza el tiempo restante de la concesión. Hasta que no haya expirado el período de interrupción no habrá disponible una nueva concesión, pero la concesión se puede mantener durante un tiempo más largo que el período de interrupción. Si no se incluye este encabezado con una operación break, una concesión de duración fija se interrumpe después de que transcurre el período restante de la concesión, y una concesión infinita se interrumpe inmediatamente.

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

Versión 2012-02-12 y versiones más recientes; se permite y es obligatorio únicamente en una operación acquire. Especifica la duración de la concesión, en segundos, o bien un valor negativo (-1) para una concesión que no expira nunca. Un concesión no infinita puede durar entre 15 y 60 segundos. La duración de una concesión no se puede cambiar con renew o change.

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

Versión 2012-02-12 y versiones más recientes; opcional para acquire y obligatorio para change. Identificador de concesión propuesto, con formato de cadena de GUID. El servicio Blob devuelve 400 (Invalid request) si el identificador de concesión propuesto no tiene el formato correcto. Vea Constructor de Guid (cadena) para obtener una lista de formatos válidos de cadena de GUID.

Origin

Opcional. Especifica el origen del que se emitirá la solicitud. La presencia de este encabezado da lugar a encabezados de uso compartido de recursos entre orígenes (CORS) en la respuesta. Vea Compatibilidad con Uso compartido de recursos entre orígenes (CORS) para los Servicios de almacenamiento de Azure para obtener información más detallada.

x-ms-client-request-id

Opcional. Proporciona un valor opaco generado por el cliente con un límite de caracteres de 1 KB que se graba en los registros de análisis cuando el registro de análisis de almacenamiento está habilitado. Se recomienda encarecidamente usar este encabezado para correlacionar las actividades del lado cliente con las solicitudes recibidas por el servidor. Para obtener más información, vea Acerca del registro del análisis de almacenamiento y Registro de Windows Azure: usar registros para realizar el seguimiento de las solicitudes de almacenamiento.

Esta operación también admite el uso de encabezados condicionales que permiten ejecutar la operación solo si se cumple una condición especificada. Para obtener más información, vea Especificar encabezados condicionales para las operaciones del servicio Blob.

La solicitud de ejemplo siguiente muestra cómo adquirir una concesión:


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=

La respuesta incluye un código de estado HTTP y un conjunto de encabezados de respuesta.

Los códigos de estado correctos devueltos para las operaciones de concesión son los siguientes:

  • Acquire: una operación correcta devuelve el código de estado 201 (Creada).

  • Renew: una operación correcta devuelve el código de estado 200 (Correcto).

  • Change: una operación correcta devuelve el código de estado 200 (Correcto).

  • Release: una operación correcta devuelve el código de estado 200 (Correcto).

  • Break: una operación correcta devuelve el código de estado 202 (Aceptada).

Para obtener información acerca de los códigos de estado, vea Códigos de estado y de error.

La respuesta para esta operación incluye los encabezados siguientes. La respuesta también puede incluir otros encabezados HTTP estándar. Todos los encabezados estándar cumplen la especificación del protocolo HTTP/1.1.

 

Sintaxis Descripción

ETag

El encabezado ETag contiene un valor que se puede utilizar para realizar operaciones condicionales. Vea Especificar encabezados condicionales para las operaciones del servicio Blob para obtener más información.

Este encabezado se devuelve para las solicitudes realizadas en la versión 2013-08-15 y versiones posteriores, y el valor de ETag estará en comillas.

La operación Lease Blob no modifica esta propiedad.

Last-Modified

La fecha y la hora en la que se modificó por última vez el blob. El formato de la fecha sigue las convenciones de RFC 1123. Para obtener más información, vea Representación de valores de fecha u hora en encabezados.

Cualquier operación de escritura realizada en el blob, incluidas las actualizaciones de los metadatos o las propiedades del blob, cambia la hora de la última modificación del blob. La operación Lease Blob no modifica esta propiedad.

x-ms-lease-id: <id>

Cuando se solicita una concesión, el servicio Blob devuelve un identificador único de concesión. Mientras la concesión está activa, se debe incluir el identificador de concesión con cualquier solicitud para escribir en el blob o para renovar, cambiar o liberar la concesión.

Una operación renew correcta también devuelve el identificador de concesión para la concesión activa.

x-ms-lease-time: seconds

Tiempo restante aproximado del período de concesión, en segundos. Este encabezado solo se devuelve para una solicitud correcta de interrupción de la concesión. Si la interrupción es inmediata, se devuelve 0.

x-ms-request-id

Este encabezado identifica de forma única la solicitud que se realizó y se puede utilizar para solucionar problemas relacionados con esta. Para obtener más información, vea Solucionar problemas relacionados con las operaciones de la API.

x-ms-version

Indica la versión del servicio Blob utilizado para ejecutar la solicitud. Este encabezado se devuelve para las solicitudes realizadas en la versión 2009-09-19 y versiones posteriores.

Date

Valor de fecha y hora UTC generado por el servicio que indica la hora a la que se inició la respuesta.

Access-Control-Allow-Origin

Se devuelve si la solicitud incluye un encabezado Origin y se ha habilitado CORS con una regla de coincidencia. Este encabezado devuelve el valor del encabezado Origin de la solicitud en caso de que haya una coincidencia.

Access-Control-Expose-Headers

Se devuelve si la solicitud incluye un encabezado Origin y se ha habilitado CORS con una regla de coincidencia. Devuelve la lista de encabezados de respuesta que se van a exponer al cliente o el emisor de la solicitud.

Access-Control-Allow-Credentials

Se devuelve si la solicitud incluye un encabezado Origin y se ha habilitado CORS con una regla de coincidencia que no permite todos los orígenes. Este encabezado se establecerá en true.

A continuación se muestra una respuesta de ejemplo para una solicitud de adquisición de una concesión:

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

La llamada a esta operación la puede realizar el propietario de la cuenta y cualquier cliente que disponga de una firma de acceso compartido con permiso para escribir en este blob o en su contenedor.

Una concesión sobre un blob proporciona acceso exclusivo de escritura y eliminación sobre el blob. Para escribir en un blob con una concesión activa, un cliente debe incluir el identificador de la concesión activa en la solicitud de escritura. La concesión se concede con la duración que se especifica durante su adquisición, que puede ser entre 15 segundos y un minuto, o tener una duración infinita.

Cuando un cliente adquiere una concesión, se devuelve un identificador de concesión. El servicio Blob generará un identificador de concesión si no se especifica uno en la solicitud de adquisición. El cliente puede utilizar este identificador de concesión para renovar la concesión, cambiar su identificador de concesión o para liberarla.

Cuando una concesión está activa, se debe incluir el identificador de concesión en la solicitud para cualquiera de las operaciones siguientes:

Si no se incluye el identificador de concesión, se producirá un error 412 – Precondition failed al realizar estas operaciones con un blob sujeto a una concesión.

Las operaciones siguientes se realizan correctamente en un blob sujeto a una concesión sin necesidad de incluir el identificador de concesión:

No es necesario incluir el identificador de concesión para operaciones GET que se realizan en un blob con una concesión activa. Sin embargo, todas las operaciones GET admiten un parámetro de concesión condicional, que hace que la operación solo continúe si el identificador de concesión incluido en la solicitud es válido.

Se admiten todas las operaciones de contenedor en un contenedor que incluye blobs con una concesión activa, como Delete Container. Por lo tanto, un contenedor puede eliminarse aunque los blobs que contiene tengan concesiones activas. Utilice la operación Lease Container para controlar los derechos para eliminar un contenedor.

En el diagrama siguiente se muestran los cinco estados de una concesión y los comandos o los eventos que provocan cambios en el estado de la misma.

Estados de concesión de blob y desencadenadores de cambio de estado

Estados de concesión

Una concesión puede estar en 5 estados, que dependen de si la concesión está bloqueada o desbloqueada y de si es renovable en ese estado. Las acciones de concesión anteriores provocan transiciones de estado.

 

  Concesión bloqueada Concesión desbloqueada

Concesión renovable

Leased

Expirado

Concesión no renovable

Breaking

Broken, Available

  • Available: la concesión está desbloqueada y se puede adquirir. Acción permitida: acquire.

  • Leased: la concesión está bloqueada. Acciones permitidas: acquire (solo con el mismo identificador de concesión), renew, change, release y break.

  • Expired: la duración de la concesión ha expirado. Acciones permitidas: acquire, renew, release y break.

  • Breaking: la concesión se ha interrumpido, pero seguirá bloqueada hasta que haya expirado el período de interrupción. Acciones permitidas: release y break.

  • Broken: la concesión se ha interrumpido y el período de interrupción ha expirado. Acciones permitidas: acquire, release y break.

Una vez que ha expirado una concesión, el servicio Blob mantiene el identificador de concesión hasta que el blob se modifica o se concede de nuevo. Un cliente puede intentar renovar o liberar la concesión mediante su identificador de concesión expirada y saber que, si la operación se realiza correctamente, significa que el blob no ha cambiado desde que el identificador de concesión fue válido por última vez.

Si el cliente intenta renovar o liberar una concesión con el identificador de concesión anterior y se produce un error en la solicitud, el cliente sabe que el blob se ha modificado o se ha concedido de nuevo desde que la concesión estuvo activa por última vez. En ese caso, el cliente deberá adquirir una nueva concesión sobre el blob.

Si una concesión expira en lugar de liberarse explícitamente, es posible que el cliente tenga que esperar hasta un minuto para poder adquirir una nueva concesión sobre el blob. Sin embargo, el cliente puede renovar la concesión inmediatamente con el identificador de concesión si el blob no se ha modificado.

Tenga en cuenta que no se puede conceder una concesión para una instantánea de blob, dado que las instantáneas son de solo lectura. Si se solicita una concesión sobre una instantánea, se obtiene el código de estado 400 (Solicitud incorrecta).

La propiedad Last-Modified-Time del blob no se actualiza mediante llamadas a Lease Blob.

En las tablas siguientes se muestran los resultados de realizar distintas acciones sobre blobs con concesiones en distintos estados de concesión. Las letras (A), (B) y (C) representan identificadores de concesión, y (X) representa un identificador de concesión generado por el servicio Blob.

Resultados de los intentos de utilizar blobs según su estado de concesión

  Available Leased (A) Breaking (A) Broken (A) Expired (A)

Escribir usando (A)

Error (412)

Leased (A), la escritura se realiza correctamente

Breaking (A), la escritura se realiza correctamente

Error (412)

Error (412)

Escribir usando (B)

Error (412)

Error (409)

Error (412)

Error (412)

Error (412)

Escribir sin especificar la concesión

Available, la escritura se realiza correctamente

Error (412)

Error (412)

Available, la escritura se realiza correctamente

Available, la escritura se realiza correctamente

Leer usando (A)

Error (412)

Leased (A), la lectura se realiza correctamente

Breaking (A), la lectura se realiza correctamente

Error (412)

Error (412)

Leer usando (B)

Error (412)

Error (409)

Error (409)

Error (412)

Error (412)

Leer sin especificar la concesión

Available, la lectura se realiza correctamente

Leased (A), la lectura se realiza correctamente

Breaking (A), la lectura se realiza correctamente

Broken (A), la lectura se realiza correctamente

Expired (A), la lectura se realiza correctamente

Resultados de las operaciones de concesión sobre los blobs según su estado de concesión

  Available Leased (A) Breaking (A) Broken (A) Expired (A)

Acquire sin identificador de concesión propuesto

Leased (X)

Error (409)

Error (409)

Leased (X)

Leased (X)

Acquire (A)

Leased (A)

Leased (A), nueva duración

Error (409)

Leased (A)

Leased (A)

Acquire (B)

Leased (B)

Error (409)

Error (409)

Leased (B)

Leased (B)

Break, período=0

Error (409)

Broken (A)

Broken (A)

Broken (A)

Broken (A)

Break, período>0

Error (409)

Breaking (A)

Breaking (A)

Broken (A)

Broken (A)

Change, (A) a (B)

Error (409)

Leased (B)

Error (409)

Error (409)

Error (409)

Change, (B) a (A)

Error (409)

Leased (A)

Error (409)

Error (409)

Error (409)

Change, (B) a (C)

Error (409)

Error (409)

Error (409)

Error (409)

Error (409)

Renew (A)

Error (409)

Leased (A), reloj de caducidad restablecido

Error (409)

Error (409)

Leased (A) si el blob no se ha modificado.

Error (409) si se ha modificado el blob.

Renew (B)

Error (409)

Error (409)

Error (409)

Error (409)

Error (409)

Release (A)

Error (409)

Available

Available

Available

Available

Release (B)

Error (409)

Error (409)

Error (409)

Error (409)

Error (409)

La duración expira

Available

Expired (A)

Broken (A)

Broken (A)

Expired (A)

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

En la lista siguiente se indican los cambios en el comportamiento de Lease Blob introducidos en la versión 2012-02-12.

  • Una llamada a Lease Blob para adquirir una concesión ahora debe incluir un encabezado de duración de la concesión. Si se intenta adquirir una concesión sin especificar una duración de concesión, se obtendrá el error 400 Bad Request – Missing required header.

  • Ya no se puede renovar una concesión después de liberarla. Si se intenta hacerlo, se producirá el error 409 Conflict – The lease ID specified did not match the lease ID for the blob. Las aplicaciones que llamaban a la acción release y después a renew ahora deben guardar el valor ETag de la llamada a release y, a continuación, llamar a acquire con un encabezado condicional If-Match para adquirir la concesión únicamente cuando el blob no varía.

  • Ya no se puede interrumpir una concesión después de liberarla. Si se intenta ahora, se producirá el error 409 Conflict – There is currently no lease on the blob.

  • Ahora es posible interrumpir una concesión que se está interrumpiendo o que está interrumpida, lo que hace que las operaciones de interrupción se conviertan en idempotentes. En versiones anteriores, esto provocaba el error 409 Conflict – The lease has already been broken and cannot be broken again. Este cambio permite acortar la duración de una interrupción. Si se interrumpe una concesión que está interrumpiéndose y se incluye una duración menor que el período de interrupción restante, se utilizará la duración menor.

¿Te ha resultado útil?
(Caracteres restantes: 1500)
Gracias por sus comentarios
Mostrar:
© 2014 Microsoft