mirror of https://github.com/tikv/client-rust.git
192 lines
4.8 KiB
Protocol Buffer
192 lines
4.8 KiB
Protocol Buffer
syntax = "proto3";
|
|
package cdcpb;
|
|
|
|
import "raft_cmdpb.proto";
|
|
import "metapb.proto";
|
|
import "errorpb.proto";
|
|
import "kvrpcpb.proto";
|
|
|
|
import "gogoproto/gogo.proto";
|
|
import "rustproto.proto";
|
|
|
|
option(gogoproto.sizer_all) = true;
|
|
option(gogoproto.marshaler_all) = true;
|
|
option(gogoproto.unmarshaler_all) = true;
|
|
option(rustproto.lite_runtime_all) = true;
|
|
|
|
option java_package = "org.tikv.kvproto";
|
|
|
|
message Header {
|
|
uint64 cluster_id = 1;
|
|
string ticdc_version = 2;
|
|
}
|
|
|
|
message DuplicateRequest {
|
|
uint64 region_id = 1;
|
|
}
|
|
|
|
message Compatibility {
|
|
string required_version = 1;
|
|
}
|
|
|
|
// ClusterIDMismatch is an error variable that
|
|
// tells people that the cluster ID of the request does not match the TiKV cluster ID.
|
|
message ClusterIDMismatch {
|
|
// The current tikv cluster ID.
|
|
uint64 current = 1;
|
|
// The cluster ID of the TiCDC request.
|
|
uint64 request = 2;
|
|
}
|
|
|
|
message Error {
|
|
errorpb.NotLeader not_leader = 1;
|
|
errorpb.RegionNotFound region_not_found = 2;
|
|
errorpb.EpochNotMatch epoch_not_match = 3;
|
|
DuplicateRequest duplicate_request = 4;
|
|
Compatibility compatibility = 5;
|
|
ClusterIDMismatch cluster_id_mismatch = 6;
|
|
errorpb.ServerIsBusy server_is_busy = 7;
|
|
}
|
|
|
|
message TxnInfo {
|
|
uint64 start_ts = 1;
|
|
bytes primary = 2;
|
|
}
|
|
|
|
message TxnStatus {
|
|
uint64 start_ts = 1;
|
|
uint64 min_commit_ts = 2;
|
|
uint64 commit_ts = 3;
|
|
bool is_rolled_back = 4;
|
|
}
|
|
|
|
message Event {
|
|
enum LogType {
|
|
UNKNOWN = 0;
|
|
PREWRITE = 1;
|
|
COMMIT = 2;
|
|
ROLLBACK = 3;
|
|
COMMITTED = 4;
|
|
INITIALIZED = 5;
|
|
}
|
|
|
|
message Row {
|
|
uint64 start_ts = 1;
|
|
uint64 commit_ts = 2;
|
|
LogType type = 3;
|
|
|
|
enum OpType {
|
|
UNKNOWN = 0;
|
|
PUT = 1;
|
|
DELETE = 2;
|
|
}
|
|
OpType op_type = 4;
|
|
bytes key = 5;
|
|
bytes value = 6;
|
|
bytes old_value = 7;
|
|
// expire_ts_unix_secs is used for RawKV (see `ChangeDataRequest.KvApi`),
|
|
// and represents the expiration time of this row.
|
|
// Absolute time, seconds since Unix epoch.
|
|
uint64 expire_ts_unix_secs = 8;
|
|
// The source of this row.
|
|
uint64 txn_source = 9;
|
|
}
|
|
|
|
message Entries {
|
|
repeated Row entries = 1;
|
|
}
|
|
|
|
message Admin {
|
|
raft_cmdpb.AdminRequest admin_request = 1;
|
|
raft_cmdpb.AdminResponse admin_response = 2;
|
|
}
|
|
|
|
message LongTxn {
|
|
repeated TxnInfo txn_info = 1;
|
|
}
|
|
|
|
uint64 region_id = 1;
|
|
uint64 index = 2;
|
|
uint64 request_id = 7;
|
|
oneof event {
|
|
Entries entries = 3;
|
|
Admin admin = 4;
|
|
Error error = 5;
|
|
uint64 resolved_ts = 6 [deprecated=true];
|
|
// Note that field 7 is taken by request_id.
|
|
LongTxn long_txn = 8;
|
|
// More region level events ...
|
|
}
|
|
}
|
|
|
|
// NOTE: events and resolved_ts won't appear simultaneously in one ChangeDataEvent.
|
|
message ChangeDataEvent {
|
|
repeated Event events = 1;
|
|
ResolvedTs resolved_ts = 2;
|
|
// More store level events ...
|
|
}
|
|
|
|
message ResolvedTs {
|
|
repeated uint64 regions = 1;
|
|
uint64 ts = 2;
|
|
uint64 request_id = 3;
|
|
}
|
|
|
|
message ChangeDataRequest {
|
|
message Register {}
|
|
|
|
message Deregister {}
|
|
|
|
message NotifyTxnStatus {
|
|
repeated TxnStatus txn_status = 1;
|
|
}
|
|
|
|
Header header = 1;
|
|
uint64 region_id = 2;
|
|
metapb.RegionEpoch region_epoch = 3;
|
|
|
|
uint64 checkpoint_ts = 4;
|
|
bytes start_key = 5;
|
|
bytes end_key = 6;
|
|
// Used for CDC to identify events corresponding to different requests.
|
|
// Generally in one call stream, a region can be subscribed multiple
|
|
// times with different `request_id`s.
|
|
uint64 request_id = 7;
|
|
|
|
kvrpcpb.ExtraOp extra_op = 8;
|
|
|
|
oneof request {
|
|
// A normal request that trying to register change data feed on a region.
|
|
Register register = 9;
|
|
|
|
// Notify the region that some of the running transactions on the region has a pushed
|
|
// min_commit_ts so that the resolved_ts can be advanced.
|
|
NotifyTxnStatus notify_txn_status = 10;
|
|
|
|
Deregister deregister = 13;
|
|
}
|
|
|
|
// KvAPI specifies to capture data written by different KV API.
|
|
// See more details in https://github.com/tikv/rfcs/blob/master/text/0069-api-v2.md.
|
|
enum KvAPI {
|
|
TiDB = 0;
|
|
RawKV = 1;
|
|
TxnKV = 2;
|
|
}
|
|
|
|
KvAPI kv_api = 11;
|
|
|
|
// Whether to filter out the value write by cdc itself.
|
|
bool filter_loop = 12;
|
|
}
|
|
|
|
service ChangeData {
|
|
rpc EventFeed(stream ChangeDataRequest) returns(stream ChangeDataEvent);
|
|
|
|
// EventFeedV2 is like EventFeed, with some new changes:
|
|
// * clients send requested features in HTTP/2 headers;
|
|
// * if servers meets unsupported feature request,
|
|
// it can fail the stream with an UNIMPLEMENTED error.
|
|
rpc EventFeedV2(stream ChangeDataRequest) returns (stream ChangeDataEvent);
|
|
}
|