CreateLock - 创建元数据锁

创建一个指定的元数据锁。

调试

您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。

授权信息

下表是API对应的授权信息,可以在RAM权限策略语句的Action元素中使用,用来给RAM用户或RAM角色授予调用此API的权限。具体说明如下:

  • 操作:是指具体的权限点。
  • 访问级别:是指每个操作的访问级别,取值为写入(Write)、读取(Read)或列出(List)。
  • 资源类型:是指操作中支持授权的资源类型。具体说明如下:
    • 对于必选的资源类型,用背景高亮的方式表示。
    • 对于不支持资源级授权的操作,用全部资源表示。
  • 条件关键字:是指云产品自身定义的条件关键字。
  • 关联操作:是指成功执行操作所需要的其他权限。操作者必须同时具备关联操作的权限,操作才能成功。
操作访问级别资源类型条件关键字关联操作
dlf:CreateLock
  • 全部资源
    *

请求语法

POST /api/metastore/catalogs/databases/tables/locks HTTP/1.1

请求参数

名称类型必填描述示例值
Bodyobject

body

LockObjListarray

LockObjList

LockObj
  1. 当前 LockObjList 只支持 size 为 1,也就是只能获取一个对象锁
  2. 当前 LockObj 中只支持 table 锁,目前不支持 partition 级别的锁

返回参数

名称类型描述示例值
object

lock response

Codestring

Code

OK
Messagestring

Message

.
RequestIdstring

RequestId

73201200-4C1A-4FEF-BD6B-C0DA7994FFA2
Successboolean

Success

True
LockStatusLockStatus

状态描述

{"lockId":12323,"lockStatus":"ACQUIRED"}
  • code:错误码
  • message:错误信息
  • requestId:标记当前请求唯一 id
  • Success:true/false,判定请求是否成功
  • LockStatus:如果 success,该字段有值,否则为空。LockStatus 中有两个字段:lockId、Lockstate,如果 lockstate 为 Acquired,那么 lockid 有值,否则为空

示例

正常返回示例

JSON格式

{
  "Code": "OK",
  "Message": ".",
  "RequestId": "73201200-4C1A-4FEF-BD6B-C0DA7994FFA2",
  "Success": true,
  "LockStatus": {
    "LockId": 1,
    "LockState": "ACQUIRED"
  }
}

错误码

访问错误中心查看更多错误码。

变更历史

变更时间变更内容概要操作
暂无变更历史

**获取到 lockid 之后,如何在 createtable、update table 使用该 lock?

下面以 CreateTable 接口为例,需要在 header 中把 lock 获取的 lockid 传递进去,这样才能使用 lock。

说明 另外需要注意,lock 有事务语义,只有传入 lock,按照事务隔离性才能获取当前事务的状态,否则看到到是事务提交前的状态。
说明 比如一个请求对表已经加了 lock,同时 delete 了改表,但是如果事务没有提交(也就是没有 unlock),这个时候又来了一个请求,要去 createtable,如果没有带上 lock,那么发现表示存在的,因为看到的是事务提交之前的状态,所以创建失败。如果 createtable,带上这个 lock,那么就进入事务中,就可以看到这个表已经 delete 了,那么 createtable 就能创建成功。
CreateTableRequest request = new CreateTableRequest();
request.catalogId = catalogId;
request.databaseName = databaseName;
request.tableInput = table;

RuntimeOptions runtime = new RuntimeOptions();
Map<String, String> headers = new HashMap();

//需要在建表或者 update 的表中的 header 中设置 lockid
headers.put("metastore-lock-id", String.valueOf(lockId));

CreateTableResponseBody response = client.createTableWithOptions(request, headers, runtime).body;
return new ResultModel<>(response.success, response.code, response.message,
        response.requestId);