From e4a38331aac9c0386ebbe96b5563195e32b11b25 Mon Sep 17 00:00:00 2001
From: qupeng <qupeng@pingcap.com>
Date: Sun, 7 Apr 2024 16:03:16 +0800
Subject: [PATCH 1/2] support pipeline dml protocol in cdc

Signed-off-by: qupeng <qupeng@pingcap.com>
---
 pkg/cdcpb/cdcpb.pb.go | 241 ++++++++++++++++------------
 proto/cdcpb.proto     |   4 +
 scripts/proto.lock    | 359 +++++++++++++++---------------------------
 3 files changed, 266 insertions(+), 338 deletions(-)

diff --git a/pkg/cdcpb/cdcpb.pb.go b/pkg/cdcpb/cdcpb.pb.go
index c8c92816a..995963996 100644
--- a/pkg/cdcpb/cdcpb.pb.go
+++ b/pkg/cdcpb/cdcpb.pb.go
@@ -709,13 +709,15 @@ func (*Event) XXX_OneofWrappers() []interface{} {
 }
 
 type Event_Row struct {
-	StartTs  uint64           `protobuf:"varint,1,opt,name=start_ts,json=startTs,proto3" json:"start_ts,omitempty"`
-	CommitTs uint64           `protobuf:"varint,2,opt,name=commit_ts,json=commitTs,proto3" json:"commit_ts,omitempty"`
-	Type     Event_LogType    `protobuf:"varint,3,opt,name=type,proto3,enum=cdcpb.Event_LogType" json:"type,omitempty"`
-	OpType   Event_Row_OpType `protobuf:"varint,4,opt,name=op_type,json=opType,proto3,enum=cdcpb.Event_Row_OpType" json:"op_type,omitempty"`
-	Key      []byte           `protobuf:"bytes,5,opt,name=key,proto3" json:"key,omitempty"`
-	Value    []byte           `protobuf:"bytes,6,opt,name=value,proto3" json:"value,omitempty"`
-	OldValue []byte           `protobuf:"bytes,7,opt,name=old_value,json=oldValue,proto3" json:"old_value,omitempty"`
+	StartTs  uint64        `protobuf:"varint,1,opt,name=start_ts,json=startTs,proto3" json:"start_ts,omitempty"`
+	CommitTs uint64        `protobuf:"varint,2,opt,name=commit_ts,json=commitTs,proto3" json:"commit_ts,omitempty"`
+	Type     Event_LogType `protobuf:"varint,3,opt,name=type,proto3,enum=cdcpb.Event_LogType" json:"type,omitempty"`
+	// generation is for pipelined DML protocol. See kvrpcpb.FlushRequest.generation.
+	Generation uint64           `protobuf:"varint,10,opt,name=generation,proto3" json:"generation,omitempty"`
+	OpType     Event_Row_OpType `protobuf:"varint,4,opt,name=op_type,json=opType,proto3,enum=cdcpb.Event_Row_OpType" json:"op_type,omitempty"`
+	Key        []byte           `protobuf:"bytes,5,opt,name=key,proto3" json:"key,omitempty"`
+	Value      []byte           `protobuf:"bytes,6,opt,name=value,proto3" json:"value,omitempty"`
+	OldValue   []byte           `protobuf:"bytes,7,opt,name=old_value,json=oldValue,proto3" json:"old_value,omitempty"`
 	// 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.
@@ -781,6 +783,13 @@ func (m *Event_Row) GetType() Event_LogType {
 	return Event_UNKNOWN
 }
 
+func (m *Event_Row) GetGeneration() uint64 {
+	if m != nil {
+		return m.Generation
+	}
+	return 0
+}
+
 func (m *Event_Row) GetOpType() Event_Row_OpType {
 	if m != nil {
 		return m.OpType
@@ -1428,101 +1437,102 @@ func init() {
 func init() { proto.RegisterFile("cdcpb.proto", fileDescriptor_911209a1d38ef245) }
 
 var fileDescriptor_911209a1d38ef245 = []byte{
-	// 1502 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0xcd, 0x72, 0xdb, 0xc8,
-	0x11, 0x26, 0xf8, 0xcf, 0xe6, 0x8f, 0xa0, 0xb1, 0x63, 0xd3, 0x4c, 0x45, 0x71, 0x68, 0x3b, 0x91,
-	0x9d, 0x0a, 0x6d, 0x33, 0x71, 0x0e, 0x4e, 0xc5, 0x89, 0x28, 0xd2, 0x11, 0x4b, 0x14, 0xe5, 0x1a,
-	0x41, 0x72, 0x55, 0x0e, 0x41, 0x41, 0xc0, 0x88, 0x42, 0x91, 0xc4, 0xc0, 0xc0, 0x90, 0x26, 0x6f,
-	0x39, 0xe6, 0x92, 0x5b, 0x0e, 0x79, 0x84, 0x7d, 0x92, 0xad, 0x3d, 0xee, 0xd1, 0xc7, 0x2d, 0xef,
-	0x23, 0xec, 0x0b, 0x6c, 0x4d, 0x0f, 0x00, 0xfe, 0xd8, 0xf2, 0x56, 0xed, 0x89, 0xd3, 0xfd, 0xf5,
-	0xf4, 0xf4, 0x7f, 0x83, 0x50, 0xb6, 0x1d, 0xdb, 0xbf, 0x6c, 0xf9, 0x01, 0x17, 0x9c, 0xe4, 0x90,
-	0x68, 0xe8, 0x81, 0x75, 0x25, 0x4c, 0x7b, 0xea, 0xc4, 0x40, 0xa3, 0x32, 0x65, 0xc2, 0x4a, 0xa8,
-	0x2a, 0x0b, 0x02, 0x1e, 0xac, 0xc8, 0xf1, 0x3c, 0xf0, 0x13, 0x25, 0x8d, 0xdb, 0x23, 0x3e, 0xe2,
-	0x78, 0x7c, 0x2a, 0x4f, 0x11, 0x77, 0x27, 0x98, 0x85, 0x02, 0x8f, 0x8a, 0xd1, 0x1c, 0x40, 0xfe,
-	0x88, 0x59, 0x0e, 0x0b, 0xc8, 0xaf, 0x00, 0xec, 0xc9, 0x2c, 0x14, 0x2c, 0x30, 0x5d, 0xa7, 0xae,
-	0xdd, 0xd7, 0xf6, 0xb3, 0xb4, 0x14, 0x71, 0xfa, 0x0e, 0x79, 0x00, 0x55, 0xe1, 0xda, 0x8e, 0x6d,
-	0xce, 0x59, 0x10, 0xba, 0xdc, 0xab, 0xa7, 0xef, 0x6b, 0xfb, 0x25, 0x5a, 0x41, 0xe6, 0x85, 0xe2,
-	0x35, 0x9f, 0x82, 0xde, 0x9d, 0xf9, 0x13, 0xd7, 0xb6, 0x04, 0xa3, 0xec, 0xdd, 0x8c, 0x85, 0x82,
-	0xfc, 0x12, 0x4a, 0x01, 0x1b, 0xb9, 0xdc, 0x5b, 0xa9, 0x2d, 0x2a, 0x46, 0xdf, 0x69, 0xbe, 0x84,
-	0xea, 0x21, 0x9f, 0xfa, 0x96, 0x70, 0x2f, 0xdd, 0x89, 0x2b, 0x96, 0xe4, 0x31, 0xe8, 0x01, 0x7b,
-	0x37, 0x73, 0x03, 0xe6, 0x24, 0x2f, 0x69, 0xf8, 0xd2, 0x4e, 0xcc, 0x8f, 0x1f, 0xfb, 0x07, 0xec,
-	0x1e, 0x46, 0xe6, 0x75, 0x4f, 0xdc, 0x70, 0x6a, 0x09, 0xfb, 0x9a, 0xd4, 0xa1, 0x60, 0xcf, 0x82,
-	0x80, 0x79, 0x22, 0x7a, 0x2b, 0x26, 0x25, 0x12, 0x28, 0x93, 0xd0, 0xf4, 0x2c, 0x8d, 0xc9, 0xe6,
-	0xd7, 0x19, 0xc8, 0xf5, 0x64, 0x2c, 0xc9, 0x73, 0x00, 0x8f, 0x0b, 0x73, 0x82, 0x11, 0x41, 0x05,
-	0xe5, 0x36, 0x69, 0xc5, 0x71, 0x1e, 0x72, 0x31, 0x40, 0x84, 0x96, 0xbc, 0xf8, 0x48, 0x0e, 0xa4,
-	0xc1, 0xe8, 0x9e, 0xbc, 0x79, 0xc5, 0x67, 0x9e, 0x83, 0xfa, 0xcb, 0xed, 0xbb, 0xc9, 0x45, 0x8a,
-	0x02, 0x43, 0x2e, 0x5e, 0x4b, 0x98, 0xd6, 0x82, 0x0d, 0x9a, 0xbc, 0x82, 0x1d, 0xe6, 0x73, 0xfb,
-	0x1a, 0x35, 0xa0, 0x1b, 0xf5, 0x0c, 0x6a, 0xb8, 0x93, 0x68, 0xe8, 0x49, 0x7c, 0xc8, 0xc5, 0x89,
-	0x44, 0x69, 0x95, 0xad, 0x93, 0xa4, 0x0b, 0xbb, 0x4e, 0x1c, 0x75, 0x33, 0xf6, 0x31, 0x1b, 0xd9,
-	0xa0, 0x0a, 0x6b, 0x3b, 0x2b, 0x54, 0x77, 0xb6, 0xf3, 0xf4, 0x12, 0xaa, 0xf6, 0x7a, 0x2a, 0xea,
-	0x39, 0xd4, 0x70, 0x3b, 0xd2, 0xb0, 0x91, 0x26, 0xba, 0x29, 0x4a, 0x8e, 0xe0, 0xd6, 0xaa, 0x76,
-	0xcc, 0x69, 0x94, 0x8c, 0x7a, 0x1e, 0x35, 0xd4, 0x63, 0x0d, 0xdb, 0xc9, 0xa2, 0xbb, 0x49, 0x79,
-	0x25, 0xf9, 0xfb, 0x0b, 0xd4, 0x42, 0x16, 0xcc, 0xa5, 0xa2, 0xd0, 0xbc, 0x9c, 0x85, 0xcb, 0x7a,
-	0x01, 0x95, 0xfc, 0x22, 0x09, 0xc5, 0x19, 0xc2, 0xfd, 0xb0, 0x33, 0x0b, 0x97, 0xb4, 0x12, 0xae,
-	0x51, 0xcd, 0x57, 0x50, 0x30, 0x16, 0x5e, 0xdf, 0xbb, 0xe2, 0xe4, 0x1e, 0x14, 0x43, 0x61, 0x05,
-	0xc2, 0x14, 0x61, 0x5c, 0x08, 0x48, 0x1b, 0xa1, 0x2c, 0x04, 0x3f, 0x70, 0xa7, 0x56, 0xb0, 0xc4,
-	0x44, 0x55, 0x68, 0x4c, 0x36, 0xff, 0xab, 0x41, 0xc9, 0x58, 0x78, 0x67, 0xc2, 0x12, 0xb3, 0xf0,
-	0x4b, 0x2a, 0x9a, 0x50, 0x9d, 0xba, 0x9e, 0x69, 0xf3, 0xe9, 0xd4, 0x45, 0x5c, 0x55, 0x54, 0x79,
-	0xea, 0x7a, 0x87, 0xc8, 0x33, 0x42, 0x59, 0xf7, 0x2b, 0x3c, 0xa3, 0xea, 0xde, 0x8e, 0xc1, 0x87,
-	0x50, 0x73, 0x43, 0x33, 0xe0, 0x93, 0x09, 0x73, 0xcc, 0x4b, 0xcb, 0x1e, 0x63, 0xbe, 0x8a, 0xb4,
-	0xe2, 0x86, 0x14, 0x99, 0x1d, 0xcb, 0x1e, 0x37, 0x7f, 0x28, 0x40, 0xae, 0x37, 0x97, 0xc5, 0xfb,
-	0xa5, 0x26, 0x22, 0xb7, 0x21, 0xe7, 0x7a, 0x0e, 0x5b, 0x44, 0x56, 0x28, 0x42, 0xf6, 0x73, 0x54,
-	0x0b, 0xf2, 0x4e, 0x41, 0xf5, 0x73, 0xc4, 0xe9, 0x3b, 0xe4, 0x19, 0x14, 0x98, 0x27, 0x02, 0x97,
-	0x85, 0x51, 0xb1, 0xc5, 0x89, 0xc6, 0x07, 0x5b, 0x3d, 0x85, 0x1d, 0xa5, 0x68, 0x2c, 0x46, 0x9e,
-	0x40, 0xce, 0x72, 0xa6, 0xae, 0x17, 0x95, 0x16, 0xd9, 0x90, 0x3f, 0x90, 0xc8, 0x51, 0x8a, 0x2a,
-	0x11, 0xf2, 0x10, 0x72, 0x98, 0xaf, 0xa8, 0x88, 0x2a, 0xb1, 0xac, 0xe4, 0x49, 0x29, 0x04, 0xc9,
-	0x23, 0x28, 0x07, 0x2c, 0xe4, 0x93, 0x39, 0x73, 0x64, 0x90, 0x64, 0xb9, 0x64, 0x3b, 0xe9, 0xba,
-	0x76, 0x94, 0xa2, 0x10, 0x03, 0x46, 0x48, 0x9e, 0x43, 0x71, 0xc2, 0xbd, 0x91, 0x29, 0x16, 0x5e,
-	0xbd, 0xf8, 0x19, 0x5b, 0x07, 0xdc, 0x1b, 0x19, 0x0b, 0xf9, 0x7a, 0x61, 0xa2, 0x8e, 0x8d, 0x0f,
-	0x69, 0xc8, 0x50, 0xfe, 0xfe, 0x4b, 0x39, 0xdc, 0xc8, 0x4f, 0x7a, 0x2b, 0x3f, 0xfb, 0x90, 0x15,
-	0x4b, 0x9f, 0x61, 0x68, 0x6a, 0x9f, 0x3c, 0x37, 0x32, 0x96, 0x3e, 0xa3, 0x28, 0x21, 0xe3, 0xc8,
-	0x7d, 0x13, 0x85, 0xb3, 0x28, 0x7c, 0x77, 0x43, 0x98, 0xf2, 0xf7, 0xad, 0x53, 0x1f, 0xe5, 0xf3,
-	0x1c, 0x7f, 0x89, 0x0e, 0x99, 0x31, 0x53, 0xed, 0x55, 0xa1, 0xf2, 0x28, 0x13, 0x38, 0xb7, 0x26,
-	0x33, 0x86, 0x11, 0xa8, 0x50, 0x45, 0x48, 0x03, 0xf9, 0xc4, 0x31, 0x15, 0x52, 0x40, 0xa4, 0xc8,
-	0x27, 0xce, 0x05, 0x82, 0x7f, 0x80, 0x5b, 0x6c, 0xe1, 0xbb, 0x01, 0x33, 0x45, 0x68, 0xce, 0x3c,
-	0x77, 0x61, 0x86, 0xcc, 0x0e, 0x31, 0x3c, 0x59, 0xaa, 0x2b, 0xc8, 0x08, 0xcf, 0x3d, 0x77, 0x71,
-	0xc6, 0xec, 0x50, 0x16, 0x83, 0x58, 0x78, 0x66, 0xc8, 0x67, 0x81, 0xcd, 0xea, 0x25, 0x55, 0x0c,
-	0x62, 0xe1, 0x9d, 0x21, 0xa3, 0xf9, 0x04, 0xf2, 0xca, 0x48, 0x52, 0x86, 0xc2, 0xf9, 0xf0, 0x78,
-	0x78, 0xfa, 0x76, 0xa8, 0xa7, 0x48, 0x01, 0x32, 0x6f, 0xce, 0x0d, 0x5d, 0x23, 0x00, 0xf9, 0x6e,
-	0x6f, 0xd0, 0x33, 0x7a, 0x7a, 0xba, 0xf1, 0x02, 0x0a, 0xbd, 0xa4, 0x22, 0x92, 0x1a, 0xd2, 0xee,
-	0x67, 0xf6, 0xcb, 0x6d, 0x7d, 0xdb, 0xf7, 0xa4, 0x7a, 0x1a, 0xff, 0xd1, 0x20, 0x87, 0x45, 0x42,
-	0xfe, 0x0a, 0x55, 0x2c, 0x92, 0x64, 0x54, 0x69, 0xd1, 0x98, 0x58, 0xdb, 0x77, 0x28, 0x19, 0xcf,
-	0xaa, 0x8a, 0xb5, 0x46, 0x91, 0xbf, 0x43, 0x2d, 0xbe, 0x1e, 0xfa, 0xdc, 0x0b, 0x59, 0x34, 0x6e,
-	0xef, 0x7d, 0xe6, 0xbe, 0x12, 0xa0, 0x55, 0x6b, 0x9d, 0x6c, 0xfc, 0x09, 0x0a, 0x51, 0xc9, 0x90,
-	0xc7, 0x50, 0x94, 0x71, 0x71, 0xbd, 0x2b, 0x1e, 0xb9, 0x50, 0x8b, 0x5c, 0x88, 0x06, 0x09, 0x2d,
-	0x08, 0x75, 0x68, 0xfe, 0x4b, 0xde, 0x1a, 0x7d, 0x1a, 0xa4, 0x0a, 0x14, 0xdf, 0xd0, 0xde, 0x5b,
-	0xda, 0x37, 0x7a, 0x2a, 0x52, 0x87, 0xa7, 0x27, 0x27, 0x7d, 0x43, 0x4f, 0x4b, 0x84, 0x9e, 0x0e,
-	0x06, 0x9d, 0x83, 0xc3, 0x63, 0x3d, 0x43, 0xaa, 0x50, 0x52, 0x88, 0xd1, 0xeb, 0xea, 0x59, 0xb2,
-	0x03, 0xe5, 0xfe, 0xb0, 0x6f, 0xf4, 0x0f, 0x06, 0xfd, 0x7f, 0xf6, 0xba, 0x7a, 0xae, 0x53, 0x80,
-	0x1c, 0x93, 0x61, 0x6b, 0x8e, 0x61, 0xe7, 0xf0, 0xda, 0xf2, 0x46, 0xac, 0x6b, 0x09, 0x4b, 0xb5,
-	0xff, 0x43, 0xc8, 0x23, 0x16, 0xc7, 0xb9, 0xb2, 0x1e, 0x67, 0x1a, 0x61, 0xa4, 0xbd, 0xd9, 0x4e,
-	0x2a, 0x2c, 0xbb, 0x91, 0x28, 0x4d, 0xfa, 0x69, 0xbd, 0xb7, 0x9a, 0xe7, 0x00, 0x2b, 0x44, 0xed,
-	0x48, 0x39, 0x55, 0xd4, 0x43, 0xb8, 0x23, 0x91, 0x24, 0x35, 0x48, 0x27, 0x6d, 0x92, 0x16, 0xe1,
-	0xd6, 0x74, 0xc9, 0x6c, 0x4d, 0x97, 0xe6, 0xbf, 0xf3, 0xb0, 0xbb, 0x72, 0x22, 0x4e, 0xdd, 0x23,
-	0xc8, 0x5f, 0xaf, 0xaf, 0xd6, 0x6a, 0x64, 0x9b, 0xfa, 0x02, 0xa1, 0x11, 0xb8, 0x39, 0xec, 0xd2,
-	0x5b, 0xc3, 0xee, 0xcf, 0x50, 0x89, 0x40, 0x5c, 0x82, 0xd1, 0xf0, 0xba, 0xd5, 0x8a, 0x3e, 0x8d,
-	0xd4, 0xaa, 0xc5, 0x75, 0x49, 0xcb, 0xc1, 0x8a, 0x90, 0xdf, 0x2f, 0xf6, 0x35, 0xb3, 0xc7, 0x3e,
-	0x77, 0x3d, 0x6c, 0xf9, 0x2c, 0x2a, 0xae, 0xac, 0x98, 0x6a, 0x26, 0xa8, 0x71, 0xb1, 0x6a, 0x50,
-	0x35, 0x3f, 0x8e, 0xd9, 0x92, 0xdc, 0x95, 0xd5, 0xee, 0x20, 0xa4, 0xfa, 0x34, 0xcf, 0x3c, 0x47,
-	0x02, 0x3f, 0x31, 0x69, 0x7f, 0x0f, 0x45, 0xb6, 0x10, 0x81, 0x65, 0x72, 0x1f, 0xfb, 0xb3, 0xd6,
-	0xd6, 0x5b, 0xf1, 0xb7, 0x5a, 0x4f, 0x02, 0xa7, 0x3e, 0x2d, 0x30, 0x75, 0x20, 0x7f, 0x03, 0x74,
-	0x55, 0x6e, 0x45, 0x6c, 0xd3, 0x72, 0xfb, 0x37, 0xf1, 0xfa, 0xdc, 0x0e, 0x27, 0xfa, 0x2a, 0x05,
-	0x8f, 0x52, 0x34, 0xb9, 0x44, 0x2e, 0x60, 0xd7, 0xe3, 0xc2, 0xbd, 0x5a, 0x9a, 0xd8, 0xf0, 0xb8,
-	0xca, 0xea, 0x80, 0x9a, 0xf6, 0x6f, 0xd4, 0x34, 0xc4, 0x1b, 0xc9, 0xea, 0x3b, 0x4a, 0xd1, 0x1d,
-	0x6f, 0x93, 0x45, 0x7a, 0x00, 0x0e, 0x4b, 0x4c, 0xab, 0xa2, 0xc2, 0x07, 0x37, 0x2a, 0xec, 0x26,
-	0xa2, 0x72, 0x96, 0xaf, 0x2e, 0x92, 0x17, 0x90, 0x1f, 0xcf, 0x4d, 0xcb, 0x77, 0xeb, 0x65, 0x0c,
-	0xc5, 0xde, 0x8d, 0x2a, 0x8e, 0xe7, 0x07, 0x6f, 0xfa, 0x34, 0x37, 0x9e, 0x1f, 0xf8, 0x2e, 0xf9,
-	0x35, 0x94, 0xaf, 0xdc, 0x89, 0xfc, 0xbe, 0x98, 0x70, 0xee, 0xd7, 0x2b, 0xb8, 0x2c, 0x41, 0xb1,
-	0x06, 0x9c, 0xfb, 0x0d, 0x80, 0x62, 0x1c, 0x8e, 0x46, 0x05, 0x60, 0xf5, 0x7e, 0xa3, 0x03, 0x3b,
-	0x5b, 0xee, 0x91, 0xa7, 0xd1, 0x34, 0x54, 0xc1, 0xd9, 0x1c, 0x5d, 0x89, 0x94, 0x9a, 0x8f, 0x78,
-	0x6c, 0xfe, 0x0e, 0x72, 0x68, 0x0e, 0x29, 0x42, 0xd6, 0x70, 0xbb, 0x1d, 0x3d, 0x45, 0x4a, 0x90,
-	0xa3, 0xd6, 0xfb, 0xe3, 0x0b, 0x5d, 0x93, 0x47, 0x63, 0xe1, 0x1d, 0x5f, 0xe8, 0xe9, 0x4e, 0x29,
-	0xf9, 0xc8, 0x6c, 0xff, 0x4f, 0x03, 0x58, 0x79, 0x45, 0x0e, 0xa0, 0x84, 0xdd, 0xfa, 0x9a, 0x31,
-	0x87, 0xd4, 0x6f, 0xf2, 0xba, 0x71, 0xe7, 0x13, 0x04, 0x6f, 0xed, 0x6b, 0xcf, 0x34, 0x72, 0x08,
-	0xe5, 0x44, 0xc5, 0x45, 0xfb, 0xe7, 0x29, 0xe9, 0xfc, 0xf6, 0xc3, 0x57, 0x45, 0xed, 0x9b, 0x8f,
-	0x7b, 0xda, 0xb7, 0x1f, 0xf7, 0xb4, 0xef, 0x3e, 0xee, 0x69, 0xff, 0xff, 0x7e, 0x2f, 0x05, 0x3a,
-	0x0f, 0x46, 0x2d, 0xe1, 0x8e, 0xe7, 0xad, 0xf1, 0x1c, 0xff, 0x18, 0x5c, 0xe6, 0xf1, 0xe7, 0x8f,
-	0x3f, 0x06, 0x00, 0x00, 0xff, 0xff, 0xd0, 0x00, 0x85, 0xeb, 0x9a, 0x0c, 0x00, 0x00,
+	// 1518 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0x4b, 0x73, 0xdb, 0xc8,
+	0x11, 0x26, 0xf8, 0x66, 0xf3, 0x21, 0x68, 0xec, 0xd8, 0x34, 0x53, 0x51, 0x1c, 0xda, 0x4e, 0x64,
+	0xa7, 0x42, 0xdb, 0x4c, 0x9c, 0x83, 0x53, 0x71, 0x22, 0x8a, 0x74, 0xc4, 0x12, 0x45, 0xb9, 0x46,
+	0x90, 0x5c, 0x95, 0x43, 0x50, 0x10, 0x30, 0xa2, 0x50, 0x24, 0x31, 0x30, 0x30, 0xa4, 0xc9, 0x5b,
+	0x8e, 0xb9, 0xe4, 0x94, 0x1c, 0xf6, 0x27, 0xec, 0x2f, 0xd9, 0xda, 0xe3, 0x1e, 0xf7, 0xb8, 0xe5,
+	0xfd, 0x13, 0x7b, 0xdc, 0x9a, 0x1e, 0x00, 0x7c, 0xd8, 0xf2, 0x56, 0xed, 0x89, 0xd3, 0xfd, 0xf5,
+	0x7c, 0x33, 0xfd, 0x1c, 0x10, 0xca, 0xb6, 0x63, 0xfb, 0x97, 0x2d, 0x3f, 0xe0, 0x82, 0x93, 0x1c,
+	0x0a, 0x0d, 0x3d, 0xb0, 0xae, 0x84, 0x69, 0x4f, 0x9d, 0x18, 0x68, 0x54, 0xa6, 0x4c, 0x58, 0x89,
+	0x54, 0x65, 0x41, 0xc0, 0x83, 0x95, 0x38, 0x9e, 0x07, 0x7e, 0x42, 0xd2, 0xb8, 0x3d, 0xe2, 0x23,
+	0x8e, 0xcb, 0xa7, 0x72, 0x15, 0x69, 0x77, 0x82, 0x59, 0x28, 0x70, 0xa9, 0x14, 0xcd, 0x01, 0xe4,
+	0x8f, 0x98, 0xe5, 0xb0, 0x80, 0xfc, 0x0a, 0xc0, 0x9e, 0xcc, 0x42, 0xc1, 0x02, 0xd3, 0x75, 0xea,
+	0xda, 0x7d, 0x6d, 0x3f, 0x4b, 0x4b, 0x91, 0xa6, 0xef, 0x90, 0x07, 0x50, 0x15, 0xae, 0xed, 0xd8,
+	0xe6, 0x9c, 0x05, 0xa1, 0xcb, 0xbd, 0x7a, 0xfa, 0xbe, 0xb6, 0x5f, 0xa2, 0x15, 0x54, 0x5e, 0x28,
+	0x5d, 0xf3, 0x29, 0xe8, 0xdd, 0x99, 0x3f, 0x71, 0x6d, 0x4b, 0x30, 0xca, 0xde, 0xcd, 0x58, 0x28,
+	0xc8, 0x2f, 0xa1, 0x14, 0xb0, 0x91, 0xcb, 0xbd, 0x15, 0x6d, 0x51, 0x29, 0xfa, 0x4e, 0xf3, 0x25,
+	0x54, 0x0f, 0xf9, 0xd4, 0xb7, 0x84, 0x7b, 0xe9, 0x4e, 0x5c, 0xb1, 0x24, 0x8f, 0x41, 0x0f, 0xd8,
+	0xbb, 0x99, 0x1b, 0x30, 0x27, 0x39, 0x49, 0xc3, 0x93, 0x76, 0x62, 0x7d, 0x7c, 0xd8, 0x3f, 0x60,
+	0xf7, 0x30, 0xba, 0x5e, 0xf7, 0xc4, 0x0d, 0xa7, 0x96, 0xb0, 0xaf, 0x49, 0x1d, 0x0a, 0xf6, 0x2c,
+	0x08, 0x98, 0x27, 0xa2, 0xb3, 0x62, 0x51, 0x22, 0x81, 0xba, 0x12, 0x5e, 0x3d, 0x4b, 0x63, 0xb1,
+	0xf9, 0x55, 0x06, 0x72, 0x3d, 0x19, 0x4b, 0xf2, 0x1c, 0xc0, 0xe3, 0xc2, 0x9c, 0x60, 0x44, 0x90,
+	0xa0, 0xdc, 0x26, 0xad, 0x38, 0xce, 0x43, 0x2e, 0x06, 0x88, 0xd0, 0x92, 0x17, 0x2f, 0xc9, 0x81,
+	0xbc, 0x30, 0xba, 0x27, 0x77, 0x5e, 0xf1, 0x99, 0xe7, 0x20, 0x7f, 0xb9, 0x7d, 0x37, 0xd9, 0x48,
+	0xd1, 0x60, 0xc8, 0xc5, 0x6b, 0x09, 0xd3, 0x5a, 0xb0, 0x21, 0x93, 0x57, 0xb0, 0xc3, 0x7c, 0x6e,
+	0x5f, 0x23, 0x03, 0xba, 0x51, 0xcf, 0x20, 0xc3, 0x9d, 0x84, 0xa1, 0x27, 0xf1, 0x21, 0x17, 0x27,
+	0x12, 0xa5, 0x55, 0xb6, 0x2e, 0x92, 0x2e, 0xec, 0x3a, 0x71, 0xd4, 0xcd, 0xd8, 0xc7, 0x6c, 0x74,
+	0x07, 0x55, 0x58, 0xdb, 0x59, 0xa1, 0xba, 0xb3, 0x9d, 0xa7, 0x97, 0x50, 0xb5, 0xd7, 0x53, 0x51,
+	0xcf, 0x21, 0xc3, 0xed, 0x88, 0x61, 0x23, 0x4d, 0x74, 0xd3, 0x94, 0x1c, 0xc1, 0xad, 0x55, 0xed,
+	0x98, 0xd3, 0x28, 0x19, 0xf5, 0x3c, 0x32, 0xd4, 0x63, 0x86, 0xed, 0x64, 0xd1, 0xdd, 0xa4, 0xbc,
+	0x92, 0xfc, 0xfd, 0x05, 0x6a, 0x21, 0x0b, 0xe6, 0x92, 0x28, 0x34, 0x2f, 0x67, 0xe1, 0xb2, 0x5e,
+	0x40, 0x92, 0x5f, 0x24, 0xa1, 0x38, 0x43, 0xb8, 0x1f, 0x76, 0x66, 0xe1, 0x92, 0x56, 0xc2, 0x35,
+	0xa9, 0xf9, 0x0a, 0x0a, 0xc6, 0xc2, 0xeb, 0x7b, 0x57, 0x9c, 0xdc, 0x83, 0x62, 0x28, 0xac, 0x40,
+	0x98, 0x22, 0x8c, 0x0b, 0x01, 0x65, 0x23, 0x94, 0x85, 0xe0, 0x07, 0xee, 0xd4, 0x0a, 0x96, 0x98,
+	0xa8, 0x0a, 0x8d, 0xc5, 0xe6, 0x7f, 0x35, 0x28, 0x19, 0x0b, 0xef, 0x4c, 0x58, 0x62, 0x16, 0x7e,
+	0x8e, 0xa2, 0x09, 0xd5, 0xa9, 0xeb, 0x99, 0x36, 0x9f, 0x4e, 0x5d, 0xc4, 0x55, 0x45, 0x95, 0xa7,
+	0xae, 0x77, 0x88, 0x3a, 0x23, 0x94, 0x75, 0xbf, 0xc2, 0x33, 0xaa, 0xee, 0xed, 0x18, 0x7c, 0x08,
+	0x35, 0x37, 0x34, 0x03, 0x3e, 0x99, 0x30, 0xc7, 0xbc, 0xb4, 0xec, 0x31, 0xe6, 0xab, 0x48, 0x2b,
+	0x6e, 0x48, 0x51, 0xd9, 0xb1, 0xec, 0x71, 0xf3, 0x7f, 0x45, 0xc8, 0xf5, 0xe6, 0xb2, 0x78, 0x3f,
+	0xd7, 0x44, 0xe4, 0x36, 0xe4, 0x5c, 0xcf, 0x61, 0x8b, 0xe8, 0x16, 0x4a, 0x90, 0xfd, 0x1c, 0xd5,
+	0x82, 0xdc, 0x53, 0x50, 0xfd, 0x1c, 0x69, 0xfa, 0x0e, 0x79, 0x06, 0x05, 0xe6, 0x89, 0xc0, 0x65,
+	0x61, 0x54, 0x6c, 0x71, 0xa2, 0xf1, 0xc0, 0x56, 0x4f, 0x61, 0x47, 0x29, 0x1a, 0x9b, 0x91, 0x27,
+	0x90, 0xb3, 0x9c, 0xa9, 0xeb, 0x45, 0xa5, 0x45, 0x36, 0xec, 0x0f, 0x24, 0x72, 0x94, 0xa2, 0xca,
+	0x84, 0x3c, 0x84, 0x1c, 0xe6, 0x2b, 0x2a, 0xa2, 0x4a, 0x6c, 0x2b, 0x75, 0xd2, 0x0a, 0x41, 0xf2,
+	0x08, 0xca, 0x01, 0x0b, 0xf9, 0x64, 0xce, 0x1c, 0x19, 0x24, 0x59, 0x2e, 0xd9, 0x4e, 0xba, 0xae,
+	0x1d, 0xa5, 0x28, 0xc4, 0x80, 0x11, 0x92, 0xe7, 0x50, 0x9c, 0x70, 0x6f, 0x64, 0x8a, 0x85, 0x57,
+	0x2f, 0x7e, 0xe2, 0xae, 0x03, 0xee, 0x8d, 0x8c, 0x85, 0x3c, 0xbd, 0x30, 0x51, 0xcb, 0xc6, 0x0f,
+	0x69, 0xc8, 0x50, 0xfe, 0xfe, 0x73, 0x39, 0xdc, 0xc8, 0x4f, 0x7a, 0x2b, 0x3f, 0xfb, 0x90, 0x15,
+	0x4b, 0x9f, 0x61, 0x68, 0x6a, 0x1f, 0x1d, 0x37, 0x32, 0x96, 0x3e, 0xa3, 0x68, 0x41, 0xf6, 0x00,
+	0x46, 0xcc, 0x63, 0x81, 0x25, 0xe4, 0xa8, 0x02, 0xe4, 0x59, 0xd3, 0xc8, 0x38, 0x73, 0xdf, 0x44,
+	0xb2, 0x2c, 0x92, 0xdd, 0xdd, 0x20, 0xa3, 0xfc, 0x7d, 0xeb, 0xd4, 0x47, 0xbe, 0x3c, 0xc7, 0x5f,
+	0xa2, 0x43, 0x66, 0xcc, 0x54, 0xfb, 0x55, 0xa8, 0x5c, 0xca, 0x04, 0xcf, 0xad, 0xc9, 0x8c, 0x61,
+	0x84, 0x2a, 0x54, 0x09, 0xd2, 0x01, 0x3e, 0x71, 0x4c, 0x85, 0x14, 0x10, 0x29, 0xf2, 0x89, 0x73,
+	0x81, 0xe0, 0x1f, 0xe0, 0x16, 0x5b, 0xf8, 0x6e, 0xc0, 0x4c, 0x11, 0x9a, 0x33, 0xcf, 0x5d, 0x98,
+	0x21, 0xb3, 0x43, 0x0c, 0x5f, 0x96, 0xea, 0x0a, 0x32, 0xc2, 0x73, 0xcf, 0x5d, 0x9c, 0x31, 0x3b,
+	0x94, 0xc5, 0x22, 0x16, 0x9e, 0x19, 0xf2, 0x59, 0x60, 0xb3, 0x7a, 0x49, 0x15, 0x8b, 0x58, 0x78,
+	0x67, 0xa8, 0x68, 0x3e, 0x81, 0xbc, 0xba, 0x24, 0x29, 0x43, 0xe1, 0x7c, 0x78, 0x3c, 0x3c, 0x7d,
+	0x3b, 0xd4, 0x53, 0xa4, 0x00, 0x99, 0x37, 0xe7, 0x86, 0xae, 0x11, 0x80, 0x7c, 0xb7, 0x37, 0xe8,
+	0x19, 0x3d, 0x3d, 0xdd, 0x78, 0x01, 0x85, 0x5e, 0x52, 0x31, 0x49, 0x8d, 0x69, 0xf7, 0x33, 0xfb,
+	0xe5, 0xb6, 0xbe, 0xed, 0x7b, 0x52, 0x5d, 0x8d, 0xff, 0x68, 0x90, 0xc3, 0x22, 0x22, 0x7f, 0x85,
+	0x2a, 0x16, 0x51, 0x32, 0xca, 0xb4, 0x68, 0x8c, 0xac, 0xbd, 0x87, 0x68, 0x19, 0xcf, 0xb2, 0x8a,
+	0xb5, 0x26, 0x91, 0xbf, 0x43, 0x2d, 0xde, 0x1e, 0xfa, 0xdc, 0x0b, 0x59, 0x34, 0x8e, 0xef, 0x7d,
+	0x62, 0xbf, 0x32, 0xa0, 0x55, 0x6b, 0x5d, 0x6c, 0xfc, 0x09, 0x0a, 0x51, 0x49, 0x91, 0xc7, 0x50,
+	0x94, 0x71, 0x71, 0xbd, 0x2b, 0x1e, 0xb9, 0x50, 0x8b, 0x5c, 0x88, 0x06, 0x0d, 0x2d, 0x08, 0xb5,
+	0x68, 0xfe, 0x4b, 0xee, 0x1a, 0x7d, 0x1c, 0xa4, 0x0a, 0x14, 0xdf, 0xd0, 0xde, 0x5b, 0xda, 0x37,
+	0x7a, 0x2a, 0x52, 0x87, 0xa7, 0x27, 0x27, 0x7d, 0x43, 0x4f, 0x4b, 0x84, 0x9e, 0x0e, 0x06, 0x9d,
+	0x83, 0xc3, 0x63, 0x3d, 0x43, 0xaa, 0x50, 0x52, 0x88, 0xd1, 0xeb, 0xea, 0x59, 0xb2, 0x03, 0xe5,
+	0xfe, 0xb0, 0x6f, 0xf4, 0x0f, 0x06, 0xfd, 0x7f, 0xf6, 0xba, 0x7a, 0xae, 0x53, 0x80, 0x1c, 0x93,
+	0x61, 0x6b, 0x8e, 0x61, 0xe7, 0xf0, 0xda, 0xf2, 0x46, 0xac, 0x6b, 0x09, 0x4b, 0x8d, 0x87, 0x87,
+	0x90, 0x47, 0x2c, 0x8e, 0x73, 0x65, 0x3d, 0xce, 0x34, 0xc2, 0x48, 0x7b, 0xb3, 0xdd, 0x54, 0x58,
+	0x76, 0x23, 0x53, 0x9a, 0xf4, 0xdb, 0x7a, 0xef, 0x35, 0xcf, 0x01, 0x56, 0x88, 0x7a, 0x43, 0xe5,
+	0xd4, 0x51, 0x07, 0xe1, 0x1b, 0x8a, 0x22, 0xa9, 0x41, 0x3a, 0x69, 0xa3, 0xb4, 0x08, 0xb7, 0xa6,
+	0x4f, 0x66, 0x6b, 0xfa, 0x34, 0xff, 0x9d, 0x87, 0xdd, 0x95, 0x13, 0x71, 0xea, 0x1e, 0x41, 0xfe,
+	0x7a, 0xfd, 0xe9, 0xad, 0x46, 0x77, 0x53, 0x5f, 0x28, 0x34, 0x02, 0x37, 0x87, 0x61, 0x7a, 0x6b,
+	0x18, 0xfe, 0x19, 0x2a, 0x11, 0x88, 0x8f, 0x64, 0x34, 0xdc, 0x6e, 0xb5, 0xa2, 0x4f, 0x27, 0xf5,
+	0x14, 0xe3, 0x73, 0x4a, 0xcb, 0xc1, 0x4a, 0x90, 0xdf, 0x37, 0xf6, 0x35, 0xb3, 0xc7, 0x3e, 0x77,
+	0x3d, 0x1c, 0x09, 0x59, 0x24, 0xae, 0xac, 0x94, 0x6a, 0x66, 0xa8, 0x71, 0xb2, 0x6a, 0x50, 0x35,
+	0x5f, 0x8e, 0xd9, 0x92, 0xdc, 0x95, 0xd5, 0xee, 0x20, 0xa4, 0xfa, 0x34, 0xcf, 0x3c, 0x47, 0x02,
+	0x3f, 0x31, 0x89, 0x7f, 0x0f, 0x45, 0xb6, 0x10, 0x81, 0x65, 0x72, 0x1f, 0xfb, 0xb3, 0xd6, 0xd6,
+	0x5b, 0xf1, 0xb7, 0x5c, 0x4f, 0x02, 0xa7, 0x3e, 0x2d, 0x30, 0xb5, 0x20, 0x7f, 0x03, 0x74, 0x55,
+	0xbe, 0x9a, 0xd8, 0xa6, 0xe5, 0xf6, 0x6f, 0xe2, 0xe7, 0x75, 0x3b, 0x9c, 0xe8, 0xab, 0x34, 0x3c,
+	0x4a, 0xd1, 0x64, 0x13, 0xb9, 0x80, 0x5d, 0x8f, 0x0b, 0xf7, 0x6a, 0x69, 0x62, 0xc3, 0xe3, 0x53,
+	0x87, 0x63, 0xab, 0xdc, 0xde, 0xbf, 0x91, 0x69, 0x88, 0x3b, 0x92, 0xa7, 0xf1, 0x28, 0x45, 0x77,
+	0xbc, 0x4d, 0x15, 0xe9, 0x01, 0x38, 0x2c, 0xb9, 0x5a, 0x15, 0x09, 0x1f, 0xdc, 0x48, 0xd8, 0x4d,
+	0x4c, 0xe5, 0xac, 0x5f, 0x6d, 0x24, 0x2f, 0x20, 0x3f, 0x9e, 0x9b, 0x96, 0xef, 0xd6, 0xcb, 0x18,
+	0x8a, 0xbd, 0x1b, 0x29, 0x8e, 0xe7, 0x07, 0x6f, 0xfa, 0x34, 0x37, 0x9e, 0x1f, 0xf8, 0x2e, 0xf9,
+	0x35, 0x94, 0xaf, 0xdc, 0x89, 0xfc, 0xfe, 0x98, 0x70, 0xee, 0xd7, 0x2b, 0xf8, 0x98, 0x82, 0x52,
+	0x0d, 0x38, 0xf7, 0x1b, 0x00, 0xc5, 0x38, 0x1c, 0x8d, 0x0a, 0xc0, 0xea, 0xfc, 0x46, 0x07, 0x76,
+	0xb6, 0xdc, 0x23, 0x4f, 0xa3, 0x69, 0xa8, 0x82, 0xb3, 0x39, 0xba, 0x12, 0x2b, 0x35, 0x1f, 0x71,
+	0xd9, 0xfc, 0x1d, 0xe4, 0xf0, 0x3a, 0xa4, 0x08, 0x59, 0xc3, 0xed, 0x76, 0xf4, 0x14, 0x29, 0x41,
+	0x8e, 0x5a, 0xef, 0x8f, 0x2f, 0x74, 0x4d, 0x2e, 0x8d, 0x85, 0x77, 0x7c, 0xa1, 0xa7, 0x3b, 0xa5,
+	0xe4, 0x23, 0xb4, 0xfd, 0x7f, 0x0d, 0x60, 0xe5, 0x15, 0x39, 0x80, 0x12, 0x76, 0xeb, 0x6b, 0xc6,
+	0x1c, 0x52, 0xbf, 0xc9, 0xeb, 0xc6, 0x9d, 0x8f, 0x10, 0xdc, 0xb5, 0xaf, 0x3d, 0xd3, 0xc8, 0x21,
+	0x94, 0x13, 0x8a, 0x8b, 0xf6, 0xcf, 0x23, 0xe9, 0xfc, 0xf6, 0xdb, 0x2f, 0x8b, 0xda, 0xd7, 0x1f,
+	0xf6, 0xb4, 0x6f, 0x3e, 0xec, 0x69, 0xdf, 0x7d, 0xd8, 0xd3, 0xbe, 0xf8, 0x7e, 0x2f, 0x05, 0x3a,
+	0x0f, 0x46, 0x2d, 0xe1, 0x8e, 0xe7, 0xad, 0xf1, 0x1c, 0xff, 0x38, 0x5c, 0xe6, 0xf1, 0xe7, 0x8f,
+	0x3f, 0x06, 0x00, 0x00, 0xff, 0xff, 0xa4, 0x38, 0x8e, 0xff, 0xba, 0x0c, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -2228,6 +2238,11 @@ func (m *Event_Row) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 		i -= len(m.XXX_unrecognized)
 		copy(dAtA[i:], m.XXX_unrecognized)
 	}
+	if m.Generation != 0 {
+		i = encodeVarintCdcpb(dAtA, i, uint64(m.Generation))
+		i--
+		dAtA[i] = 0x50
+	}
 	if m.TxnSource != 0 {
 		i = encodeVarintCdcpb(dAtA, i, uint64(m.TxnSource))
 		i--
@@ -3069,6 +3084,9 @@ func (m *Event_Row) Size() (n int) {
 	if m.TxnSource != 0 {
 		n += 1 + sovCdcpb(uint64(m.TxnSource))
 	}
+	if m.Generation != 0 {
+		n += 1 + sovCdcpb(uint64(m.Generation))
+	}
 	if m.XXX_unrecognized != nil {
 		n += len(m.XXX_unrecognized)
 	}
@@ -4703,6 +4721,25 @@ func (m *Event_Row) Unmarshal(dAtA []byte) error {
 					break
 				}
 			}
+		case 10:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field Generation", wireType)
+			}
+			m.Generation = 0
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowCdcpb
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				m.Generation |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
 		default:
 			iNdEx = preIndex
 			skippy, err := skipCdcpb(dAtA[iNdEx:])
diff --git a/proto/cdcpb.proto b/proto/cdcpb.proto
index 6d27130f1..aaaafe39f 100644
--- a/proto/cdcpb.proto
+++ b/proto/cdcpb.proto
@@ -75,12 +75,16 @@ message Event {
         uint64 commit_ts = 2;
         LogType type = 3;
 
+	// generation is for pipelined DML protocol. See kvrpcpb.FlushRequest.generation.
+	uint64 generation = 10;
+
         enum OpType {
             UNKNOWN = 0;
             PUT = 1;
             DELETE = 2;
         }
         OpType op_type = 4;
+
         bytes key = 5;
         bytes value = 6;
         bytes old_value = 7;
diff --git a/scripts/proto.lock b/scripts/proto.lock
index ad56b4d0b..e655c3b9d 100644
--- a/scripts/proto.lock
+++ b/scripts/proto.lock
@@ -777,20 +777,17 @@
               {
                 "id": 3,
                 "name": "cluster_id_error",
-                "type": "ClusterIDError",
-                "oneof_parent": "detail"
+                "type": "ClusterIDError"
               },
               {
                 "id": 4,
                 "name": "kv_error",
-                "type": "kvrpcpb.KeyError",
-                "oneof_parent": "detail"
+                "type": "kvrpcpb.KeyError"
               },
               {
                 "id": 5,
                 "name": "region_error",
-                "type": "errorpb.Error",
-                "oneof_parent": "detail"
+                "type": "errorpb.Error"
               }
             ]
           },
@@ -963,44 +960,37 @@
               {
                 "id": 1,
                 "name": "noop",
-                "type": "Noop",
-                "oneof_parent": "backend"
+                "type": "Noop"
               },
               {
                 "id": 2,
                 "name": "local",
-                "type": "Local",
-                "oneof_parent": "backend"
+                "type": "Local"
               },
               {
                 "id": 3,
                 "name": "s3",
-                "type": "S3",
-                "oneof_parent": "backend"
+                "type": "S3"
               },
               {
                 "id": 4,
                 "name": "gcs",
-                "type": "GCS",
-                "oneof_parent": "backend"
+                "type": "GCS"
               },
               {
                 "id": 5,
                 "name": "cloud_dynamic",
-                "type": "CloudDynamic",
-                "oneof_parent": "backend"
+                "type": "CloudDynamic"
               },
               {
                 "id": 6,
                 "name": "hdfs",
-                "type": "HDFS",
-                "oneof_parent": "backend"
+                "type": "HDFS"
               },
               {
                 "id": 7,
                 "name": "azure_blob_storage",
-                "type": "AzureBlobStorage",
-                "oneof_parent": "backend"
+                "type": "AzureBlobStorage"
               }
             ]
           },
@@ -1954,20 +1944,17 @@
               {
                 "id": 3,
                 "name": "entries",
-                "type": "Entries",
-                "oneof_parent": "event"
+                "type": "Entries"
               },
               {
                 "id": 4,
                 "name": "admin",
-                "type": "Admin",
-                "oneof_parent": "event"
+                "type": "Admin"
               },
               {
                 "id": 5,
                 "name": "error",
-                "type": "Error",
-                "oneof_parent": "event"
+                "type": "Error"
               },
               {
                 "id": 6,
@@ -1978,14 +1965,12 @@
                     "name": "deprecated",
                     "value": "true"
                   }
-                ],
-                "oneof_parent": "event"
+                ]
               },
               {
                 "id": 8,
                 "name": "long_txn",
-                "type": "LongTxn",
-                "oneof_parent": "event"
+                "type": "LongTxn"
               }
             ],
             "messages": [
@@ -2007,6 +1992,11 @@
                     "name": "type",
                     "type": "LogType"
                   },
+                  {
+                    "id": 10,
+                    "name": "generation",
+                    "type": "uint64"
+                  },
                   {
                     "id": 4,
                     "name": "op_type",
@@ -2161,20 +2151,17 @@
               {
                 "id": 9,
                 "name": "register",
-                "type": "Register",
-                "oneof_parent": "request"
+                "type": "Register"
               },
               {
                 "id": 10,
                 "name": "notify_txn_status",
-                "type": "NotifyTxnStatus",
-                "oneof_parent": "request"
+                "type": "NotifyTxnStatus"
               },
               {
                 "id": 13,
                 "name": "deregister",
-                "type": "Deregister",
-                "oneof_parent": "request"
+                "type": "Deregister"
               },
               {
                 "id": 11,
@@ -2366,14 +2353,12 @@
               {
                 "id": 1,
                 "name": "local",
-                "type": "Local",
-                "oneof_parent": "kind"
+                "type": "Local"
               },
               {
                 "id": 2,
                 "name": "global",
-                "type": "Global",
-                "oneof_parent": "kind"
+                "type": "Global"
               }
             ]
           },
@@ -4479,20 +4464,17 @@
               {
                 "id": 1,
                 "name": "success",
-                "type": "Success",
-                "oneof_parent": "error"
+                "type": "Success"
               },
               {
                 "id": 2,
                 "name": "not_owner",
-                "type": "NotOwner",
-                "oneof_parent": "error"
+                "type": "NotOwner"
               },
               {
                 "id": 3,
                 "name": "conflict",
-                "type": "Conflict",
-                "oneof_parent": "error"
+                "type": "Conflict"
               }
             ]
           },
@@ -4676,20 +4658,17 @@
               {
                 "id": 1,
                 "name": "error_region",
-                "type": "ErrorRegion",
-                "oneof_parent": "errors"
+                "type": "ErrorRegion"
               },
               {
                 "id": 2,
                 "name": "error_locked",
-                "type": "ErrorLocked",
-                "oneof_parent": "errors"
+                "type": "ErrorLocked"
               },
               {
                 "id": 99,
                 "name": "error_other",
-                "type": "ErrorOther",
-                "oneof_parent": "errors"
+                "type": "ErrorOther"
               }
             ]
           },
@@ -5069,20 +5048,17 @@
               {
                 "id": 1,
                 "name": "plaintext",
-                "type": "MasterKeyPlaintext",
-                "oneof_parent": "backend"
+                "type": "MasterKeyPlaintext"
               },
               {
                 "id": 2,
                 "name": "file",
-                "type": "MasterKeyFile",
-                "oneof_parent": "backend"
+                "type": "MasterKeyFile"
               },
               {
                 "id": 3,
                 "name": "kms",
-                "type": "MasterKeyKms",
-                "oneof_parent": "backend"
+                "type": "MasterKeyKms"
               }
             ]
           },
@@ -5364,14 +5340,12 @@
               {
                 "id": 1,
                 "name": "state",
-                "type": "SnapshotState",
-                "oneof_parent": "chunk"
+                "type": "SnapshotState"
               },
               {
                 "id": 2,
                 "name": "data",
-                "type": "SnapshotData",
-                "oneof_parent": "chunk"
+                "type": "SnapshotData"
               }
             ]
           },
@@ -6266,14 +6240,12 @@
               {
                 "id": 1,
                 "name": "head",
-                "type": "WriteHead",
-                "oneof_parent": "chunk"
+                "type": "WriteHead"
               },
               {
                 "id": 2,
                 "name": "batch",
-                "type": "WriteBatch",
-                "oneof_parent": "chunk"
+                "type": "WriteBatch"
               }
             ]
           },
@@ -6752,14 +6724,12 @@
               {
                 "id": 1,
                 "name": "meta",
-                "type": "SSTMeta",
-                "oneof_parent": "chunk"
+                "type": "SSTMeta"
               },
               {
                 "id": 2,
                 "name": "data",
-                "type": "bytes",
-                "oneof_parent": "chunk"
+                "type": "bytes"
               }
             ]
           },
@@ -7025,14 +6995,12 @@
               {
                 "id": 1,
                 "name": "meta",
-                "type": "SSTMeta",
-                "oneof_parent": "chunk"
+                "type": "SSTMeta"
               },
               {
                 "id": 2,
                 "name": "batch",
-                "type": "WriteBatch",
-                "oneof_parent": "chunk"
+                "type": "WriteBatch"
               },
               {
                 "id": 3,
@@ -7084,14 +7052,12 @@
               {
                 "id": 1,
                 "name": "meta",
-                "type": "SSTMeta",
-                "oneof_parent": "chunk"
+                "type": "SSTMeta"
               },
               {
                 "id": 2,
                 "name": "batch",
-                "type": "RawWriteBatch",
-                "oneof_parent": "chunk"
+                "type": "RawWriteBatch"
               },
               {
                 "id": 3,
@@ -11378,26 +11344,22 @@
               {
                 "id": 1,
                 "name": "err_invalid_start_key",
-                "type": "CompactErrorInvalidStartKey",
-                "oneof_parent": "error"
+                "type": "CompactErrorInvalidStartKey"
               },
               {
                 "id": 2,
                 "name": "err_physical_table_not_exist",
-                "type": "CompactErrorPhysicalTableNotExist",
-                "oneof_parent": "error"
+                "type": "CompactErrorPhysicalTableNotExist"
               },
               {
                 "id": 3,
                 "name": "err_compact_in_progress",
-                "type": "CompactErrorCompactInProgress",
-                "oneof_parent": "error"
+                "type": "CompactErrorCompactInProgress"
               },
               {
                 "id": 4,
                 "name": "err_too_many_pending_tasks",
-                "type": "CompactErrorTooManyPendingTasks",
-                "oneof_parent": "error"
+                "type": "CompactErrorTooManyPendingTasks"
               }
             ]
           },
@@ -17707,26 +17669,22 @@
               {
                 "id": 1,
                 "name": "head",
-                "type": "TabletSnapshotHead",
-                "oneof_parent": "payload"
+                "type": "TabletSnapshotHead"
               },
               {
                 "id": 2,
                 "name": "preview",
-                "type": "TabletSnapshotPreview",
-                "oneof_parent": "payload"
+                "type": "TabletSnapshotPreview"
               },
               {
                 "id": 3,
                 "name": "chunk",
-                "type": "TabletSnapshotFileChunk",
-                "oneof_parent": "payload"
+                "type": "TabletSnapshotFileChunk"
               },
               {
                 "id": 4,
                 "name": "end",
-                "type": "TabletSnapshotEnd",
-                "oneof_parent": "payload"
+                "type": "TabletSnapshotEnd"
               }
             ]
           },
@@ -18779,14 +18737,12 @@
               {
                 "id": 2,
                 "name": "ru_items",
-                "type": "RequestRU",
-                "oneof_parent": "request"
+                "type": "RequestRU"
               },
               {
                 "id": 3,
                 "name": "raw_resource_items",
-                "type": "RequestRawResource",
-                "oneof_parent": "request"
+                "type": "RequestRawResource"
               },
               {
                 "id": 4,
@@ -19266,8 +19222,7 @@
               {
                 "id": 1,
                 "name": "record",
-                "type": "GroupTagRecord",
-                "oneof_parent": "record_oneof"
+                "type": "GroupTagRecord"
               }
             ]
           },
@@ -19911,200 +19866,167 @@
                   {
                     "id": 1,
                     "name": "Get",
-                    "type": "kvrpcpb.GetRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.GetRequest"
                   },
                   {
                     "id": 2,
                     "name": "Scan",
-                    "type": "kvrpcpb.ScanRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.ScanRequest"
                   },
                   {
                     "id": 3,
                     "name": "Prewrite",
-                    "type": "kvrpcpb.PrewriteRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.PrewriteRequest"
                   },
                   {
                     "id": 4,
                     "name": "Commit",
-                    "type": "kvrpcpb.CommitRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.CommitRequest"
                   },
                   {
                     "id": 5,
                     "name": "Import",
-                    "type": "kvrpcpb.ImportRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.ImportRequest"
                   },
                   {
                     "id": 6,
                     "name": "Cleanup",
-                    "type": "kvrpcpb.CleanupRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.CleanupRequest"
                   },
                   {
                     "id": 7,
                     "name": "BatchGet",
-                    "type": "kvrpcpb.BatchGetRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.BatchGetRequest"
                   },
                   {
                     "id": 8,
                     "name": "BatchRollback",
-                    "type": "kvrpcpb.BatchRollbackRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.BatchRollbackRequest"
                   },
                   {
                     "id": 9,
                     "name": "ScanLock",
-                    "type": "kvrpcpb.ScanLockRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.ScanLockRequest"
                   },
                   {
                     "id": 10,
                     "name": "ResolveLock",
-                    "type": "kvrpcpb.ResolveLockRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.ResolveLockRequest"
                   },
                   {
                     "id": 11,
                     "name": "GC",
-                    "type": "kvrpcpb.GCRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.GCRequest"
                   },
                   {
                     "id": 12,
                     "name": "DeleteRange",
-                    "type": "kvrpcpb.DeleteRangeRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.DeleteRangeRequest"
                   },
                   {
                     "id": 13,
                     "name": "RawGet",
-                    "type": "kvrpcpb.RawGetRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawGetRequest"
                   },
                   {
                     "id": 14,
                     "name": "RawBatchGet",
-                    "type": "kvrpcpb.RawBatchGetRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawBatchGetRequest"
                   },
                   {
                     "id": 15,
                     "name": "RawPut",
-                    "type": "kvrpcpb.RawPutRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawPutRequest"
                   },
                   {
                     "id": 16,
                     "name": "RawBatchPut",
-                    "type": "kvrpcpb.RawBatchPutRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawBatchPutRequest"
                   },
                   {
                     "id": 17,
                     "name": "RawDelete",
-                    "type": "kvrpcpb.RawDeleteRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawDeleteRequest"
                   },
                   {
                     "id": 18,
                     "name": "RawBatchDelete",
-                    "type": "kvrpcpb.RawBatchDeleteRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawBatchDeleteRequest"
                   },
                   {
                     "id": 19,
                     "name": "RawScan",
-                    "type": "kvrpcpb.RawScanRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawScanRequest"
                   },
                   {
                     "id": 20,
                     "name": "RawDeleteRange",
-                    "type": "kvrpcpb.RawDeleteRangeRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawDeleteRangeRequest"
                   },
                   {
                     "id": 21,
                     "name": "RawBatchScan",
-                    "type": "kvrpcpb.RawBatchScanRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawBatchScanRequest"
                   },
                   {
                     "id": 22,
                     "name": "Coprocessor",
-                    "type": "coprocessor.Request",
-                    "oneof_parent": "cmd"
+                    "type": "coprocessor.Request"
                   },
                   {
                     "id": 23,
                     "name": "PessimisticLock",
-                    "type": "kvrpcpb.PessimisticLockRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.PessimisticLockRequest"
                   },
                   {
                     "id": 24,
                     "name": "PessimisticRollback",
-                    "type": "kvrpcpb.PessimisticRollbackRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.PessimisticRollbackRequest"
                   },
                   {
                     "id": 25,
                     "name": "CheckTxnStatus",
-                    "type": "kvrpcpb.CheckTxnStatusRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.CheckTxnStatusRequest"
                   },
                   {
                     "id": 26,
                     "name": "TxnHeartBeat",
-                    "type": "kvrpcpb.TxnHeartBeatRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.TxnHeartBeatRequest"
                   },
                   {
                     "id": 33,
                     "name": "CheckSecondaryLocks",
-                    "type": "kvrpcpb.CheckSecondaryLocksRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.CheckSecondaryLocksRequest"
                   },
                   {
                     "id": 34,
                     "name": "RawCoprocessor",
-                    "type": "kvrpcpb.RawCoprocessorRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawCoprocessorRequest"
                   },
                   {
                     "id": 35,
                     "name": "FlashbackToVersion",
-                    "type": "kvrpcpb.FlashbackToVersionRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.FlashbackToVersionRequest"
                   },
                   {
                     "id": 36,
                     "name": "PrepareFlashbackToVersion",
-                    "type": "kvrpcpb.PrepareFlashbackToVersionRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.PrepareFlashbackToVersionRequest"
                   },
                   {
                     "id": 37,
                     "name": "Flush",
-                    "type": "kvrpcpb.FlushRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.FlushRequest"
                   },
                   {
                     "id": 38,
                     "name": "BufferBatchGet",
-                    "type": "kvrpcpb.BufferBatchGetRequest",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.BufferBatchGetRequest"
                   },
                   {
                     "id": 255,
                     "name": "Empty",
-                    "type": "BatchCommandsEmptyRequest",
-                    "oneof_parent": "cmd"
+                    "type": "BatchCommandsEmptyRequest"
                   }
                 ],
                 "reserved_ids": [
@@ -20151,200 +20073,167 @@
                   {
                     "id": 1,
                     "name": "Get",
-                    "type": "kvrpcpb.GetResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.GetResponse"
                   },
                   {
                     "id": 2,
                     "name": "Scan",
-                    "type": "kvrpcpb.ScanResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.ScanResponse"
                   },
                   {
                     "id": 3,
                     "name": "Prewrite",
-                    "type": "kvrpcpb.PrewriteResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.PrewriteResponse"
                   },
                   {
                     "id": 4,
                     "name": "Commit",
-                    "type": "kvrpcpb.CommitResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.CommitResponse"
                   },
                   {
                     "id": 5,
                     "name": "Import",
-                    "type": "kvrpcpb.ImportResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.ImportResponse"
                   },
                   {
                     "id": 6,
                     "name": "Cleanup",
-                    "type": "kvrpcpb.CleanupResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.CleanupResponse"
                   },
                   {
                     "id": 7,
                     "name": "BatchGet",
-                    "type": "kvrpcpb.BatchGetResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.BatchGetResponse"
                   },
                   {
                     "id": 8,
                     "name": "BatchRollback",
-                    "type": "kvrpcpb.BatchRollbackResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.BatchRollbackResponse"
                   },
                   {
                     "id": 9,
                     "name": "ScanLock",
-                    "type": "kvrpcpb.ScanLockResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.ScanLockResponse"
                   },
                   {
                     "id": 10,
                     "name": "ResolveLock",
-                    "type": "kvrpcpb.ResolveLockResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.ResolveLockResponse"
                   },
                   {
                     "id": 11,
                     "name": "GC",
-                    "type": "kvrpcpb.GCResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.GCResponse"
                   },
                   {
                     "id": 12,
                     "name": "DeleteRange",
-                    "type": "kvrpcpb.DeleteRangeResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.DeleteRangeResponse"
                   },
                   {
                     "id": 13,
                     "name": "RawGet",
-                    "type": "kvrpcpb.RawGetResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawGetResponse"
                   },
                   {
                     "id": 14,
                     "name": "RawBatchGet",
-                    "type": "kvrpcpb.RawBatchGetResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawBatchGetResponse"
                   },
                   {
                     "id": 15,
                     "name": "RawPut",
-                    "type": "kvrpcpb.RawPutResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawPutResponse"
                   },
                   {
                     "id": 16,
                     "name": "RawBatchPut",
-                    "type": "kvrpcpb.RawBatchPutResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawBatchPutResponse"
                   },
                   {
                     "id": 17,
                     "name": "RawDelete",
-                    "type": "kvrpcpb.RawDeleteResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawDeleteResponse"
                   },
                   {
                     "id": 18,
                     "name": "RawBatchDelete",
-                    "type": "kvrpcpb.RawBatchDeleteResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawBatchDeleteResponse"
                   },
                   {
                     "id": 19,
                     "name": "RawScan",
-                    "type": "kvrpcpb.RawScanResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawScanResponse"
                   },
                   {
                     "id": 20,
                     "name": "RawDeleteRange",
-                    "type": "kvrpcpb.RawDeleteRangeResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawDeleteRangeResponse"
                   },
                   {
                     "id": 21,
                     "name": "RawBatchScan",
-                    "type": "kvrpcpb.RawBatchScanResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawBatchScanResponse"
                   },
                   {
                     "id": 22,
                     "name": "Coprocessor",
-                    "type": "coprocessor.Response",
-                    "oneof_parent": "cmd"
+                    "type": "coprocessor.Response"
                   },
                   {
                     "id": 23,
                     "name": "PessimisticLock",
-                    "type": "kvrpcpb.PessimisticLockResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.PessimisticLockResponse"
                   },
                   {
                     "id": 24,
                     "name": "PessimisticRollback",
-                    "type": "kvrpcpb.PessimisticRollbackResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.PessimisticRollbackResponse"
                   },
                   {
                     "id": 25,
                     "name": "CheckTxnStatus",
-                    "type": "kvrpcpb.CheckTxnStatusResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.CheckTxnStatusResponse"
                   },
                   {
                     "id": 26,
                     "name": "TxnHeartBeat",
-                    "type": "kvrpcpb.TxnHeartBeatResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.TxnHeartBeatResponse"
                   },
                   {
                     "id": 33,
                     "name": "CheckSecondaryLocks",
-                    "type": "kvrpcpb.CheckSecondaryLocksResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.CheckSecondaryLocksResponse"
                   },
                   {
                     "id": 34,
                     "name": "RawCoprocessor",
-                    "type": "kvrpcpb.RawCoprocessorResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.RawCoprocessorResponse"
                   },
                   {
                     "id": 35,
                     "name": "FlashbackToVersion",
-                    "type": "kvrpcpb.FlashbackToVersionResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.FlashbackToVersionResponse"
                   },
                   {
                     "id": 36,
                     "name": "PrepareFlashbackToVersion",
-                    "type": "kvrpcpb.PrepareFlashbackToVersionResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.PrepareFlashbackToVersionResponse"
                   },
                   {
                     "id": 37,
                     "name": "Flush",
-                    "type": "kvrpcpb.FlushResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.FlushResponse"
                   },
                   {
                     "id": 38,
                     "name": "BufferBatchGet",
-                    "type": "kvrpcpb.BufferBatchGetResponse",
-                    "oneof_parent": "cmd"
+                    "type": "kvrpcpb.BufferBatchGetResponse"
                   },
                   {
                     "id": 255,
                     "name": "Empty",
-                    "type": "BatchCommandsEmptyResponse",
-                    "oneof_parent": "cmd"
+                    "type": "BatchCommandsEmptyResponse"
                   }
                 ],
                 "reserved_ids": [
@@ -20836,14 +20725,12 @@
               {
                 "id": 1,
                 "name": "report",
-                "type": "Report",
-                "oneof_parent": "record_oneof"
+                "type": "Report"
               },
               {
                 "id": 2,
                 "name": "notify_collect",
-                "type": "NotifyCollect",
-                "oneof_parent": "record_oneof"
+                "type": "NotifyCollect"
               }
             ]
           },

From 97e1d66cf98e47d74b24d9857dadf57d2151aa6a Mon Sep 17 00:00:00 2001
From: qupeng <qupeng@pingcap.com>
Date: Wed, 17 Apr 2024 14:19:55 +0800
Subject: [PATCH 2/2] fix

Signed-off-by: qupeng <qupeng@pingcap.com>
---
 proto/cdcpb.proto | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/proto/cdcpb.proto b/proto/cdcpb.proto
index aaaafe39f..2a04f51cc 100644
--- a/proto/cdcpb.proto
+++ b/proto/cdcpb.proto
@@ -75,8 +75,8 @@ message Event {
         uint64 commit_ts = 2;
         LogType type = 3;
 
-	// generation is for pipelined DML protocol. See kvrpcpb.FlushRequest.generation.
-	uint64 generation = 10;
+        // generation is for pipelined DML protocol. See kvrpcpb.FlushRequest.generation.
+        uint64 generation = 10;
 
         enum OpType {
             UNKNOWN = 0;