vstreamer: rowstreamer locks the table

Signed-off-by: Sugu Sougoumarane <ssougou@gmail.com>
This commit is contained in:
Sugu Sougoumarane 2019-03-17 20:43:45 -07:00
Родитель 91bdf9355e
Коммит 856a196bc6
6 изменённых файлов: 184 добавлений и 122 удалений

Просмотреть файл

@ -48,7 +48,7 @@ func (x OnDDLAction) String() string {
return proto.EnumName(OnDDLAction_name, int32(x))
}
func (OnDDLAction) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{0}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{0}
}
// VEventType enumerates the event types.
@ -113,7 +113,7 @@ func (x VEventType) String() string {
return proto.EnumName(VEventType_name, int32(x))
}
func (VEventType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{1}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{1}
}
type BinlogTransaction_Statement_Category int32
@ -161,7 +161,7 @@ func (x BinlogTransaction_Statement_Category) String() string {
return proto.EnumName(BinlogTransaction_Statement_Category_name, int32(x))
}
func (BinlogTransaction_Statement_Category) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{1, 0, 0}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{1, 0, 0}
}
// Charset is the per-statement charset info from a QUERY_EVENT binlog entry.
@ -181,7 +181,7 @@ func (m *Charset) Reset() { *m = Charset{} }
func (m *Charset) String() string { return proto.CompactTextString(m) }
func (*Charset) ProtoMessage() {}
func (*Charset) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{0}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{0}
}
func (m *Charset) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Charset.Unmarshal(m, b)
@ -238,7 +238,7 @@ func (m *BinlogTransaction) Reset() { *m = BinlogTransaction{} }
func (m *BinlogTransaction) String() string { return proto.CompactTextString(m) }
func (*BinlogTransaction) ProtoMessage() {}
func (*BinlogTransaction) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{1}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{1}
}
func (m *BinlogTransaction) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BinlogTransaction.Unmarshal(m, b)
@ -288,7 +288,7 @@ func (m *BinlogTransaction_Statement) Reset() { *m = BinlogTransaction_S
func (m *BinlogTransaction_Statement) String() string { return proto.CompactTextString(m) }
func (*BinlogTransaction_Statement) ProtoMessage() {}
func (*BinlogTransaction_Statement) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{1, 0}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{1, 0}
}
func (m *BinlogTransaction_Statement) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BinlogTransaction_Statement.Unmarshal(m, b)
@ -346,7 +346,7 @@ func (m *StreamKeyRangeRequest) Reset() { *m = StreamKeyRangeRequest{} }
func (m *StreamKeyRangeRequest) String() string { return proto.CompactTextString(m) }
func (*StreamKeyRangeRequest) ProtoMessage() {}
func (*StreamKeyRangeRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{2}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{2}
}
func (m *StreamKeyRangeRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StreamKeyRangeRequest.Unmarshal(m, b)
@ -399,7 +399,7 @@ func (m *StreamKeyRangeResponse) Reset() { *m = StreamKeyRangeResponse{}
func (m *StreamKeyRangeResponse) String() string { return proto.CompactTextString(m) }
func (*StreamKeyRangeResponse) ProtoMessage() {}
func (*StreamKeyRangeResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{3}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{3}
}
func (m *StreamKeyRangeResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StreamKeyRangeResponse.Unmarshal(m, b)
@ -443,7 +443,7 @@ func (m *StreamTablesRequest) Reset() { *m = StreamTablesRequest{} }
func (m *StreamTablesRequest) String() string { return proto.CompactTextString(m) }
func (*StreamTablesRequest) ProtoMessage() {}
func (*StreamTablesRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{4}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{4}
}
func (m *StreamTablesRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StreamTablesRequest.Unmarshal(m, b)
@ -496,7 +496,7 @@ func (m *StreamTablesResponse) Reset() { *m = StreamTablesResponse{} }
func (m *StreamTablesResponse) String() string { return proto.CompactTextString(m) }
func (*StreamTablesResponse) ProtoMessage() {}
func (*StreamTablesResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{5}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{5}
}
func (m *StreamTablesResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StreamTablesResponse.Unmarshal(m, b)
@ -541,7 +541,7 @@ func (m *Rule) Reset() { *m = Rule{} }
func (m *Rule) String() string { return proto.CompactTextString(m) }
func (*Rule) ProtoMessage() {}
func (*Rule) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{6}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{6}
}
func (m *Rule) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Rule.Unmarshal(m, b)
@ -588,7 +588,7 @@ func (m *Filter) Reset() { *m = Filter{} }
func (m *Filter) String() string { return proto.CompactTextString(m) }
func (*Filter) ProtoMessage() {}
func (*Filter) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{7}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{7}
}
func (m *Filter) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Filter.Unmarshal(m, b)
@ -643,7 +643,7 @@ func (m *BinlogSource) Reset() { *m = BinlogSource{} }
func (m *BinlogSource) String() string { return proto.CompactTextString(m) }
func (*BinlogSource) ProtoMessage() {}
func (*BinlogSource) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{8}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{8}
}
func (m *BinlogSource) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BinlogSource.Unmarshal(m, b)
@ -725,7 +725,7 @@ func (m *RowChange) Reset() { *m = RowChange{} }
func (m *RowChange) String() string { return proto.CompactTextString(m) }
func (*RowChange) ProtoMessage() {}
func (*RowChange) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{9}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{9}
}
func (m *RowChange) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RowChange.Unmarshal(m, b)
@ -772,7 +772,7 @@ func (m *RowEvent) Reset() { *m = RowEvent{} }
func (m *RowEvent) String() string { return proto.CompactTextString(m) }
func (*RowEvent) ProtoMessage() {}
func (*RowEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{10}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{10}
}
func (m *RowEvent) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RowEvent.Unmarshal(m, b)
@ -818,7 +818,7 @@ func (m *FieldEvent) Reset() { *m = FieldEvent{} }
func (m *FieldEvent) String() string { return proto.CompactTextString(m) }
func (*FieldEvent) ProtoMessage() {}
func (*FieldEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{11}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{11}
}
func (m *FieldEvent) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FieldEvent.Unmarshal(m, b)
@ -871,7 +871,7 @@ func (m *VEvent) Reset() { *m = VEvent{} }
func (m *VEvent) String() string { return proto.CompactTextString(m) }
func (*VEvent) ProtoMessage() {}
func (*VEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{12}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{12}
}
func (m *VEvent) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_VEvent.Unmarshal(m, b)
@ -956,7 +956,7 @@ func (m *VStreamRequest) Reset() { *m = VStreamRequest{} }
func (m *VStreamRequest) String() string { return proto.CompactTextString(m) }
func (*VStreamRequest) ProtoMessage() {}
func (*VStreamRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{13}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{13}
}
func (m *VStreamRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_VStreamRequest.Unmarshal(m, b)
@ -1023,7 +1023,7 @@ func (m *VStreamResponse) Reset() { *m = VStreamResponse{} }
func (m *VStreamResponse) String() string { return proto.CompactTextString(m) }
func (*VStreamResponse) ProtoMessage() {}
func (*VStreamResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{14}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{14}
}
func (m *VStreamResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_VStreamResponse.Unmarshal(m, b)
@ -1066,7 +1066,7 @@ func (m *VStreamRowsRequest) Reset() { *m = VStreamRowsRequest{} }
func (m *VStreamRowsRequest) String() string { return proto.CompactTextString(m) }
func (*VStreamRowsRequest) ProtoMessage() {}
func (*VStreamRowsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{15}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{15}
}
func (m *VStreamRowsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_VStreamRowsRequest.Unmarshal(m, b)
@ -1125,8 +1125,9 @@ func (m *VStreamRowsRequest) GetLastpk() *query.QueryResult {
type VStreamRowsResponse struct {
Fields []*query.Field `protobuf:"bytes,1,rep,name=fields,proto3" json:"fields,omitempty"`
Pkfields []*query.Field `protobuf:"bytes,2,rep,name=pkfields,proto3" json:"pkfields,omitempty"`
Rows []*query.Row `protobuf:"bytes,3,rep,name=rows,proto3" json:"rows,omitempty"`
Lastpk *query.Row `protobuf:"bytes,4,opt,name=lastpk,proto3" json:"lastpk,omitempty"`
Gtid string `protobuf:"bytes,3,opt,name=gtid,proto3" json:"gtid,omitempty"`
Rows []*query.Row `protobuf:"bytes,4,rep,name=rows,proto3" json:"rows,omitempty"`
Lastpk *query.Row `protobuf:"bytes,5,opt,name=lastpk,proto3" json:"lastpk,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -1136,7 +1137,7 @@ func (m *VStreamRowsResponse) Reset() { *m = VStreamRowsResponse{} }
func (m *VStreamRowsResponse) String() string { return proto.CompactTextString(m) }
func (*VStreamRowsResponse) ProtoMessage() {}
func (*VStreamRowsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_binlogdata_79a221cb97c3fbe5, []int{16}
return fileDescriptor_binlogdata_4e5c97d173ca1608, []int{16}
}
func (m *VStreamRowsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_VStreamRowsResponse.Unmarshal(m, b)
@ -1170,6 +1171,13 @@ func (m *VStreamRowsResponse) GetPkfields() []*query.Field {
return nil
}
func (m *VStreamRowsResponse) GetGtid() string {
if m != nil {
return m.Gtid
}
return ""
}
func (m *VStreamRowsResponse) GetRows() []*query.Row {
if m != nil {
return m.Rows
@ -1208,90 +1216,91 @@ func init() {
proto.RegisterEnum("binlogdata.BinlogTransaction_Statement_Category", BinlogTransaction_Statement_Category_name, BinlogTransaction_Statement_Category_value)
}
func init() { proto.RegisterFile("binlogdata.proto", fileDescriptor_binlogdata_79a221cb97c3fbe5) }
func init() { proto.RegisterFile("binlogdata.proto", fileDescriptor_binlogdata_4e5c97d173ca1608) }
var fileDescriptor_binlogdata_79a221cb97c3fbe5 = []byte{
// 1307 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x56, 0x5d, 0x6e, 0xdb, 0xc6,
0x13, 0x8f, 0x44, 0x8a, 0x12, 0x87, 0x8e, 0x4d, 0xaf, 0x3f, 0xfe, 0x82, 0xf1, 0x4f, 0xe1, 0x12,
0x6d, 0xe3, 0x1a, 0xa8, 0x9c, 0xaa, 0x5f, 0x4f, 0x6d, 0x21, 0x89, 0x8c, 0xa3, 0x84, 0x96, 0x9c,
0x35, 0x93, 0x14, 0x79, 0x21, 0x68, 0x6a, 0x65, 0x13, 0xa6, 0x48, 0x85, 0x5c, 0xd9, 0xd5, 0x01,
0x8a, 0x1e, 0xa0, 0xaf, 0xbd, 0x40, 0x8f, 0xd0, 0x0b, 0xf4, 0x26, 0xbd, 0x47, 0xb1, 0x1f, 0xa4,
0x24, 0x07, 0x4d, 0xdc, 0x87, 0x3e, 0xf4, 0x85, 0x98, 0xef, 0x9d, 0xfd, 0xcd, 0xec, 0x70, 0xc0,
0x3c, 0x8f, 0x92, 0x38, 0xbd, 0x18, 0x05, 0x34, 0x68, 0x4d, 0xb3, 0x94, 0xa6, 0x08, 0x16, 0x92,
0x3d, 0xe3, 0x9a, 0x66, 0xd3, 0x50, 0x28, 0xf6, 0x8c, 0x37, 0x33, 0x92, 0xcd, 0x25, 0xb3, 0x4e,
0xd3, 0x69, 0xba, 0xf0, 0xb2, 0x4e, 0xa0, 0xde, 0xbb, 0x0c, 0xb2, 0x9c, 0x50, 0xb4, 0x0b, 0x5a,
0x18, 0x47, 0x24, 0xa1, 0xcd, 0xca, 0x7e, 0xe5, 0xa0, 0x86, 0x25, 0x87, 0x10, 0xa8, 0x61, 0x9a,
0x24, 0xcd, 0x2a, 0x97, 0x72, 0x9a, 0xd9, 0xe6, 0x24, 0xbb, 0x26, 0x59, 0x53, 0x11, 0xb6, 0x82,
0xb3, 0xfe, 0x54, 0x60, 0xb3, 0xcb, 0xf3, 0xf0, 0xb2, 0x20, 0xc9, 0x83, 0x90, 0x46, 0x69, 0x82,
0x8e, 0x01, 0x72, 0x1a, 0x50, 0x32, 0x21, 0x09, 0xcd, 0x9b, 0x95, 0x7d, 0xe5, 0xc0, 0x68, 0x3f,
0x6c, 0x2d, 0xdd, 0xe0, 0x2d, 0x97, 0xd6, 0x59, 0x61, 0x8f, 0x97, 0x5c, 0x51, 0x1b, 0x0c, 0x72,
0x4d, 0x12, 0xea, 0xd3, 0xf4, 0x8a, 0x24, 0x4d, 0x75, 0xbf, 0x72, 0x60, 0xb4, 0x37, 0x5b, 0xe2,
0x82, 0x0e, 0xd3, 0x78, 0x4c, 0x81, 0x81, 0x94, 0xf4, 0xde, 0x1f, 0x55, 0xd0, 0xcb, 0x68, 0xc8,
0x85, 0x46, 0x18, 0x50, 0x72, 0x91, 0x66, 0x73, 0x7e, 0xcd, 0xf5, 0xf6, 0xa3, 0x3b, 0x26, 0xd2,
0xea, 0x49, 0x3f, 0x5c, 0x46, 0x40, 0x9f, 0x41, 0x3d, 0x14, 0xe8, 0x71, 0x74, 0x8c, 0xf6, 0xd6,
0x72, 0x30, 0x09, 0x2c, 0x2e, 0x6c, 0x90, 0x09, 0x4a, 0xfe, 0x26, 0xe6, 0x90, 0xad, 0x61, 0x46,
0x5a, 0xbf, 0x55, 0xa0, 0x51, 0xc4, 0x45, 0x5b, 0xb0, 0xd1, 0x75, 0xfd, 0x17, 0x03, 0xec, 0xf4,
0x86, 0xc7, 0x83, 0xfe, 0x6b, 0xc7, 0x36, 0xef, 0xa1, 0x35, 0x68, 0x74, 0x5d, 0xbf, 0xeb, 0x1c,
0xf7, 0x07, 0x66, 0x05, 0xdd, 0x07, 0xbd, 0xeb, 0xfa, 0xbd, 0xe1, 0xc9, 0x49, 0xdf, 0x33, 0xab,
0x68, 0x03, 0x8c, 0xae, 0xeb, 0xe3, 0xa1, 0xeb, 0x76, 0x3b, 0xbd, 0x67, 0xa6, 0x82, 0x76, 0x60,
0xb3, 0xeb, 0xfa, 0xf6, 0x89, 0xeb, 0xdb, 0xce, 0x29, 0x76, 0x7a, 0x1d, 0xcf, 0xb1, 0x4d, 0x15,
0x01, 0x68, 0x4c, 0x6c, 0xbb, 0x66, 0x4d, 0xd2, 0x67, 0x8e, 0x67, 0x6a, 0x32, 0x5c, 0x7f, 0x70,
0xe6, 0x60, 0xcf, 0xac, 0x4b, 0xf6, 0xc5, 0xa9, 0xdd, 0xf1, 0x1c, 0xb3, 0x21, 0x59, 0xdb, 0x71,
0x1d, 0xcf, 0x31, 0xf5, 0xa7, 0x6a, 0xa3, 0x6a, 0x2a, 0x4f, 0xd5, 0x86, 0x62, 0xaa, 0xd6, 0x2f,
0x15, 0xd8, 0x39, 0xa3, 0x19, 0x09, 0x26, 0xcf, 0xc8, 0x1c, 0x07, 0xc9, 0x05, 0xc1, 0xe4, 0xcd,
0x8c, 0xe4, 0x14, 0xed, 0x41, 0x63, 0x9a, 0xe6, 0x11, 0xc3, 0x8e, 0x03, 0xac, 0xe3, 0x92, 0x47,
0x47, 0xa0, 0x5f, 0x91, 0xb9, 0x9f, 0x31, 0x7b, 0x09, 0x18, 0x6a, 0x95, 0x0d, 0x59, 0x46, 0x6a,
0x5c, 0x49, 0x6a, 0x19, 0x5f, 0xe5, 0xfd, 0xf8, 0x5a, 0x63, 0xd8, 0xbd, 0x9d, 0x54, 0x3e, 0x4d,
0x93, 0x9c, 0x20, 0x17, 0x90, 0x70, 0xf4, 0xe9, 0xa2, 0xb6, 0x3c, 0x3f, 0xa3, 0xfd, 0xe0, 0x9d,
0x0d, 0x80, 0x37, 0xcf, 0x6f, 0x8b, 0xac, 0x1f, 0x61, 0x4b, 0x9c, 0xe3, 0x05, 0xe7, 0x31, 0xc9,
0xef, 0x72, 0xf5, 0x5d, 0xd0, 0x28, 0x37, 0x6e, 0x56, 0xf7, 0x95, 0x03, 0x1d, 0x4b, 0xee, 0x9f,
0xde, 0x70, 0x04, 0xdb, 0xab, 0x27, 0xff, 0x2b, 0xf7, 0xfb, 0x12, 0x54, 0x3c, 0x8b, 0x09, 0xda,
0x86, 0xda, 0x24, 0xa0, 0xe1, 0xa5, 0xbc, 0x8d, 0x60, 0xd8, 0x55, 0xc6, 0x51, 0x4c, 0x49, 0xc6,
0x4b, 0xa8, 0x63, 0xc9, 0x59, 0x8f, 0x40, 0x7b, 0xcc, 0x29, 0xf4, 0x09, 0xd4, 0xb2, 0x19, 0xbb,
0xab, 0x78, 0xea, 0xe6, 0x72, 0x02, 0x2c, 0x30, 0x16, 0x6a, 0xeb, 0xd7, 0x2a, 0xac, 0x89, 0x84,
0xce, 0xd2, 0x59, 0x16, 0x12, 0x86, 0xe0, 0x15, 0x99, 0xe7, 0xd3, 0x20, 0x24, 0x05, 0x82, 0x05,
0xcf, 0x92, 0xc9, 0x2f, 0x83, 0x6c, 0x24, 0x4f, 0x15, 0x0c, 0xfa, 0x0a, 0x0c, 0x8e, 0x24, 0xf5,
0xe9, 0x7c, 0x4a, 0x38, 0x86, 0xeb, 0xed, 0xed, 0x45, 0x53, 0x71, 0x9c, 0xa8, 0x37, 0x9f, 0x12,
0x0c, 0xb4, 0xa4, 0x57, 0x3b, 0x51, 0xbd, 0x43, 0x27, 0x2e, 0xea, 0x57, 0x5b, 0xa9, 0xdf, 0x61,
0x09, 0x86, 0x26, 0xa3, 0x2c, 0xdd, 0x55, 0xc0, 0x51, 0x00, 0x84, 0x5a, 0xa0, 0xa5, 0x89, 0x3f,
0x1a, 0xc5, 0xcd, 0x3a, 0x4f, 0xf3, 0x7f, 0xcb, 0xb6, 0xc3, 0xc4, 0xb6, 0xdd, 0x8e, 0x28, 0x49,
0x2d, 0x4d, 0xec, 0x51, 0x6c, 0x3d, 0x07, 0x1d, 0xa7, 0x37, 0xbd, 0x4b, 0x9e, 0x80, 0x05, 0xda,
0x39, 0x19, 0xa7, 0x19, 0x91, 0x55, 0x05, 0x39, 0xf5, 0x70, 0x7a, 0x83, 0xa5, 0x06, 0xed, 0x43,
0x2d, 0x18, 0x17, 0x85, 0x59, 0x35, 0x11, 0x0a, 0x2b, 0x80, 0x06, 0x4e, 0x6f, 0xf8, 0xa4, 0x44,
0x0f, 0x40, 0x20, 0xe2, 0x27, 0xc1, 0xa4, 0x80, 0x5b, 0xe7, 0x92, 0x41, 0x30, 0x21, 0xe8, 0x6b,
0x30, 0xb2, 0xf4, 0xc6, 0x0f, 0xf9, 0xf1, 0xa2, 0x6d, 0x8d, 0xf6, 0xce, 0x4a, 0x29, 0x8b, 0xe4,
0x30, 0x64, 0x05, 0x99, 0x5b, 0xcf, 0x01, 0x1e, 0x47, 0x24, 0x1e, 0xdd, 0xe9, 0x90, 0x8f, 0x18,
0x7c, 0x24, 0x1e, 0x15, 0xf1, 0xd7, 0x64, 0xca, 0x3c, 0x02, 0x96, 0x3a, 0xeb, 0xe7, 0x2a, 0x68,
0x2f, 0x45, 0xbc, 0x43, 0x50, 0x79, 0xa1, 0xc5, 0xec, 0xde, 0x5d, 0x4e, 0x47, 0x58, 0xf0, 0x52,
0x73, 0x1b, 0xf4, 0x7f, 0xd0, 0x69, 0x34, 0x21, 0x39, 0x0d, 0x26, 0x53, 0x0e, 0x89, 0x82, 0x17,
0x02, 0xf6, 0x5b, 0xbb, 0xa0, 0xd1, 0x88, 0xb7, 0x8c, 0x8e, 0x39, 0xcd, 0x06, 0x34, 0x2b, 0x8f,
0xca, 0x45, 0x8c, 0x44, 0x9f, 0x83, 0xce, 0x50, 0xe0, 0xff, 0x93, 0x66, 0x8d, 0xc3, 0xba, 0x7d,
0x0b, 0x03, 0x7e, 0x2c, 0x6e, 0x64, 0x05, 0xae, 0xdf, 0x80, 0xc1, 0xf3, 0x96, 0x4e, 0xa2, 0x2f,
0x76, 0x57, 0xfb, 0xa2, 0xc0, 0x07, 0xc3, 0x78, 0x81, 0xd5, 0x87, 0xb0, 0x16, 0xce, 0xb2, 0x8c,
0xff, 0xdf, 0xa2, 0x09, 0x69, 0x6e, 0xf3, 0x94, 0x0d, 0x29, 0xf3, 0xa2, 0x09, 0x61, 0x48, 0xac,
0xbf, 0x14, 0x13, 0xa0, 0x98, 0x3a, 0xdf, 0xc3, 0x16, 0x19, 0x8f, 0x49, 0x48, 0xa3, 0x6b, 0xe2,
0x87, 0x41, 0x1c, 0x93, 0xcc, 0x8f, 0x46, 0xb2, 0x4b, 0x36, 0x5a, 0x62, 0x13, 0xe8, 0x71, 0x79,
0xdf, 0xc6, 0x9b, 0xa5, 0xad, 0x14, 0x8d, 0x90, 0x03, 0x5b, 0xd1, 0x64, 0x42, 0x46, 0x51, 0x40,
0x97, 0x03, 0x88, 0x1e, 0xda, 0x91, 0x05, 0x79, 0xe9, 0x1d, 0x07, 0x94, 0x2c, 0xc2, 0x94, 0x1e,
0x65, 0x98, 0x8f, 0xd9, 0x0b, 0xc9, 0x2e, 0xca, 0x41, 0x76, 0x5f, 0x7a, 0x7a, 0x5c, 0x88, 0xa5,
0x72, 0x65, 0x48, 0xaa, 0xb7, 0x86, 0xe4, 0xe2, 0x31, 0xd5, 0xde, 0xf7, 0x98, 0xac, 0x6f, 0x61,
0xa3, 0x04, 0x42, 0x0e, 0xc1, 0x43, 0xd0, 0x38, 0xe4, 0xc5, 0xdc, 0x41, 0x6f, 0x77, 0x07, 0x96,
0x16, 0xd6, 0x4f, 0x55, 0x40, 0x85, 0x7f, 0x7a, 0x93, 0xff, 0x47, 0xc1, 0xdc, 0x86, 0x1a, 0x97,
0x4b, 0x24, 0x05, 0xc3, 0x70, 0x88, 0x83, 0x9c, 0x4e, 0xaf, 0x4a, 0x18, 0x85, 0xf3, 0x73, 0xf6,
0xc5, 0x24, 0x9f, 0xc5, 0x14, 0x4b, 0x0b, 0xb6, 0x80, 0x6c, 0xad, 0xe0, 0x20, 0xb1, 0x5c, 0x3c,
0xcc, 0xca, 0xdf, 0x3f, 0x4c, 0x74, 0x00, 0x8d, 0xe9, 0xd5, 0x3b, 0x1e, 0x70, 0xa9, 0x45, 0x1f,
0x80, 0x9a, 0xa5, 0x37, 0x79, 0x53, 0xe1, 0x56, 0xcb, 0x93, 0x89, 0xcb, 0xd9, 0x78, 0x93, 0x39,
0xab, 0x6f, 0x8f, 0x37, 0xa1, 0x39, 0xfc, 0x0e, 0x8c, 0xa5, 0x29, 0xc9, 0x16, 0x99, 0xfe, 0xf1,
0x60, 0x88, 0x1d, 0xf3, 0x1e, 0x6a, 0x80, 0x7a, 0xe6, 0x0d, 0x4f, 0xcd, 0x0a, 0xa3, 0x9c, 0x1f,
0x9c, 0x9e, 0x58, 0x8e, 0x18, 0xe5, 0x4b, 0x23, 0xe5, 0xf0, 0xf7, 0x0a, 0xc0, 0x62, 0x48, 0x20,
0x03, 0xea, 0x2f, 0x06, 0xcf, 0x06, 0xc3, 0x57, 0x03, 0x11, 0xe0, 0xd8, 0xeb, 0xdb, 0x66, 0x05,
0xe9, 0x50, 0x13, 0xdb, 0x56, 0x95, 0x9d, 0x20, 0x57, 0x2d, 0x85, 0xed, 0x61, 0xe5, 0x9e, 0xa5,
0xa2, 0x3a, 0x28, 0xe5, 0x36, 0x25, 0xd7, 0x27, 0x8d, 0x05, 0xc4, 0xce, 0xa9, 0xdb, 0xe9, 0x39,
0x66, 0x9d, 0x29, 0xca, 0x45, 0x0a, 0x40, 0x2b, 0xb6, 0x28, 0xe6, 0xc9, 0x76, 0x2f, 0x60, 0xe7,
0x0c, 0xbd, 0x27, 0x0e, 0x36, 0x0d, 0x26, 0xc3, 0xc3, 0x57, 0xe6, 0x1a, 0x93, 0x3d, 0xee, 0x3b,
0xae, 0x6d, 0xde, 0x67, 0xcb, 0xd7, 0x13, 0xa7, 0x83, 0xbd, 0xae, 0xd3, 0xf1, 0xcc, 0xf5, 0xee,
0xa7, 0xaf, 0x1f, 0x5e, 0x47, 0x94, 0xe4, 0x79, 0x2b, 0x4a, 0x8f, 0x04, 0x75, 0x74, 0x91, 0x1e,
0x5d, 0xd3, 0x23, 0xbe, 0xc7, 0x1f, 0x2d, 0x3a, 0xfd, 0x5c, 0xe3, 0x92, 0x2f, 0xfe, 0x0a, 0x00,
0x00, 0xff, 0xff, 0x7b, 0x7d, 0x1a, 0xa7, 0x23, 0x0c, 0x00, 0x00,
var fileDescriptor_binlogdata_4e5c97d173ca1608 = []byte{
// 1315 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x56, 0x4d, 0x72, 0xdb, 0xc6,
0x12, 0x36, 0x09, 0x10, 0x24, 0x1a, 0xb2, 0x04, 0x8d, 0x7e, 0x1e, 0x4b, 0xf5, 0xfc, 0x4a, 0x0f,
0xf5, 0x5e, 0xac, 0xa8, 0x2a, 0x94, 0xc3, 0xfc, 0xad, 0x92, 0x14, 0x49, 0xc0, 0x32, 0x6d, 0x88,
0x94, 0x47, 0xb0, 0x9d, 0xf2, 0x06, 0x05, 0x81, 0x43, 0x09, 0x25, 0x10, 0xa0, 0x81, 0xa1, 0x14,
0x1e, 0x20, 0x95, 0x03, 0x64, 0x9b, 0x0b, 0xe4, 0x08, 0x59, 0x64, 0x9b, 0x9b, 0xe4, 0x1e, 0xa9,
0xf9, 0x01, 0x48, 0xca, 0x89, 0xad, 0x2c, 0xb2, 0xc8, 0x06, 0xd5, 0xdd, 0xd3, 0xdd, 0xd3, 0xfd,
0x75, 0x4f, 0xa3, 0xc1, 0x3c, 0x8f, 0x92, 0x38, 0xbd, 0x18, 0x05, 0x34, 0x68, 0x4d, 0xb3, 0x94,
0xa6, 0x08, 0x16, 0x92, 0x3d, 0xe3, 0x9a, 0x66, 0xd3, 0x50, 0x1c, 0xec, 0x19, 0x6f, 0x66, 0x24,
0x9b, 0x4b, 0x66, 0x9d, 0xa6, 0xd3, 0x74, 0x61, 0x65, 0x9d, 0x40, 0xbd, 0x77, 0x19, 0x64, 0x39,
0xa1, 0x68, 0x17, 0xb4, 0x30, 0x8e, 0x48, 0x42, 0x9b, 0x95, 0xfd, 0xca, 0x41, 0x0d, 0x4b, 0x0e,
0x21, 0x50, 0xc3, 0x34, 0x49, 0x9a, 0x55, 0x2e, 0xe5, 0x34, 0xd3, 0xcd, 0x49, 0x76, 0x4d, 0xb2,
0xa6, 0x22, 0x74, 0x05, 0x67, 0xfd, 0xa6, 0xc0, 0x66, 0x97, 0xc7, 0xe1, 0x65, 0x41, 0x92, 0x07,
0x21, 0x8d, 0xd2, 0x04, 0x1d, 0x03, 0xe4, 0x34, 0xa0, 0x64, 0x42, 0x12, 0x9a, 0x37, 0x2b, 0xfb,
0xca, 0x81, 0xd1, 0x7e, 0xd8, 0x5a, 0xca, 0xe0, 0x2d, 0x93, 0xd6, 0x59, 0xa1, 0x8f, 0x97, 0x4c,
0x51, 0x1b, 0x0c, 0x72, 0x4d, 0x12, 0xea, 0xd3, 0xf4, 0x8a, 0x24, 0x4d, 0x75, 0xbf, 0x72, 0x60,
0xb4, 0x37, 0x5b, 0x22, 0x41, 0x87, 0x9d, 0x78, 0xec, 0x00, 0x03, 0x29, 0xe9, 0xbd, 0x5f, 0xab,
0xa0, 0x97, 0xde, 0x90, 0x0b, 0x8d, 0x30, 0xa0, 0xe4, 0x22, 0xcd, 0xe6, 0x3c, 0xcd, 0xf5, 0xf6,
0xa3, 0x3b, 0x06, 0xd2, 0xea, 0x49, 0x3b, 0x5c, 0x7a, 0x40, 0x1f, 0x41, 0x3d, 0x14, 0xe8, 0x71,
0x74, 0x8c, 0xf6, 0xd6, 0xb2, 0x33, 0x09, 0x2c, 0x2e, 0x74, 0x90, 0x09, 0x4a, 0xfe, 0x26, 0xe6,
0x90, 0xad, 0x61, 0x46, 0x5a, 0x3f, 0x55, 0xa0, 0x51, 0xf8, 0x45, 0x5b, 0xb0, 0xd1, 0x75, 0xfd,
0x17, 0x03, 0xec, 0xf4, 0x86, 0xc7, 0x83, 0xfe, 0x6b, 0xc7, 0x36, 0xef, 0xa1, 0x35, 0x68, 0x74,
0x5d, 0xbf, 0xeb, 0x1c, 0xf7, 0x07, 0x66, 0x05, 0xdd, 0x07, 0xbd, 0xeb, 0xfa, 0xbd, 0xe1, 0xc9,
0x49, 0xdf, 0x33, 0xab, 0x68, 0x03, 0x8c, 0xae, 0xeb, 0xe3, 0xa1, 0xeb, 0x76, 0x3b, 0xbd, 0x67,
0xa6, 0x82, 0x76, 0x60, 0xb3, 0xeb, 0xfa, 0xf6, 0x89, 0xeb, 0xdb, 0xce, 0x29, 0x76, 0x7a, 0x1d,
0xcf, 0xb1, 0x4d, 0x15, 0x01, 0x68, 0x4c, 0x6c, 0xbb, 0x66, 0x4d, 0xd2, 0x67, 0x8e, 0x67, 0x6a,
0xd2, 0x5d, 0x7f, 0x70, 0xe6, 0x60, 0xcf, 0xac, 0x4b, 0xf6, 0xc5, 0xa9, 0xdd, 0xf1, 0x1c, 0xb3,
0x21, 0x59, 0xdb, 0x71, 0x1d, 0xcf, 0x31, 0xf5, 0xa7, 0x6a, 0xa3, 0x6a, 0x2a, 0x4f, 0xd5, 0x86,
0x62, 0xaa, 0xd6, 0x0f, 0x15, 0xd8, 0x39, 0xa3, 0x19, 0x09, 0x26, 0xcf, 0xc8, 0x1c, 0x07, 0xc9,
0x05, 0xc1, 0xe4, 0xcd, 0x8c, 0xe4, 0x14, 0xed, 0x41, 0x63, 0x9a, 0xe6, 0x11, 0xc3, 0x8e, 0x03,
0xac, 0xe3, 0x92, 0x47, 0x47, 0xa0, 0x5f, 0x91, 0xb9, 0x9f, 0x31, 0x7d, 0x09, 0x18, 0x6a, 0x95,
0x0d, 0x59, 0x7a, 0x6a, 0x5c, 0x49, 0x6a, 0x19, 0x5f, 0xe5, 0xfd, 0xf8, 0x5a, 0x63, 0xd8, 0xbd,
0x1d, 0x54, 0x3e, 0x4d, 0x93, 0x9c, 0x20, 0x17, 0x90, 0x30, 0xf4, 0xe9, 0xa2, 0xb6, 0x3c, 0x3e,
0xa3, 0xfd, 0xe0, 0x9d, 0x0d, 0x80, 0x37, 0xcf, 0x6f, 0x8b, 0xac, 0x6f, 0x61, 0x4b, 0xdc, 0xe3,
0x05, 0xe7, 0x31, 0xc9, 0xef, 0x92, 0xfa, 0x2e, 0x68, 0x94, 0x2b, 0x37, 0xab, 0xfb, 0xca, 0x81,
0x8e, 0x25, 0xf7, 0x57, 0x33, 0x1c, 0xc1, 0xf6, 0xea, 0xcd, 0x7f, 0x4b, 0x7e, 0x9f, 0x82, 0x8a,
0x67, 0x31, 0x41, 0xdb, 0x50, 0x9b, 0x04, 0x34, 0xbc, 0x94, 0xd9, 0x08, 0x86, 0xa5, 0x32, 0x8e,
0x62, 0x4a, 0x32, 0x5e, 0x42, 0x1d, 0x4b, 0xce, 0x7a, 0x04, 0xda, 0x63, 0x4e, 0xa1, 0x0f, 0xa0,
0x96, 0xcd, 0x58, 0xae, 0xe2, 0xa9, 0x9b, 0xcb, 0x01, 0x30, 0xc7, 0x58, 0x1c, 0x5b, 0x3f, 0x56,
0x61, 0x4d, 0x04, 0x74, 0x96, 0xce, 0xb2, 0x90, 0x30, 0x04, 0xaf, 0xc8, 0x3c, 0x9f, 0x06, 0x21,
0x29, 0x10, 0x2c, 0x78, 0x16, 0x4c, 0x7e, 0x19, 0x64, 0x23, 0x79, 0xab, 0x60, 0xd0, 0x67, 0x60,
0x70, 0x24, 0xa9, 0x4f, 0xe7, 0x53, 0xc2, 0x31, 0x5c, 0x6f, 0x6f, 0x2f, 0x9a, 0x8a, 0xe3, 0x44,
0xbd, 0xf9, 0x94, 0x60, 0xa0, 0x25, 0xbd, 0xda, 0x89, 0xea, 0x1d, 0x3a, 0x71, 0x51, 0xbf, 0xda,
0x4a, 0xfd, 0x0e, 0x4b, 0x30, 0x34, 0xe9, 0x65, 0x29, 0x57, 0x01, 0x47, 0x01, 0x10, 0x6a, 0x81,
0x96, 0x26, 0xfe, 0x68, 0x14, 0x37, 0xeb, 0x3c, 0xcc, 0x7f, 0x2d, 0xeb, 0x0e, 0x13, 0xdb, 0x76,
0x3b, 0xa2, 0x24, 0xb5, 0x34, 0xb1, 0x47, 0xb1, 0xf5, 0x1c, 0x74, 0x9c, 0xde, 0xf4, 0x2e, 0x79,
0x00, 0x16, 0x68, 0xe7, 0x64, 0x9c, 0x66, 0x44, 0x56, 0x15, 0xe4, 0xd4, 0xc3, 0xe9, 0x0d, 0x96,
0x27, 0x68, 0x1f, 0x6a, 0xc1, 0xb8, 0x28, 0xcc, 0xaa, 0x8a, 0x38, 0xb0, 0x02, 0x68, 0xe0, 0xf4,
0x86, 0x4f, 0x4a, 0xf4, 0x00, 0x04, 0x22, 0x7e, 0x12, 0x4c, 0x0a, 0xb8, 0x75, 0x2e, 0x19, 0x04,
0x13, 0x82, 0x3e, 0x07, 0x23, 0x4b, 0x6f, 0xfc, 0x90, 0x5f, 0x2f, 0xda, 0xd6, 0x68, 0xef, 0xac,
0x94, 0xb2, 0x08, 0x0e, 0x43, 0x56, 0x90, 0xb9, 0xf5, 0x1c, 0xe0, 0x71, 0x44, 0xe2, 0xd1, 0x9d,
0x2e, 0xf9, 0x1f, 0x83, 0x8f, 0xc4, 0xa3, 0xc2, 0xff, 0x9a, 0x0c, 0x99, 0x7b, 0xc0, 0xf2, 0xcc,
0xfa, 0xbe, 0x0a, 0xda, 0x4b, 0xe1, 0xef, 0x10, 0x54, 0x5e, 0x68, 0x31, 0xbb, 0x77, 0x97, 0xc3,
0x11, 0x1a, 0xbc, 0xd4, 0x5c, 0x07, 0xfd, 0x1b, 0x74, 0x1a, 0x4d, 0x48, 0x4e, 0x83, 0xc9, 0x94,
0x43, 0xa2, 0xe0, 0x85, 0x80, 0xfd, 0xd6, 0x2e, 0x68, 0x34, 0xe2, 0x2d, 0xa3, 0x63, 0x4e, 0xb3,
0x01, 0xcd, 0xca, 0xa3, 0x72, 0x11, 0x23, 0xd1, 0xc7, 0xa0, 0x33, 0x14, 0xf8, 0xff, 0xa4, 0x59,
0xe3, 0xb0, 0x6e, 0xdf, 0xc2, 0x80, 0x5f, 0x8b, 0x1b, 0x59, 0x81, 0xeb, 0x17, 0x60, 0xf0, 0xb8,
0xa5, 0x91, 0xe8, 0x8b, 0xdd, 0xd5, 0xbe, 0x28, 0xf0, 0xc1, 0x30, 0x5e, 0x60, 0xf5, 0x5f, 0x58,
0x0b, 0x67, 0x59, 0xc6, 0xff, 0x6f, 0xd1, 0x84, 0x34, 0xb7, 0x79, 0xc8, 0x86, 0x94, 0x79, 0xd1,
0x84, 0x30, 0x24, 0xd6, 0x5f, 0x8a, 0x09, 0x50, 0x4c, 0x9d, 0xaf, 0x61, 0x8b, 0x8c, 0xc7, 0x24,
0xa4, 0xd1, 0x35, 0xf1, 0xc3, 0x20, 0x8e, 0x49, 0xe6, 0x47, 0x23, 0xd9, 0x25, 0x1b, 0x2d, 0xb1,
0x09, 0xf4, 0xb8, 0xbc, 0x6f, 0xe3, 0xcd, 0x52, 0x57, 0x8a, 0x46, 0xc8, 0x81, 0xad, 0x68, 0x32,
0x21, 0xa3, 0x28, 0xa0, 0xcb, 0x0e, 0x44, 0x0f, 0xed, 0xc8, 0x82, 0xbc, 0xf4, 0x8e, 0x03, 0x4a,
0x16, 0x6e, 0x4a, 0x8b, 0xd2, 0xcd, 0xff, 0xd9, 0x0b, 0xc9, 0x2e, 0xca, 0x41, 0x76, 0x5f, 0x5a,
0x7a, 0x5c, 0x88, 0xe5, 0xe1, 0xca, 0x90, 0x54, 0x6f, 0x0d, 0xc9, 0xc5, 0x63, 0xaa, 0xbd, 0xef,
0x31, 0x59, 0x5f, 0xc2, 0x46, 0x09, 0x84, 0x1c, 0x82, 0x87, 0xa0, 0x71, 0xc8, 0x8b, 0xb9, 0x83,
0xde, 0xee, 0x0e, 0x2c, 0x35, 0xac, 0xef, 0xaa, 0x80, 0x0a, 0xfb, 0xf4, 0x26, 0xff, 0x87, 0x82,
0xb9, 0x0d, 0x35, 0x2e, 0x97, 0x48, 0x0a, 0x86, 0xe1, 0x10, 0x07, 0x39, 0x9d, 0x5e, 0x95, 0x30,
0x0a, 0xe3, 0xe7, 0xec, 0x8b, 0x49, 0x3e, 0x8b, 0x29, 0x96, 0x1a, 0xd6, 0x2f, 0x15, 0xd8, 0x5a,
0xc1, 0x41, 0x62, 0xb9, 0x78, 0x98, 0x95, 0x3f, 0x7f, 0x98, 0xe8, 0x00, 0x1a, 0xd3, 0xab, 0x77,
0x3c, 0xe0, 0xf2, 0xf4, 0x0f, 0x5f, 0xdb, 0x7f, 0x40, 0xcd, 0xd2, 0x9b, 0xbc, 0xa9, 0x72, 0xcb,
0xe5, 0x69, 0xc5, 0xe5, 0x6c, 0xe4, 0xad, 0xe4, 0xb1, 0x32, 0xf2, 0xc4, 0xc9, 0xe1, 0x57, 0x60,
0x2c, 0x4d, 0x4e, 0xb6, 0xdc, 0xf4, 0x8f, 0x07, 0x43, 0xec, 0x98, 0xf7, 0x50, 0x03, 0xd4, 0x33,
0x6f, 0x78, 0x6a, 0x56, 0x18, 0xe5, 0x7c, 0xe3, 0xf4, 0xc4, 0xc2, 0xc4, 0x28, 0x5f, 0x2a, 0x29,
0x87, 0x3f, 0x57, 0x00, 0x16, 0x83, 0x03, 0x19, 0x50, 0x7f, 0x31, 0x78, 0x36, 0x18, 0xbe, 0x1a,
0x08, 0x07, 0xc7, 0x5e, 0xdf, 0x36, 0x2b, 0x48, 0x87, 0x9a, 0xd8, 0xc0, 0xaa, 0xec, 0x06, 0xb9,
0x7e, 0x29, 0x6c, 0x37, 0x2b, 0x77, 0x2f, 0x15, 0xd5, 0x41, 0x29, 0x37, 0x2c, 0xb9, 0x52, 0x69,
0xcc, 0x21, 0x76, 0x4e, 0xdd, 0x4e, 0xcf, 0x31, 0xeb, 0xec, 0xa0, 0x5c, 0xae, 0x00, 0xb4, 0x62,
0xb3, 0x62, 0x96, 0x6c, 0x1f, 0x03, 0x76, 0xcf, 0xd0, 0x7b, 0xe2, 0x60, 0xd3, 0x60, 0x32, 0x3c,
0x7c, 0x65, 0xae, 0x31, 0xd9, 0xe3, 0xbe, 0xe3, 0xda, 0xe6, 0x7d, 0xb6, 0x90, 0x3d, 0x71, 0x3a,
0xd8, 0xeb, 0x3a, 0x1d, 0xcf, 0x5c, 0xef, 0x7e, 0xf8, 0xfa, 0xe1, 0x75, 0x44, 0x49, 0x9e, 0xb7,
0xa2, 0xf4, 0x48, 0x50, 0x47, 0x17, 0xe9, 0xd1, 0x35, 0x3d, 0xe2, 0xbb, 0xfd, 0xd1, 0xa2, 0xfb,
0xcf, 0x35, 0x2e, 0xf9, 0xe4, 0xf7, 0x00, 0x00, 0x00, 0xff, 0xff, 0x47, 0x47, 0xf1, 0x1d, 0x37,
0x0c, 0x00, 0x00,
}

Просмотреть файл

@ -19,6 +19,7 @@ package vstreamer
import (
"context"
"fmt"
"sync"
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/sqltypes"
@ -163,10 +164,15 @@ func (rs *rowStreamer) buildSelect() (string, error) {
// ExecuteStreamFetch overwrites mysql.Conn.ExecuteStreamFetch.
func (rs *rowStreamer) streamQuery(conn *mysql.Conn, query string, send func(*binlogdatapb.VStreamRowsResponse) error) error {
err := conn.ExecuteStreamFetch(query)
unlock, gtid, err := rs.lockTable()
if err != nil {
return err
}
defer unlock()
if err := conn.ExecuteStreamFetch(query); err != nil {
return err
}
// first call the callback with the fields
flds, err := conn.Fields()
@ -184,10 +190,14 @@ func (rs *rowStreamer) streamQuery(conn *mysql.Conn, query string, send func(*bi
err = send(&binlogdatapb.VStreamRowsResponse{
Fields: rs.plan.fields(),
Pkfields: pkfields,
Gtid: gtid,
})
if err != nil {
return fmt.Errorf("stream send error: %v", err)
}
if err := unlock(); err != nil {
return err
}
response := &binlogdatapb.VStreamRowsResponse{}
lastpk := make([]sqltypes.Value, len(rs.pkColumns))
@ -243,3 +253,32 @@ func (rs *rowStreamer) streamQuery(conn *mysql.Conn, query string, send func(*bi
return nil
}
func (rs *rowStreamer) lockTable() (unlock func() error, gtid string, err error) {
conn, err := mysql.Connect(rs.ctx, rs.cp)
if err != nil {
return nil, "", err
}
// mysql recommends this before locking tables.
if _, err := conn.ExecuteFetch("set autocommit=0", 0, false); err != nil {
return nil, "", err
}
if _, err := conn.ExecuteFetch(fmt.Sprintf("lock tables %s read", sqlparser.String(sqlparser.NewTableIdent(rs.plan.Table.Name))), 0, false); err != nil {
return nil, "", err
}
var once sync.Once
unlock = func() error {
var err error
once.Do(func() {
_, err = conn.ExecuteFetch("unlock tables", 0, false)
conn.Close()
})
return err
}
pos, err := conn.MasterPosition()
if err != nil {
unlock()
return nil, "", err
}
return unlock, mysql.EncodePosition(pos), nil
}

Просмотреть файл

@ -197,8 +197,14 @@ func checkStream(t *testing.T, query string, lastpk []sqltypes.Value, wantStream
// We don't want to report errors inside callback functions because
// line numbers come out wrong.
go func() {
first := true
defer close(ch)
err := engine.StreamRows(ctx, query, lastpk, func(rows *binlogdatapb.VStreamRowsResponse) error {
if first && rows.Gtid == "" {
ch <- fmt.Errorf("stream gtid is empty")
}
first = false
rows.Gtid = ""
if i >= len(wantStream) {
ch <- fmt.Errorf("unexpected stream rows: %v", rows)
return nil

Просмотреть файл

@ -357,7 +357,7 @@ func TestDDLAddColumn(t *testing.T) {
go func() {
defer close(ch)
if err := vstream(ctx, t, pos, filter, ch); err != nil {
t.Fatal(err)
t.Error(err)
}
}()
expectLog(ctx, t, "ddls", ch, [][]string{{

Просмотреть файл

@ -246,6 +246,7 @@ message VStreamRowsRequest {
message VStreamRowsResponse {
repeated query.Field fields = 1;
repeated query.Field pkfields = 2;
repeated query.Row rows = 3;
query.Row lastpk = 4;
string gtid = 3;
repeated query.Row rows = 4;
query.Row lastpk = 5;
}

Просмотреть файл

@ -23,7 +23,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
package='binlogdata',
syntax='proto3',
serialized_options=_b('Z\'vitess.io/vitess/go/vt/proto/binlogdata'),
serialized_pb=_b('\n\x10\x62inlogdata.proto\x12\nbinlogdata\x1a\x0bvtrpc.proto\x1a\x0bquery.proto\x1a\x0etopodata.proto\"7\n\x07\x43harset\x12\x0e\n\x06\x63lient\x18\x01 \x01(\x05\x12\x0c\n\x04\x63onn\x18\x02 \x01(\x05\x12\x0e\n\x06server\x18\x03 \x01(\x05\"\xb5\x03\n\x11\x42inlogTransaction\x12;\n\nstatements\x18\x01 \x03(\x0b\x32\'.binlogdata.BinlogTransaction.Statement\x12&\n\x0b\x65vent_token\x18\x04 \x01(\x0b\x32\x11.query.EventToken\x1a\xae\x02\n\tStatement\x12\x42\n\x08\x63\x61tegory\x18\x01 \x01(\x0e\x32\x30.binlogdata.BinlogTransaction.Statement.Category\x12$\n\x07\x63harset\x18\x02 \x01(\x0b\x32\x13.binlogdata.Charset\x12\x0b\n\x03sql\x18\x03 \x01(\x0c\"\xa9\x01\n\x08\x43\x61tegory\x12\x13\n\x0f\x42L_UNRECOGNIZED\x10\x00\x12\x0c\n\x08\x42L_BEGIN\x10\x01\x12\r\n\tBL_COMMIT\x10\x02\x12\x0f\n\x0b\x42L_ROLLBACK\x10\x03\x12\x15\n\x11\x42L_DML_DEPRECATED\x10\x04\x12\n\n\x06\x42L_DDL\x10\x05\x12\n\n\x06\x42L_SET\x10\x06\x12\r\n\tBL_INSERT\x10\x07\x12\r\n\tBL_UPDATE\x10\x08\x12\r\n\tBL_DELETE\x10\tJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04\"v\n\x15StreamKeyRangeRequest\x12\x10\n\x08position\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12$\n\x07\x63harset\x18\x03 \x01(\x0b\x32\x13.binlogdata.Charset\"S\n\x16StreamKeyRangeResponse\x12\x39\n\x12\x62inlog_transaction\x18\x01 \x01(\x0b\x32\x1d.binlogdata.BinlogTransaction\"]\n\x13StreamTablesRequest\x12\x10\n\x08position\x18\x01 \x01(\t\x12\x0e\n\x06tables\x18\x02 \x03(\t\x12$\n\x07\x63harset\x18\x03 \x01(\x0b\x32\x13.binlogdata.Charset\"Q\n\x14StreamTablesResponse\x12\x39\n\x12\x62inlog_transaction\x18\x01 \x01(\x0b\x32\x1d.binlogdata.BinlogTransaction\"%\n\x04Rule\x12\r\n\x05match\x18\x01 \x01(\t\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\")\n\x06\x46ilter\x12\x1f\n\x05rules\x18\x01 \x03(\x0b\x32\x10.binlogdata.Rule\"\xde\x01\n\x0c\x42inlogSource\x12\x10\n\x08keyspace\x18\x01 \x01(\t\x12\r\n\x05shard\x18\x02 \x01(\t\x12)\n\x0btablet_type\x18\x03 \x01(\x0e\x32\x14.topodata.TabletType\x12%\n\tkey_range\x18\x04 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x0e\n\x06tables\x18\x05 \x03(\t\x12\"\n\x06\x66ilter\x18\x06 \x01(\x0b\x32\x12.binlogdata.Filter\x12\'\n\x06on_ddl\x18\x07 \x01(\x0e\x32\x17.binlogdata.OnDDLAction\"B\n\tRowChange\x12\x1a\n\x06\x62\x65\x66ore\x18\x01 \x01(\x0b\x32\n.query.Row\x12\x19\n\x05\x61\x66ter\x18\x02 \x01(\x0b\x32\n.query.Row\"J\n\x08RowEvent\x12\x12\n\ntable_name\x18\x01 \x01(\t\x12*\n\x0brow_changes\x18\x02 \x03(\x0b\x32\x15.binlogdata.RowChange\">\n\nFieldEvent\x12\x12\n\ntable_name\x18\x01 \x01(\t\x12\x1c\n\x06\x66ields\x18\x02 \x03(\x0b\x32\x0c.query.Field\"\xc8\x01\n\x06VEvent\x12$\n\x04type\x18\x01 \x01(\x0e\x32\x16.binlogdata.VEventType\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\x12\x0c\n\x04gtid\x18\x03 \x01(\t\x12\x0b\n\x03\x64\x64l\x18\x04 \x01(\t\x12\'\n\trow_event\x18\x05 \x01(\x0b\x32\x14.binlogdata.RowEvent\x12+\n\x0b\x66ield_event\x18\x06 \x01(\x0b\x32\x16.binlogdata.FieldEvent\x12\x14\n\x0c\x63urrent_time\x18\x14 \x01(\x03\"\xc7\x01\n\x0eVStreamRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x10\n\x08position\x18\x04 \x01(\t\x12\"\n\x06\x66ilter\x18\x05 \x01(\x0b\x32\x12.binlogdata.Filter\"5\n\x0fVStreamResponse\x12\"\n\x06\x65vents\x18\x01 \x03(\x0b\x32\x12.binlogdata.VEvent\"\xc8\x01\n\x12VStreamRowsRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\r\n\x05query\x18\x04 \x01(\t\x12\"\n\x06lastpk\x18\x05 \x01(\x0b\x32\x12.query.QueryResult\"\x89\x01\n\x13VStreamRowsResponse\x12\x1c\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x0c.query.Field\x12\x1e\n\x08pkfields\x18\x02 \x03(\x0b\x32\x0c.query.Field\x12\x18\n\x04rows\x18\x03 \x03(\x0b\x32\n.query.Row\x12\x1a\n\x06lastpk\x18\x04 \x01(\x0b\x32\n.query.Row*>\n\x0bOnDDLAction\x12\n\n\x06IGNORE\x10\x00\x12\x08\n\x04STOP\x10\x01\x12\x08\n\x04\x45XEC\x10\x02\x12\x0f\n\x0b\x45XEC_IGNORE\x10\x03*\xb9\x01\n\nVEventType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x08\n\x04GTID\x10\x01\x12\t\n\x05\x42\x45GIN\x10\x02\x12\n\n\x06\x43OMMIT\x10\x03\x12\x0c\n\x08ROLLBACK\x10\x04\x12\x07\n\x03\x44\x44L\x10\x05\x12\n\n\x06INSERT\x10\x06\x12\x0b\n\x07REPLACE\x10\x07\x12\n\n\x06UPDATE\x10\x08\x12\n\n\x06\x44\x45LETE\x10\t\x12\x07\n\x03SET\x10\n\x12\t\n\x05OTHER\x10\x0b\x12\x07\n\x03ROW\x10\x0c\x12\t\n\x05\x46IELD\x10\r\x12\r\n\tHEARTBEAT\x10\x0e\x42)Z\'vitess.io/vitess/go/vt/proto/binlogdatab\x06proto3')
serialized_pb=_b('\n\x10\x62inlogdata.proto\x12\nbinlogdata\x1a\x0bvtrpc.proto\x1a\x0bquery.proto\x1a\x0etopodata.proto\"7\n\x07\x43harset\x12\x0e\n\x06\x63lient\x18\x01 \x01(\x05\x12\x0c\n\x04\x63onn\x18\x02 \x01(\x05\x12\x0e\n\x06server\x18\x03 \x01(\x05\"\xb5\x03\n\x11\x42inlogTransaction\x12;\n\nstatements\x18\x01 \x03(\x0b\x32\'.binlogdata.BinlogTransaction.Statement\x12&\n\x0b\x65vent_token\x18\x04 \x01(\x0b\x32\x11.query.EventToken\x1a\xae\x02\n\tStatement\x12\x42\n\x08\x63\x61tegory\x18\x01 \x01(\x0e\x32\x30.binlogdata.BinlogTransaction.Statement.Category\x12$\n\x07\x63harset\x18\x02 \x01(\x0b\x32\x13.binlogdata.Charset\x12\x0b\n\x03sql\x18\x03 \x01(\x0c\"\xa9\x01\n\x08\x43\x61tegory\x12\x13\n\x0f\x42L_UNRECOGNIZED\x10\x00\x12\x0c\n\x08\x42L_BEGIN\x10\x01\x12\r\n\tBL_COMMIT\x10\x02\x12\x0f\n\x0b\x42L_ROLLBACK\x10\x03\x12\x15\n\x11\x42L_DML_DEPRECATED\x10\x04\x12\n\n\x06\x42L_DDL\x10\x05\x12\n\n\x06\x42L_SET\x10\x06\x12\r\n\tBL_INSERT\x10\x07\x12\r\n\tBL_UPDATE\x10\x08\x12\r\n\tBL_DELETE\x10\tJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04\"v\n\x15StreamKeyRangeRequest\x12\x10\n\x08position\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12$\n\x07\x63harset\x18\x03 \x01(\x0b\x32\x13.binlogdata.Charset\"S\n\x16StreamKeyRangeResponse\x12\x39\n\x12\x62inlog_transaction\x18\x01 \x01(\x0b\x32\x1d.binlogdata.BinlogTransaction\"]\n\x13StreamTablesRequest\x12\x10\n\x08position\x18\x01 \x01(\t\x12\x0e\n\x06tables\x18\x02 \x03(\t\x12$\n\x07\x63harset\x18\x03 \x01(\x0b\x32\x13.binlogdata.Charset\"Q\n\x14StreamTablesResponse\x12\x39\n\x12\x62inlog_transaction\x18\x01 \x01(\x0b\x32\x1d.binlogdata.BinlogTransaction\"%\n\x04Rule\x12\r\n\x05match\x18\x01 \x01(\t\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\")\n\x06\x46ilter\x12\x1f\n\x05rules\x18\x01 \x03(\x0b\x32\x10.binlogdata.Rule\"\xde\x01\n\x0c\x42inlogSource\x12\x10\n\x08keyspace\x18\x01 \x01(\t\x12\r\n\x05shard\x18\x02 \x01(\t\x12)\n\x0btablet_type\x18\x03 \x01(\x0e\x32\x14.topodata.TabletType\x12%\n\tkey_range\x18\x04 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x0e\n\x06tables\x18\x05 \x03(\t\x12\"\n\x06\x66ilter\x18\x06 \x01(\x0b\x32\x12.binlogdata.Filter\x12\'\n\x06on_ddl\x18\x07 \x01(\x0e\x32\x17.binlogdata.OnDDLAction\"B\n\tRowChange\x12\x1a\n\x06\x62\x65\x66ore\x18\x01 \x01(\x0b\x32\n.query.Row\x12\x19\n\x05\x61\x66ter\x18\x02 \x01(\x0b\x32\n.query.Row\"J\n\x08RowEvent\x12\x12\n\ntable_name\x18\x01 \x01(\t\x12*\n\x0brow_changes\x18\x02 \x03(\x0b\x32\x15.binlogdata.RowChange\">\n\nFieldEvent\x12\x12\n\ntable_name\x18\x01 \x01(\t\x12\x1c\n\x06\x66ields\x18\x02 \x03(\x0b\x32\x0c.query.Field\"\xc8\x01\n\x06VEvent\x12$\n\x04type\x18\x01 \x01(\x0e\x32\x16.binlogdata.VEventType\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\x12\x0c\n\x04gtid\x18\x03 \x01(\t\x12\x0b\n\x03\x64\x64l\x18\x04 \x01(\t\x12\'\n\trow_event\x18\x05 \x01(\x0b\x32\x14.binlogdata.RowEvent\x12+\n\x0b\x66ield_event\x18\x06 \x01(\x0b\x32\x16.binlogdata.FieldEvent\x12\x14\n\x0c\x63urrent_time\x18\x14 \x01(\x03\"\xc7\x01\n\x0eVStreamRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x10\n\x08position\x18\x04 \x01(\t\x12\"\n\x06\x66ilter\x18\x05 \x01(\x0b\x32\x12.binlogdata.Filter\"5\n\x0fVStreamResponse\x12\"\n\x06\x65vents\x18\x01 \x03(\x0b\x32\x12.binlogdata.VEvent\"\xc8\x01\n\x12VStreamRowsRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\r\n\x05query\x18\x04 \x01(\t\x12\"\n\x06lastpk\x18\x05 \x01(\x0b\x32\x12.query.QueryResult\"\x97\x01\n\x13VStreamRowsResponse\x12\x1c\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x0c.query.Field\x12\x1e\n\x08pkfields\x18\x02 \x03(\x0b\x32\x0c.query.Field\x12\x0c\n\x04gtid\x18\x03 \x01(\t\x12\x18\n\x04rows\x18\x04 \x03(\x0b\x32\n.query.Row\x12\x1a\n\x06lastpk\x18\x05 \x01(\x0b\x32\n.query.Row*>\n\x0bOnDDLAction\x12\n\n\x06IGNORE\x10\x00\x12\x08\n\x04STOP\x10\x01\x12\x08\n\x04\x45XEC\x10\x02\x12\x0f\n\x0b\x45XEC_IGNORE\x10\x03*\xb9\x01\n\nVEventType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x08\n\x04GTID\x10\x01\x12\t\n\x05\x42\x45GIN\x10\x02\x12\n\n\x06\x43OMMIT\x10\x03\x12\x0c\n\x08ROLLBACK\x10\x04\x12\x07\n\x03\x44\x44L\x10\x05\x12\n\n\x06INSERT\x10\x06\x12\x0b\n\x07REPLACE\x10\x07\x12\n\n\x06UPDATE\x10\x08\x12\n\n\x06\x44\x45LETE\x10\t\x12\x07\n\x03SET\x10\n\x12\t\n\x05OTHER\x10\x0b\x12\x07\n\x03ROW\x10\x0c\x12\t\n\x05\x46IELD\x10\r\x12\r\n\tHEARTBEAT\x10\x0e\x42)Z\'vitess.io/vitess/go/vt/proto/binlogdatab\x06proto3')
,
dependencies=[vtrpc__pb2.DESCRIPTOR,query__pb2.DESCRIPTOR,topodata__pb2.DESCRIPTOR,])
@ -52,8 +52,8 @@ _ONDDLACTION = _descriptor.EnumDescriptor(
],
containing_type=None,
serialized_options=None,
serialized_start=2272,
serialized_end=2334,
serialized_start=2286,
serialized_end=2348,
)
_sym_db.RegisterEnumDescriptor(_ONDDLACTION)
@ -127,8 +127,8 @@ _VEVENTTYPE = _descriptor.EnumDescriptor(
],
containing_type=None,
serialized_options=None,
serialized_start=2337,
serialized_end=2522,
serialized_start=2351,
serialized_end=2536,
)
_sym_db.RegisterEnumDescriptor(_VEVENTTYPE)
@ -989,15 +989,22 @@ _VSTREAMROWSRESPONSE = _descriptor.Descriptor(
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='rows', full_name='binlogdata.VStreamRowsResponse.rows', index=2,
number=3, type=11, cpp_type=10, label=3,
name='gtid', full_name='binlogdata.VStreamRowsResponse.gtid', index=2,
number=3, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='rows', full_name='binlogdata.VStreamRowsResponse.rows', index=3,
number=4, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='lastpk', full_name='binlogdata.VStreamRowsResponse.lastpk', index=3,
number=4, type=11, cpp_type=10, label=1,
name='lastpk', full_name='binlogdata.VStreamRowsResponse.lastpk', index=4,
number=5, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
@ -1015,7 +1022,7 @@ _VSTREAMROWSRESPONSE = _descriptor.Descriptor(
oneofs=[
],
serialized_start=2133,
serialized_end=2270,
serialized_end=2284,
)
_BINLOGTRANSACTION_STATEMENT.fields_by_name['category'].enum_type = _BINLOGTRANSACTION_STATEMENT_CATEGORY