导出 (0) 打印
全部展开

租用 Blob

更新时间: 2014年1月

Lease Blob 操作为写入和删除操作设置和管理 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,用于更改现有租约的 ID。

  • Release,用于在不再需要租约时将其释放,以便其他客户端可以立即获取针对 Blob 的租约。

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

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

 

  PUT 方法请求 URI HTTP 版本

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

HTTP/1.1

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

 

  PUT 方法请求 URI HTTP 版本

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

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 没有活动租约,Blob 服务将在 Blob 上创建一个租约并返回新的租约 ID。如果 Blob 具有活动租约,则只能使用活动租约 ID 请求新的租约,但可以指定新的 x-ms-lease-duration,包括使用 -1 表示永不过期的租约。

renew:续订租约。如果在请求中指定的租约 ID 与 Blob 的关联租约 ID 匹配,则可以续订租约。请注意,即使租约已过期,但只要在该租约过期后未修改或再次租用 Blob,就可以续订租约。在续订租约时,将重置租约持续时间时钟。

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

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

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

也可以释放已中断的租约,此时,其他客户端可以立即获取 Blob 的租约。

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 秒之间。无法使用 renewchange 更改租约持续时间。

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

2012-02-12 和更高版本,对于 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/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。有关详细信息,请参阅标头中日期/时间值的表示

针对 Blob 的任何写操作(包括更新 Blob 的元数据或属性)都会更改 Blob 的上次修改时间。Lease Blob 操作不修改此属性。

x-ms-lease-id: <id>

在请求租约时,Blob 服务将返回唯一的租约 ID。在租约处于活动状态时,必须在写入到 Blob 或者续订、更改或释放租约的任何请求中包含租约 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

此操作可由帐户所有者调用执行,也可由有权向此 Blob 或其容器写入数据并具有共享访问签名的任何客户端执行。

Blob 上的租约提供对 Blob 的排他写入和删除访问。要写入到具有活动租约的 Blob 中,客户端必须在写入请求中包含活动租约 ID。将在获取租约时指定的持续时间内授予租约(15 秒到 1 分钟之间,也可以是无限期的)。

在客户端获取租约时,将返回租约 ID。如果在获取请求中未指定租约 ID,BLOB 服务将生成一个租约 ID。客户端可以使用该租约 ID 续订租约,更改其租约 ID 或释放租约。

在租约处于活动状态时,必须在任何以下操作的请求中包含租约 ID:

如果未包含租约 ID,租用的 Blob 上的这些操作将失败并返回 412 – Precondition failed

在未包含租约 ID 时,租用的 Blob 上的以下操作将成功:

对于具有活动租约的 Blob 上的 GET 操作,不需要包含租约 ID。不过,所有 GET 操作均支持条件租约参数;只有在请求中包含的租约 ID 有效时,才会执行该操作。

允许在包含具有活动租约的 Blob 的容器上执行所有容器操作,包括 删除容器。因此,即使容器中的 Blob 具有活动租约,也可以删除容器。可以使用租用容器 操作控制删除容器的权限。

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

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

租约状态

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

 

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

租约可续订

已租用

已过期

租约不可续订

正在中断

已中断,可用

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

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

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

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

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

在租约过期后,BLOB 服务将保留租约 ID,直到已修改或再次租用 Blob。客户端可以尝试使用过期的租约 ID 续订或释放租约,并知道如果操作成功,则说明租约 ID 在上次处于有效状态后未更改 Blob。

如果客户端尝试使用以前的租约 ID 续订或释放并且请求失败,则客户端知道租约在上次处于有效状态后已修改或再次租用 Blob。然后,客户端必须在 Blob 上获取新的租约。

如果租约过期而不是显式将其释放,客户端可能需要最多等待 1 分钟,然后才能获取新的 Blob 租约。不过,如果尚未修改 Blob,则客户端可以使用其租约 ID 立即续订租约。

请注意,无法为 Blob 快照授予租约,因为快照是只读的。如果针对快照请求租约,则会导致返回状态代码 400(错误的请求)。

Lease Blob 调用不会更新 Blob 的 Last-Modified-Time 属性。

下表说明了在具有处于不同状态的租约的 Blob 上执行操作的结果。字母 (A)、(B) 和 (C) 表示租约 ID,(X) 表示 BLOB 服务生成的租约 ID。

Blob 上的使用尝试的结果,按租约状态划分

  可用 已租用 (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),读取成功

Blob 上的租约操作的结果,按租约状态划分

  可用 已租用 (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)

已租用 (A)(如果未修改 Blob)。

失败 (409)(如果已修改 Blob)。

Renew (B)

失败 (409)

失败 (409)

失败 (409)

失败 (409)

失败 (409)

Release (A)

失败 (409)

可用

可用

可用

可用

Release (B)

失败 (409)

失败 (409)

失败 (409)

失败 (409)

失败 (409)

持续时间过期

可用

已过期 (A)

已中断 (A)

已中断 (A)

已过期 (A)

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

以下列表指定了 2012-02-12 版中引入的“租用 Blob”行为变化。

  • 用于获取租约的“租用 Blob”调用现在必须包含租约持续时间标头。如果尝试获取租约而未指定租约持续时间,此操作将失败并返回 400 Bad Request – Missing required header

  • 在释放租约后,你无法再续订该租约。否则,此操作将失败并返回 409 Conflict – The lease ID specified did not match the lease ID for the blob。调用 release 并随后调用 renew 的应用程序现在必须保存 release 调用中的 ETag,并使用 If-Match 条件标头调用 acquire 以仅在未更改 Blob 时获取租约。

  • 在释放租约后,你无法再中断该租约。否则,此操作将失败并返回 409 Conflict – There is currently no lease on the blob

  • 现在,你可以中断正在中断或已中断的租约,从而使中断操作是幂等的。在以前的版本中,此操作将失败并返回 409 Conflict – The lease has already been broken and cannot be broken again。可以通过此更改缩短中断的持续时间。如果中断处于正在中断状态的租约,并包括比剩余中断期短的持续时间,则使用较短的持续时间。

Microsoft 正在进行一项网上调查,以了解您对 MSDN 网站的意见。 如果您选择参加,我们将会在您离开 MSDN 网站时向您显示该网上调查。

是否要参加?
显示:
© 2014 Microsoft