你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
租约文件
操作 Lease File
创建和管理文件上的锁,以便执行写入和删除操作。
Lease File
版本 2019-02-02 及更高版本受支持。
可以在以下模式之一中调用 Lease File
操作:
-
Acquire
,用于请求新的租约。 -
Change
,用于更改现有租约的 ID。 -
Release
,如果不再需要租约,则释放租约,以便另一个客户端可以立即获取针对该文件的租约。 -
Break
,用于强行终止租约,但确保另一个客户端在当前租约期到期之前无法获取新租约。
协议可用性
已启用文件共享协议 | 可用 |
---|---|
SMB | |
NFS |
请求
可以按如下所示构造 Lease File
请求。 建议使用 HTTPS。
方法 | 请求 URI | HTTP 版本 |
---|---|---|
Put |
https://myaccount.file.core.windows.net/myshare/mydirectory/myfile?comp=lease |
HTTP/1.1 |
将请求 URI 中所示的路径组件替换为你自己的组件,如下所示:
路径组件 | 说明 |
---|---|
myaccount |
存储帐户的名称。 |
myshare |
文件共享的名称。 |
mydirectorypath |
可选。 目录的路径。 |
myfile |
文件的名称。 |
URI 参数
可以在请求 URI 上指定以下附加参数。
参数 | 说明 |
---|---|
timeout |
可选。
timeout 参数以秒表示。 有关详细信息,请参阅设置Azure 文件存储操作的超时。 |
请求标头
下表介绍必需的和可选的请求标头。
请求标头 | 说明 |
---|---|
Authorization |
必需。 指定授权方案、帐户名称和签名。 有关详细信息,请参阅授权对 Azure 存储的请求。 |
Date 或 x-ms-date |
必需。 指定请求的协调世界时 (UTC)。 有关详细信息,请参阅授权对 Azure 存储的请求。 |
x-ms-version |
可选。 指定用于此请求的操作的版本。 有关详细信息,请参阅 Azure 存储服务的版本控制。 |
x-ms-lease-id: <ID> |
续订、更改或释放租约所必需的。 可以采用任何有效的 GUID 字符串格式指定 的值 x-ms-lease-id 。 有关有效格式的列表 ,请参阅 Guid 构造函数 (字符串) 。 |
x-ms-lease-action: <acquire ¦ change ¦ release ¦ break> |
acquire :请求新的租约。 如果文件没有活动租约,Azure 文件存储在文件上创建租约,并返回新的租约 ID。 如果文件具有活动租约,则只能使用活动租约 ID 请求新的租约。change :更改活动租约的租约 ID。
change 必须在 中包含当前租约 ID,并在 中包含x-ms-lease-id x-ms-proposed-lease-id 新的租约 ID。release :释放租约。 如果请求中指定的租约 ID 与文件关联的 ID 匹配,则可以释放租约。 释放租约允许另一个客户端在发布完成后立即获取文件的租约。break :如果文件具有活动租约,则中断租约。 任何授权请求都可能会中断租约。 该请求不需要指定匹配的租约 ID。 无限租约立即中断。 |
x-ms-lease-duration: -1 |
仅在操作上 acquire 允许和必需。
-1 必须为 ,以指示永不过期的租约。 |
x-ms-proposed-lease-id: <ID> |
为 acquire 可选,对于 是必需的 change 。 建议的租约 ID,采用 GUID 字符串格式。 如果建议的租约 ID 格式不正确,则Azure 文件存储返回 400 (Invalid request) 。 有关有效格式的列表 ,请参阅 Guid 构造函数 (字符串) 。 |
x-ms-client-request-id |
可选。 提供客户端生成的不透明值,其中包含 1-kibite (KiB) 配置日志记录时记录在日志中的字符限制。 强烈建议使用此标头将客户端活动与服务器接收的请求相关联。 有关详细信息,请参阅监视Azure 文件存储。 |
x-ms-file-request-intent |
如果 Authorization 标头指定 OAuth 令牌,则为必需。 可接受的值为 backup 。 此标头指定Microsoft.Storage/storageAccounts/fileServices/readFileBackupSemantics/action Microsoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/action 如果或包含在分配给使用 标头授权的标识的 RBAC 策略中,则应授予 或 Authorization 。 适用于版本 2022-11-02 及更高版本。 |
x-ms-allow-trailing-dot: { <Boolean> } |
可选。 版本 2022-11-02 及更高版本。 布尔值指定是否应剪裁请求 URL 中存在的尾随点。 有关详细信息,请参阅 命名和引用共享、目录、文件和元数据。 |
请求正文
无。
示例请求
以下示例请求说明了如何获取租约:
Request Syntax:
PUT https://myaccount.file.core.windows.net/myshare/mydirectory/myfile?comp=lease HTTP/1.1
Request Headers:
x-ms-version: 2019-07-07
x-ms-lease-action: acquire
x-ms-lease-duration: -1
x-ms-proposed-lease-id: 1f812371-a41d-49e6-b123-f4b542e851c5
x-ms-date: <date>
Authorization: SharedKey testaccount1:esSKMOYdK4o+nGTuTyeOLBI+xqnqi6aBmiW4XI699+o=
响应
响应包括 HTTP 状态代码和一组响应标头。
状态代码
为租约操作返回的成功状态代码如下所示:
-
Acquire
:此操作成功后返回状态代码 201(已创建)。 -
Change
:此操作成功后返回状态代码 200(正常)。 -
Release
:此操作成功后返回状态代码 200(正常)。 -
Break
:此操作成功后返回状态代码 202(已接受)。
有关状态代码的信息,请参阅 状态和错误代码。
响应头
此操作的响应包括以下标头。 响应还可以包含其他标准 HTTP 标头。 所有标准标头都符合 HTTP/1.1 协议规范。
语法 | 说明 |
---|---|
ETag |
包含可用于有条件地执行操作的值(以引号表示)。 该 Lease File 操作不会修改此属性。 |
Last-Modified |
上次修改该文件的日期/时间。 有关详细信息,请参阅 标头中日期时间值的表示形式。 对文件执行的任何写入操作(包括对文件元数据或属性的更新)将更改文件的上次修改时间。 该 Lease File 操作不会修改此属性。 |
x-ms-lease-id: <id> |
请求租约时,Azure 文件存储返回唯一的租约 ID。 当租约处于活动状态时,必须将租约 ID 包含在写入文件、更改或释放租约的任何请求中。 成功的续订操作还会返回活动租约的租约 ID。 |
x-ms-lease-time: seconds |
仅针对成功请求中断租约返回。
0 返回即时休息时间。 |
x-ms-request-id |
唯一标识发出的请求,可用于对请求进行故障排除。 有关详细信息,请参阅 API 操作疑难解答。 |
x-ms-version |
指示用于运行请求的Azure 文件存储的版本。 |
Date |
一个 UTC 日期/时间值,该值指示启动响应的时间。 服务生成此值。 |
x-ms-client-request-id |
可用于对请求和相应响应进行故障排除。 如果请求中存在此标头的值,则此标头的值等于该标头的值 x-ms-client-request-id 。 该值最多为 1,024 个可见 ASCII 字符。
x-ms-client-request-id 如果请求中不存在标头,则它不会出现在响应中。 |
响应正文
无。
示例响应
下面是获取租约的请求的示例响应:
Response Status:
HTTP/1.1 201 Created
Response Headers:
Server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: cc6b209a-b593-4be1-a38a-dde7c106f402
x-ms-version: 2019-07-07
x-ms-lease-id: 1f812371-a41d-49e6-b123-f4b542e851c5
Date: <date>
授权
帐户所有者可以调用此操作。 此外,任何具有共享访问签名且有权写入此文件或其共享的客户端都可以执行此操作。
注解
文件租约提供对文件的独占写入和删除访问权限。 若要写入具有活动租约的文件,客户端必须在写入请求中包含活动租约 ID。 授予租约无限期。
在客户端获取租约时,将返回租约 ID。 如果未在获取请求中指定租约 ID,Azure 文件存储会生成一个租约 ID。 客户端可以使用此租约 ID 更改其租约 ID 或释放租约。
在租约处于活动状态时,必须在任何以下操作的请求中包含租约 ID:
如果未包含租约 ID,则这些操作在租用的文件中失败,并出现 412 – Precondition failed
。
在未包含租约 ID 的情况下,对租用文件执行以下操作会成功:
- 获取文件
- 获取文件元数据
- 获取文件属性
- 列出范围
- 列出目录和文件
- 复制文件 (源文件不需要租用 ID。)
-
租用文件 (REST API) (.) 不需要
x-ms-lease-action: break
租用 ID
对于具有活动租约的文件的操作,无需包含租约 ID GET
。 但是,所有操作都 GET
支持条件租用参数。 在此类型的参数中,仅当请求附带的租约 ID 有效时,操作才会继续。
允许对包含具有活动租约的文件(包括 删除共享)的共享执行所有共享操作。 因此,即使共享中的文件具有活动租约,也可以删除共享。
租用状态
下图显示了租约的三种状态,以及导致租约状态更改的命令或事件。
租约可以处于三个状态,具体取决于租约是锁定还是解锁,以及该状态中的租约是否可续订。 上图中显示的租用操作会导致状态转换。
-
Available
:租约已解锁,可以获取。 允许的操作:acquire
。 -
Leased
:租约已锁定。 允许的操作:acquire
仅) 、change
release
和break
(相同的租约 ID。 -
Broken
:租约已中断。 允许的操作:acquire
、release
和break
。
请注意,不能为共享快照中的文件授予租约,因为快照是只读的。 对共享快照中的文件请求租约会导致状态代码 400 (错误的请求) 。
如果文件租约处于 “中断 ”状态,并且“放置范围”操作写入了该文件,则租约状态将更改为 “可用”。 但是,如果文件设置了只读属性,则服务器将返回冲突 409。
文件的 Last-Modified-Time
属性不会通过调用 Lease File
来更新。
下表显示了对处于各种租约状态的租约的文件的操作结果。 字母 (A) 、 (B) 和 (C) 表示租约 ID, (X) 表示Azure 文件存储生成的租约 ID。
按租约状态对文件进行使用尝试的结果
操作 | 可用 | 已租用 (A) | 已中断 (A) |
---|---|---|---|
使用 (A) 进行写入 | 失败 (412) | 已租用 (A),写入成功 | 失败 (412) |
使用 (B) 写入 | 失败 (412) | (409) 失败 | 失败 (412) |
写入,未指定租约 | 可用,写入成功 | 失败 (412) | 可用,写入成功 |
使用 (A) 读取 | 失败 (412) | 已租用 (A),读取成功 | 失败 (412) |
使用 (B) 读取 | 失败 (412) | (409) 失败 | 失败 (412) |
读取,未指定租约 | 可用,读取成功 | 已租用 (A),读取成功 | 已中断 (A),读取成功 |
按租用状态对文件进行的租用操作的结果
操作 | 可用 | 已租用 (A) | 已中断 (A) |
---|---|---|---|
Acquire ,无建议的租约 ID |
已租用 (X) | (409) 失败 | 已租用 (X) |
Acquire (A) |
已租用 (A) | 已租用 (A) | 已租用 (A) |
Acquire (B) |
已租用 (B) | (409) 失败 | 已租用 (B) |
Break |
(409) 失败 | 已中断 (A) | 已中断 (A) |
Change ,(A) 到 (B) |
(409) 失败 | 已租用 (B) | (409) 失败 |
Change ,(B) 到 (A) |
(409) 失败 | 已租用 (A) | (409) 失败 |
Change ,(B) 到 (C) |
(409) 失败 | (409) 失败 | (409) 失败 |
Release (A) |
(409) 失败 | 可用 | 可用 |
Release (B) |
(409) 失败 | (409) 失败 | (409) 失败 |