导出 (0) 打印
全部展开

租用容器

更新时间: 2014年1月

Lease Container操作针对删除操作建立并管理容器上的锁。锁定持续时间可以为 15 到 60秒,也可以是无限期的。

可以通过以下五种模式之一调用Lease Container 操作:

  • Acquire,用于请求新的租约。

  • Renew,用于续订现有的租约。

  • Change,用于更改现有租约的 ID。

  • Release,用于在不再需要租约时将租约解除,以便其他客户端可以立即获取该容器的租约。

  • Break,用于结束租约,但确保其他客户端在当前租约期到期之前无法获得新的租约。

note备注
2012-02-12 和更高版本中提供了Lease Container 操作。

可以按如下方式构建Lease Container请求。建议使用 HTTPS。将 myaccount 替换为你的存储帐户名称:

 

方法 请求 URI HTTP 版本

PUT

https://myaccount.blob.core.windows.net/mycontainer?comp=lease&restype=container

HTTP/1.1

若要指定根容器,请输入 $root 作为容器名称。

在针对模拟的存储服务发出请求时,请将模拟器主机名和 BLOB 服务端口指定为 127.0.0.1:10000,后跟模拟的存储帐户名称:

 

方法 请求 URI HTTP 版本

PUT

http://127.0.0.1:10000/mycontainer?comp=lease&restype=container

HTTP/1.0

HTTP/1.1

有关详细信息,请参阅使用 Azure 存储模拟器进行开发和测试

可以在请求 URI 上指定以下附加参数。

 

Parameter 说明

timeout

可选。timeout 参数以秒表示。有关详细信息,请参阅为 BLOB 服务操作设置超时

下表介绍必需的和可选的请求标头。

 

请求标头 说明

Authorization

必需。指定身份验证方案、帐户名和签名。有关详细信息,请参阅Azure 存储服务身份验证

Datex-ms-date

必需。为请求指定协调世界时 (UTC)。有关详细信息,请参阅Azure 存储服务身份验证

x-ms-version

可选。指定用于此请求的操作的版本。有关详细信息,请参阅Azure 存储服务版本化

x-ms-lease-id: <ID>

续订、更改或释放租约所必需的。

可以用任何有效的 GUID 字符串格式来指定 x-ms-lease-id 的值。有关有效的 GUID 字符串格式的列表,请参阅 Guid 构造函数(字符串)

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

acquire:请求新的租约。如果容器没有活动租约,Blob 服务将在该容器上创建一个租约并返回新的租约 ID。如果容器具有活动租约,则只能使用活动租约 ID 请求新的租约,但可以指定新的 x-ms-lease duration,包括使用负一 (-1) 表示永不过期的租约。

renew:续订租约。如果在请求中指定的租约 ID 匹配与容器关联的租约 ID,则可以续订该租约。请注意,只要自租约过期以来尚没有再次租用容器,即使租约已过期,也可以对其进行续订。在续订租约时,将重置租约持续时间时钟。

change:更改活动租约的租约 ID。change 必须包括 x-ms-lease-id 中的当前租约 ID 和 x-ms-proposed-lease-id 中的新租约 ID。

release:释放租约。如果在请求中指定的租约 ID 匹配与容器关联的租约 ID,则可以释放该租约。通过释放租约,其他客户端可以在释放完成时立即获取该容器的租约。

break:如果容器具有活动租约,则中断该租约。在中断租约后,无法进行续订。任何授权的请求都可以中断租约;请求不需要指定匹配的租约 ID。租约中断时,允许经历一段租约中断期,在此时间内,不能对容器执行 breakrelease 以外的任何租约操作。在租约成功中断后,响应指示可以获取新租约之前等待的时间间隔(秒)。

也可以释放已中断的租约。客户端可以立即获取已释放的容器租约。

x-ms-lease-break-period: N

可选。对于 break 操作,是指租约在中断之前应持续的建议持续时间(以秒为单位,介于 0 到 60 之间)。只有在少于租约的剩余时间时,才能使用此中断期。如果超过租约的剩余时间,则使用租约的剩余时间。在中断期到期之前,无法使用新租约,但可以将租约保留到超过中断期。如果 break 操作未显示此标头,将在剩余租约期结束后中断固定时间的租约,并立即中断无限期的租约。

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

对于 acquire 是必需的。指定租约的持续时间(秒),或者指定 -1 以表示永不过期的租约。有限期租约在 15 到 60 秒之间。无法使用 renewchange 更改租约持续时间。

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

对于 acquire 是可选的,对于 change 是必需的。建议的租约 ID,采用 GUID 字符串格式。如果建议的租约 ID 格式不正确,BLOB 服务将返回 400 (Invalid request)。有关有效的 GUID 字符串格式的列表,请参阅 Guid 构造函数(字符串)

Origin

可选。指定从中发出请求的来源。如果存在此标头,则会在响应中产生跨域资源共享标头。有关更多信息,请参见对 Azure 存储服务的跨域资源共享 (CORS) 支持

x-ms-client-request-id

可选。提供客户端生成的、附带 1 KB 字符限制的不透明值,在启用存储分析日志记录时,将在分析日志中记录该值。强烈建议使用此标头将客户端活动与服务器接收的请求相关联。有关详细信息,请参阅 关于存储分析日志记录Azure 日志记录:使用日志跟踪存储请求

此操作还支持仅当满足指定条件时才使用条件头执行操作。有关详细信息,请参阅为 Blob 服务操作指定条件标头

无。

以下示例请求说明了如何获取租约:


Request Syntax:
PUT https://myaccount.blob.core.windows.net/mycontainer?restype=container&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。对于针对版本 2013-08-15 和更高版本发出的请求,将返回此标头,并且 ETag 值将用引号引起来。对版本 2013-08-15 和更高版本执行的 Lease Container 操作不修改此属性,但是早期版本将修改此属性。

Last-Modified

针对 15.08.13 和更高版本发出的请求将返回此标头。返回上次修改容器的日期和时间。日期格式遵循 RFC 1123。有关详细信息,请参阅标头中日期/时间值的表示

修改容器或其属性或元数据的任何操作将更新上次修改时间,包括设置容器的权限。Blob 上的操作不会影响容器的上次修改时间。对版本 2013-08-15 和更高版本执行的 Lease Container 操作不修改此属性,但是早期版本修改此属性。

x-ms-lease-id: <id>

在请求租约时,Blob 服务将返回唯一的租约 ID。在租约处于活动状态时,必须在删除容器或者续订、更改或释放租约的任何请求中包含租约 ID。

成功的续订操作还会返回活动租约的租约 ID。

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

只有帐户所有者可以调用此操作。

容器租约提供对容器的排他删除访问。容器租约仅控制是否能够使用删除容器操作来删除容器。若要删除含有活动租约的容器,客户端必须在删除请求中包括活动租约 ID。如果未包括租约 ID,则操作会失败,并显示 412(不满足前提条件)。所有其他容器操作会在未包括租约 ID 的情况下,在已租用的容器上成功完成。将在获取租约时指定的持续时间内(可介于 15 秒到 1 分钟之间,也可以是无限期的)授予租约。

在客户端获取租约时,将返回租约 ID。如果在获取请求中未指定租约 ID,BLOB 服务将生成一个租约 ID。客户端可以使用该租约 ID 续订租约,更改其租约 ID 或释放租约。下图说明了租约的五种状态,以及导致租约状态发生变化的命令或事件。

下图说明了租约的五种状态,以及导致租约状态发生变化的命令或事件。

容器租约状态和状态更改触发器

租约状态

租约可以处于五种状态,具体取决于租约是锁定还是解锁,以及租约在该状态下是否可续订。上述的租约操作导致状态发生变化。

 

  已锁定租约 已解除锁定租约

租约可续订

已租用

已过期

租约不可续订

正在中断

已中断,可用

  • Available,租约已解锁而可以获取。允许的操作:acquire

  • Leased,租约已锁定。允许的操作:acquire(仅相同租约 ID)、renewchangereleasebreak

  • Expired,租约已过期。允许的操作:acquirerenewreleasebreak

  • Breaking,租约已中断,但租约将保持锁定,直到中断期已到期。允许的操作:releasebreak

  • Broken,租约已中断,并且中断期已到期。允许的操作:acquirereleasebreak

在容器租约过期后,租约 ID 由 BLOB 服务保留。客户端可以使用过期的租约 ID 来续订或释放其租约。如果客户端尝试使用以前的租约 ID 来续订或释放已过期租约的请求失败,则客户端就会知道自从上一次容器的租约处于活动状态以来,容器已再次被租用或删除。如果租约过期而不是显式释放,则客户端可能需要在能够获取该容器的新租约之前等待最长一分钟。但是,客户端可以通过过期的租约 ID 立即续订租约。

调用Lease Container不会更新容器的 Last-Modified-Time 属性。

下面的表说明对具有各种租约状态的租约的容器进行操作的结果。字母 (A)、(B) 和 (C) 表示租约 ID,(X) 表示 BLOB 服务生成的租约 ID。

按租约状态对容器进行使用尝试的结果

  可用 已租用 (A) 正在中断 (A) 已中断 (A) 已过期 (A)

删除使用 (A)

失败 (412)

已租用 (A),删除成功

正在中断 (A),删除成功

失败 (412)

失败 (412)

删除使用 (B)

失败 (412)

失败 (409)

失败 (412)

失败 (412)

失败 (412)

删除,未指定租约

可用,删除成功

失败 (412)

失败 (412)

可用,删除成功

可用,删除成功

其他操作使用 (A)

失败 (412)

已租用 (A),操作成功

正在中断 (A),操作成功

失败 (412)

失败 (412)

其他操作使用 (B)

失败 (412)

失败 (409)

失败 (409)

失败 (412)

失败 (412)

其他操作,未指定租约

可用,操作成功

已租用 (A),操作成功

正在中断 (A),操作成功

已中断 (A),操作成功

已过期 (A),操作成功

按租约状态对容器进行租约操作的结果

  可用 已租用 (A) 正在中断 (A) 已中断 (A) 已过期 (A)

Acquire,无建议的租约 ID

已租用 (X)

失败 (409)

失败 (409)

已租用 (X)

已租用 (X)

Acquire (A)

已租用 (A)

已租用 (A),新的持续时间

失败 (409)

已租用 (A)

已租用 (A)

Acquire (B)

已租用 (B)

失败 (409)

失败 (409)

已租用 (B)

已租用 (B)

Break,期间 = 0

失败 (409)

已中断 (A)

已中断 (A)

已中断 (A)

已中断 (A)

Break,期间 >0

失败 (409)

正在中断 (A)

正在中断 (A)

已中断 (A)

已中断 (A)

Change,(A) 到 (B)

失败 (409)

已租用 (B)

失败 (409)

失败 (409)

失败 (409)

Change,(B) 到 (A)

失败 (409)

已租用 (A)

失败 (409)

失败 (409)

失败 (409)

Change,(B) 到 (C)

失败 (409)

失败 (409)

失败 (409)

失败 (409)

失败 (409)

Renew (A)

失败 (409)

已租用 (A),重置到期时钟

失败 (409)

失败 (409)

失败 (409)

Renew (B)

失败 (409)

失败 (409)

失败 (409)

失败 (409)

失败 (409)

Release (A)

失败 (409)

可用

可用

可用

可用

Release (B)

失败 (409)

失败 (409)

失败 (409)

失败 (409)

失败 (409)

持续时间过期

可用

已过期 (A)

已中断 (A)

已中断 (A)

已过期 (A)

显示:
© 2014 Microsoft