client-rust/proto/cdcpb.proto

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);
}