跳到主要内容

etcdv3

简介

使用gs的grpc和etcdv3通信

注意事项

  • ./src/rpc.proto 为etcd的protobuf定义
  • class_map作用仅是约束并提示map的内容
  • Message类中oneof 以及repeated关键字在class_map中的构造
// 如rpc.proto中定义的RequestOp
message RequestOp {
// 其主要内容是下面类似union的结构
oneof request {
RangeRequest request_range = 1;
PutRequest request_put = 2;
DeleteRangeRequest request_delete_range = 3;
TxnRequest request_txn = 4;
}
}

//gs中并无union, 所以对应class_map的__new()函数为
public void __new(RequestOp self , map _class_data)

//其中_class_data参数的字符串应是{"requestRange": RangeRequest_type_value}, {"requestPut": PutRequest_type_value},{"requestDeleteRange": DeleteRangeRequest_type_value},{"requestTxn": TxnRequest_type_value}其中之一

函数调用样例

import pkg.etcdv3.client_stub;
import gs.lang.string;
import gs.util.base64;

//需要load_static以使用client_stub.gs中定义的class_map
load_static(client_stub);


object client_hand = new_object(client_stub, this_domain());
//客户端连接数据库
client_hand.client_init("127.0.0.1", 2379);

//非流式RPC调用,Put函数的输入如下
// message PutRequest {
// bytes key = 1;
// bytes value = 2;
// int64 lease = 3;
// bool prev_kv = 4;
// bool ignore_value = 5;
// bool ignore_lease = 6;
// }
//public PutResponse Put(PutRequest input)
//Put函数要求输入为PutRequest, 返回为PutResponse
//将 “a”-"b" 键值对放入数据库
client_hand.Put(PutRequest.new({"key":"a".to_buffer(), "value": "b".to_buffer()}));
//查询 结果中"kvs"下"key"为"a","value" 为"b"
write(client_hand.Range(RangeRequest.new({"key":"a".to_buffer()})));

//双向流式RPC调用,创建流
object watch_stream = client_hand.Watch();

//watch_stream请求对键值”a“建立一个时间查看器
watch_stream.send(WatchRequest.new({"createRequest": {"key":"a".to_buffer()}}));

//首次获取到键值”a“的空事件 event为[]
write(watch_stream.recv());

client_hand.Put(PutRequest.new({"key":"a".to_buffer(), "value":"c".to_buffer()}));

//获取到上方键值”a“的Put事件 event为 PUT, ”kv“中有put的相关信息
write(watch_stream.recv());

//关闭流
watch_stream.close_stream();

组件接口如下

client_stub.gs

函数原型函数作用
RangeResponse Range(RangeRequest input)Range 数据库查询操作,从数据库中获取对应键值的数据
PutResponse Put(PutRequest input)Put 将给定的键放入键值存储中
DeleteRangeResponse DeleteRange(DeleteRangeRequest input)DeleteRange 从键值存储中删除给定的范围。
TxnResponse Txn(TxnRequest input)Txn 在一个事务中处理多个请求。
CompactionResponse Compact(CompactionRequest input)Compact 在 etcd 键值存储中压缩事件历史。
object Watch()监视正在发生或已经发生的事件。 输入和输出都是流;
LeaseGrantResponse LeaseGrant(LeaseGrantRequest input)LeaseGrant 创建一个租约,如果服务器在给定的生存期内没有收到 keepAlive,则该租约到期。
LeaseRevokeResponse LeaseRevoke(LeaseRevokeRequest input)LeaseRevoke 撤销租约。 附加到租约的所有密钥都将过期并被删除。
object LeaseKeepAlive()LeaseKeepAlive 通过将保持活动请求从客户端流式传输到服务器并将保持活动响应从服务器流式传输到客户端来保持租约存活。
LeaseTimeToLiveResponse LeaseTimeToLive(LeaseTimeToLiveRequest input)LeaseTimeToLive 检索租约信息。
LeaseLeasesResponse LeaseLeases(LeaseLeasesRequest input)LeaseLeases 列出所有现有的租约。
MemberAddResponse MemberAdd(MemberAddRequest input)MemberAdd 将成员添加到集群中。
MemberRemoveResponse MemberRemove(MemberRemoveRequest input)MemberRemove 从集群中删除现有成员。
MemberUpdateResponse MemberUpdate(MemberUpdateRequest input)MemberUpdate 更新成员配置。
MemberListResponse MemberList(MemberListRequest input)MemberList 列出集群中的所有成员。
AlarmResponse Alarm(AlarmRequest input)警报激活、停用和查询有关集群健康的警报
StatusResponse Status(StatusRequest input)状态获取成员的状态。
DefragmentResponse Defragment(DefragmentRequest input)Defragment 对成员的后端数据库进行碎片整理以恢复存储空间。
HashResponse Hash(HashRequest input)Hash计算KV后端的hash。
HashKVResponse HashKV(HashKVRequest input)HashKV 计算所有 MVCC 键的哈希值,直到给定修订版。
object Snapshot()快照将整个后端的快照从成员通过流发送到客户端。
MoveLeaderResponse MoveLeader(MoveLeaderRequest input)MoveLeader 请求当前领导节点将其领导权转移给受让人。
AuthEnableResponse AuthEnable(AuthEnableRequest input)AuthEnable 启用身份验证。
AuthDisableResponse AuthDisable(AuthDisableRequest input)AuthDisable 禁用身份验证。
AuthenticateResponse Authenticate(AuthenticateRequest input)Authenticate 处理一个认证请求。
AuthUserAddResponse UserAdd(AuthUserAddRequest input)UserAdd 添加一个新用户。
AuthUserGetResponse UserGet(AuthUserGetRequest input)UserGet 获取详细的用户信息。
AuthUserListResponse UserList(AuthUserListRequest input)UserList 获取所有用户的列表。
AuthUserDeleteResponse UserDelete(AuthUserDeleteRequest input)UserDelete 删除指定用户。
AuthUserChangePasswordResponse UserChangePassword(AuthUserChangePasswordRequest input)UserChangePassword 更改指定用户的密码。
AuthUserGrantRoleResponse UserGrantRole(AuthUserGrantRoleRequest input)UserGrant 将角色授予指定用户。
AuthUserRevokeRoleResponse UserRevokeRole(AuthUserRevokeRoleRequest input)UserRevokeRole 撤销指定用户的角色。
AuthRoleAddResponse RoleAdd(AuthRoleAddRequest input)RoleAdd 添加一个新角色。
AuthRoleGetResponse RoleGet(AuthRoleGetRequest input)RoleGet 获取详细的角色信息。
AuthRoleListResponse RoleList(AuthRoleListRequest input)RoleList 获取所有角色的列表。
AuthRoleDeleteResponse RoleDelete(AuthRoleDeleteRequest input)RoleDelete 删除指定的角色。
AuthRoleGrantPermissionResponse RoleGrantPermission(AuthRoleGrantPermissionRequest input)RoleGrantPermission 将指定键或范围的权限授予指定角色。
AuthRoleRevokePermissionResponse RoleRevokePermission(AuthRoleRevokePermissionRequest input)RoleRevokePermission 撤销指定角色的键或范围权限。