2pc: export ResolveTransaction in grpc

This commit is contained in:
Sugu Sougoumarane 2016-11-12 14:05:05 -08:00
Родитель ba41641552
Коммит ed1f2c53d8
18 изменённых файлов: 483 добавлений и 184 удалений

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

@ -83,6 +83,10 @@ func (c fallbackClient) Rollback(ctx context.Context, session *vtgatepb.Session)
return c.fallback.Rollback(ctx, session)
}
func (c fallbackClient) ResolveTransaction(ctx context.Context, dtid string) error {
return c.fallback.ResolveTransaction(ctx, dtid)
}
func (c fallbackClient) SplitQuery(
ctx context.Context,
keyspace string,

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

@ -88,6 +88,10 @@ func (c *terminalClient) Rollback(ctx context.Context, session *vtgatepb.Session
return errTerminal
}
func (c *terminalClient) ResolveTransaction(ctx context.Context, dtid string) error {
return errTerminal
}
func (c *terminalClient) SplitQuery(
ctx context.Context,
keyspace string,

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

@ -40,6 +40,8 @@ It has these top-level messages:
CommitResponse
RollbackRequest
RollbackResponse
ResolveTransactionRequest
ResolveTransactionResponse
SplitQueryRequest
SplitQueryResponse
GetSrvKeyspaceRequest
@ -1211,6 +1213,36 @@ func (m *RollbackResponse) String() string { return proto.CompactText
func (*RollbackResponse) ProtoMessage() {}
func (*RollbackResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
// ResolveTransactionRequest is the payload to ResolveTransaction.
type ResolveTransactionRequest struct {
// caller_id identifies the caller. This is the effective caller ID,
// set by the application to further identify the caller.
CallerId *vtrpc.CallerID `protobuf:"bytes,1,opt,name=caller_id,json=callerId" json:"caller_id,omitempty"`
// dtid is the dtid of the transaction to be resolved.
Dtid string `protobuf:"bytes,2,opt,name=dtid" json:"dtid,omitempty"`
}
func (m *ResolveTransactionRequest) Reset() { *m = ResolveTransactionRequest{} }
func (m *ResolveTransactionRequest) String() string { return proto.CompactTextString(m) }
func (*ResolveTransactionRequest) ProtoMessage() {}
func (*ResolveTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
func (m *ResolveTransactionRequest) GetCallerId() *vtrpc.CallerID {
if m != nil {
return m.CallerId
}
return nil
}
// ResolveTransactionResponse is the returned value from Rollback.
type ResolveTransactionResponse struct {
}
func (m *ResolveTransactionResponse) Reset() { *m = ResolveTransactionResponse{} }
func (m *ResolveTransactionResponse) String() string { return proto.CompactTextString(m) }
func (*ResolveTransactionResponse) ProtoMessage() {}
func (*ResolveTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
// SplitQueryRequest is the payload to SplitQuery.
//
// SplitQuery takes a "SELECT" query and generates a list of queries called
@ -1305,7 +1337,7 @@ type SplitQueryRequest struct {
func (m *SplitQueryRequest) Reset() { *m = SplitQueryRequest{} }
func (m *SplitQueryRequest) String() string { return proto.CompactTextString(m) }
func (*SplitQueryRequest) ProtoMessage() {}
func (*SplitQueryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
func (*SplitQueryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
func (m *SplitQueryRequest) GetCallerId() *vtrpc.CallerID {
if m != nil {
@ -1330,7 +1362,7 @@ type SplitQueryResponse struct {
func (m *SplitQueryResponse) Reset() { *m = SplitQueryResponse{} }
func (m *SplitQueryResponse) String() string { return proto.CompactTextString(m) }
func (*SplitQueryResponse) ProtoMessage() {}
func (*SplitQueryResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
func (*SplitQueryResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
func (m *SplitQueryResponse) GetSplits() []*SplitQueryResponse_Part {
if m != nil {
@ -1350,7 +1382,7 @@ func (m *SplitQueryResponse_KeyRangePart) Reset() { *m = SplitQueryRespo
func (m *SplitQueryResponse_KeyRangePart) String() string { return proto.CompactTextString(m) }
func (*SplitQueryResponse_KeyRangePart) ProtoMessage() {}
func (*SplitQueryResponse_KeyRangePart) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{32, 0}
return fileDescriptor0, []int{34, 0}
}
func (m *SplitQueryResponse_KeyRangePart) GetKeyRanges() []*topodata.KeyRange {
@ -1371,7 +1403,7 @@ func (m *SplitQueryResponse_ShardPart) Reset() { *m = SplitQueryResponse
func (m *SplitQueryResponse_ShardPart) String() string { return proto.CompactTextString(m) }
func (*SplitQueryResponse_ShardPart) ProtoMessage() {}
func (*SplitQueryResponse_ShardPart) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{32, 1}
return fileDescriptor0, []int{34, 1}
}
type SplitQueryResponse_Part struct {
@ -1389,7 +1421,7 @@ type SplitQueryResponse_Part struct {
func (m *SplitQueryResponse_Part) Reset() { *m = SplitQueryResponse_Part{} }
func (m *SplitQueryResponse_Part) String() string { return proto.CompactTextString(m) }
func (*SplitQueryResponse_Part) ProtoMessage() {}
func (*SplitQueryResponse_Part) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32, 2} }
func (*SplitQueryResponse_Part) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34, 2} }
func (m *SplitQueryResponse_Part) GetQuery() *query.BoundQuery {
if m != nil {
@ -1421,7 +1453,7 @@ type GetSrvKeyspaceRequest struct {
func (m *GetSrvKeyspaceRequest) Reset() { *m = GetSrvKeyspaceRequest{} }
func (m *GetSrvKeyspaceRequest) String() string { return proto.CompactTextString(m) }
func (*GetSrvKeyspaceRequest) ProtoMessage() {}
func (*GetSrvKeyspaceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
func (*GetSrvKeyspaceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
// GetSrvKeyspaceResponse is the returned value from GetSrvKeyspace.
type GetSrvKeyspaceResponse struct {
@ -1432,7 +1464,7 @@ type GetSrvKeyspaceResponse struct {
func (m *GetSrvKeyspaceResponse) Reset() { *m = GetSrvKeyspaceResponse{} }
func (m *GetSrvKeyspaceResponse) String() string { return proto.CompactTextString(m) }
func (*GetSrvKeyspaceResponse) ProtoMessage() {}
func (*GetSrvKeyspaceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
func (*GetSrvKeyspaceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
func (m *GetSrvKeyspaceResponse) GetSrvKeyspace() *topodata.SrvKeyspace {
if m != nil {
@ -1468,7 +1500,7 @@ type UpdateStreamRequest struct {
func (m *UpdateStreamRequest) Reset() { *m = UpdateStreamRequest{} }
func (m *UpdateStreamRequest) String() string { return proto.CompactTextString(m) }
func (*UpdateStreamRequest) ProtoMessage() {}
func (*UpdateStreamRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
func (*UpdateStreamRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
func (m *UpdateStreamRequest) GetCallerId() *vtrpc.CallerID {
if m != nil {
@ -1506,7 +1538,7 @@ type UpdateStreamResponse struct {
func (m *UpdateStreamResponse) Reset() { *m = UpdateStreamResponse{} }
func (m *UpdateStreamResponse) String() string { return proto.CompactTextString(m) }
func (*UpdateStreamResponse) ProtoMessage() {}
func (*UpdateStreamResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
func (*UpdateStreamResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
func (m *UpdateStreamResponse) GetEvent() *query.StreamEvent {
if m != nil {
@ -1549,6 +1581,8 @@ func init() {
proto.RegisterType((*CommitResponse)(nil), "vtgate.CommitResponse")
proto.RegisterType((*RollbackRequest)(nil), "vtgate.RollbackRequest")
proto.RegisterType((*RollbackResponse)(nil), "vtgate.RollbackResponse")
proto.RegisterType((*ResolveTransactionRequest)(nil), "vtgate.ResolveTransactionRequest")
proto.RegisterType((*ResolveTransactionResponse)(nil), "vtgate.ResolveTransactionResponse")
proto.RegisterType((*SplitQueryRequest)(nil), "vtgate.SplitQueryRequest")
proto.RegisterType((*SplitQueryResponse)(nil), "vtgate.SplitQueryResponse")
proto.RegisterType((*SplitQueryResponse_KeyRangePart)(nil), "vtgate.SplitQueryResponse.KeyRangePart")
@ -1563,98 +1597,100 @@ func init() {
func init() { proto.RegisterFile("vtgate.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 1488 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xd4, 0x59, 0x5d, 0x6f, 0x1b, 0xc5,
0x1a, 0xd6, 0xae, 0xbf, 0x5f, 0x7f, 0x24, 0x9d, 0x3a, 0xad, 0x8f, 0x4f, 0x4f, 0xe3, 0xae, 0x4e,
0x54, 0xf7, 0x9c, 0xc8, 0x55, 0x53, 0xbe, 0x84, 0x90, 0x80, 0x98, 0x08, 0x45, 0x85, 0x52, 0x26,
0x01, 0x71, 0x01, 0x5a, 0x6d, 0xec, 0x51, 0xba, 0xd8, 0xfb, 0xd1, 0x9d, 0x59, 0x17, 0x73, 0x81,
0xfa, 0x0f, 0x7a, 0x85, 0x84, 0x10, 0x12, 0x42, 0xe2, 0x96, 0x5b, 0x24, 0xee, 0xb8, 0x40, 0xe2,
0x07, 0x70, 0xc1, 0x3d, 0x7f, 0x00, 0xc1, 0x2f, 0x40, 0x3b, 0x33, 0xfb, 0xe1, 0x4d, 0xec, 0x38,
0x4e, 0x52, 0xb9, 0x57, 0xf6, 0xcc, 0xbc, 0x33, 0xf3, 0xcc, 0xf3, 0x3e, 0xf3, 0xbe, 0xf3, 0x6a,
0xa1, 0x32, 0x62, 0x87, 0x06, 0x23, 0x1d, 0xd7, 0x73, 0x98, 0x83, 0xf2, 0xa2, 0xd5, 0x2c, 0x3f,
0xf2, 0x89, 0x37, 0x16, 0x9d, 0xcd, 0x1a, 0x73, 0x5c, 0xa7, 0x6f, 0x30, 0x43, 0xb6, 0xcb, 0x23,
0xe6, 0xb9, 0x3d, 0xd1, 0xd0, 0x7e, 0x53, 0xa0, 0xb0, 0x47, 0x28, 0x35, 0x1d, 0x1b, 0x6d, 0x40,
0xcd, 0xb4, 0x75, 0xe6, 0x19, 0x36, 0x35, 0x7a, 0xcc, 0x74, 0xec, 0x86, 0xd2, 0x52, 0xda, 0x45,
0x5c, 0x35, 0xed, 0xfd, 0xb8, 0x13, 0x75, 0xa1, 0x46, 0x1f, 0x1a, 0x5e, 0x5f, 0xa7, 0x62, 0x1e,
0x6d, 0xa8, 0xad, 0x4c, 0xbb, 0xbc, 0x75, 0xad, 0x23, 0xb1, 0xc8, 0xf5, 0x3a, 0x7b, 0x81, 0x95,
0x6c, 0xe0, 0x2a, 0x4d, 0xb4, 0x68, 0xf3, 0x63, 0xa8, 0x24, 0x87, 0xd1, 0x06, 0xe4, 0x99, 0xe1,
0x1d, 0x12, 0xc6, 0xf7, 0x2c, 0x6f, 0x55, 0x3b, 0xe2, 0x08, 0xfb, 0xbc, 0x13, 0xcb, 0xc1, 0x00,
0x62, 0x02, 0x9f, 0x6e, 0xf6, 0x1b, 0x6a, 0x4b, 0x69, 0x67, 0x70, 0x35, 0xd1, 0xbb, 0xdb, 0xd7,
0x7e, 0x51, 0xa1, 0xb6, 0xf3, 0x19, 0xe9, 0xf9, 0x8c, 0x60, 0xf2, 0xc8, 0x27, 0x94, 0xa1, 0x4d,
0x28, 0xf5, 0x8c, 0xe1, 0x90, 0x78, 0xc1, 0x24, 0xb1, 0xc7, 0x4a, 0x47, 0x30, 0xd1, 0xe5, 0xfd,
0xbb, 0x6f, 0xe1, 0xa2, 0xb0, 0xd8, 0xed, 0xa3, 0x5b, 0x50, 0x90, 0xa7, 0xe3, 0x1b, 0x08, 0xdb,
0xe4, 0xe1, 0x70, 0x38, 0x8e, 0x6e, 0x42, 0x8e, 0x43, 0x6d, 0x64, 0xb8, 0xe1, 0x25, 0x09, 0x7c,
0xdb, 0xf1, 0xed, 0xfe, 0xfb, 0xc1, 0x5f, 0x2c, 0xc6, 0xd1, 0x8b, 0x50, 0x66, 0xc6, 0xc1, 0x90,
0x30, 0x9d, 0x8d, 0x5d, 0xd2, 0xc8, 0xb6, 0x94, 0x76, 0x6d, 0xab, 0xde, 0x89, 0xbc, 0xb3, 0xcf,
0x07, 0xf7, 0xc7, 0x2e, 0xc1, 0xc0, 0xa2, 0xff, 0x68, 0x13, 0x90, 0xed, 0x30, 0x3d, 0xe5, 0x99,
0x1c, 0xf7, 0xcc, 0xaa, 0xed, 0xb0, 0xdd, 0x09, 0xe7, 0x34, 0xa1, 0x38, 0x20, 0x63, 0xea, 0x1a,
0x3d, 0xd2, 0xc8, 0xb7, 0x94, 0x76, 0x09, 0x47, 0x6d, 0x74, 0x1b, 0x0a, 0x8e, 0xcb, 0xb8, 0xc7,
0x0a, 0x1c, 0xeb, 0x9a, 0xc4, 0x2a, 0xa9, 0x7a, 0x4f, 0x0c, 0xe2, 0xd0, 0x4a, 0x7b, 0xaa, 0xc0,
0x4a, 0x44, 0x23, 0x75, 0x1d, 0x9b, 0x12, 0xb4, 0x01, 0x39, 0xe2, 0x79, 0x8e, 0x97, 0xe2, 0x10,
0x3f, 0xe8, 0xee, 0x04, 0xdd, 0x58, 0x8c, 0x9e, 0x86, 0xc0, 0xff, 0x41, 0xde, 0x23, 0xd4, 0x1f,
0x32, 0xc9, 0x20, 0x92, 0xa8, 0x04, 0x79, 0x7c, 0x04, 0x4b, 0x0b, 0xed, 0x0f, 0x15, 0xea, 0x12,
0x11, 0x97, 0x0f, 0x5d, 0x1e, 0xf7, 0x26, 0x99, 0xcf, 0xa6, 0x98, 0xbf, 0x02, 0x79, 0x2e, 0x7f,
0xda, 0xc8, 0xb5, 0x32, 0xed, 0x12, 0x96, 0xad, 0xb4, 0x24, 0xf2, 0x67, 0x92, 0x44, 0x61, 0x8a,
0x24, 0x12, 0x6e, 0x2f, 0xce, 0xe5, 0xf6, 0x2f, 0x15, 0x58, 0x4b, 0x91, 0xbc, 0x14, 0xce, 0xff,
0x5b, 0x85, 0x7f, 0x49, 0x5c, 0xf7, 0x24, 0xb3, 0xbb, 0xcf, 0x8b, 0x02, 0x6e, 0x40, 0x25, 0xfc,
0xaf, 0x9b, 0x52, 0x07, 0x15, 0x5c, 0x1e, 0xc4, 0xe7, 0x58, 0x52, 0x31, 0x7c, 0xad, 0x40, 0xf3,
0x38, 0xd2, 0x97, 0x42, 0x11, 0x4f, 0x32, 0x70, 0x35, 0x06, 0x87, 0x0d, 0xfb, 0x90, 0x3c, 0x27,
0x7a, 0xb8, 0x03, 0x30, 0x20, 0x63, 0xdd, 0xe3, 0x90, 0xb9, 0x1a, 0x82, 0x93, 0x46, 0xbe, 0x0e,
0x4f, 0x83, 0x4b, 0x83, 0xf0, 0x5c, 0x4b, 0xaa, 0x8f, 0xaf, 0x14, 0x68, 0x1c, 0x75, 0xc1, 0x52,
0xa8, 0xe3, 0xa7, 0x6c, 0xa4, 0x8e, 0x1d, 0x9b, 0x99, 0x6c, 0xfc, 0xdc, 0x44, 0x8b, 0x4d, 0x40,
0x84, 0x23, 0xd6, 0x7b, 0xce, 0xd0, 0xb7, 0x6c, 0xdd, 0x36, 0x2c, 0xc2, 0x73, 0x7e, 0x09, 0xaf,
0x8a, 0x91, 0x2e, 0x1f, 0xb8, 0x6f, 0x58, 0x04, 0x7d, 0x04, 0x97, 0xa5, 0xf5, 0x44, 0x88, 0xc9,
0x73, 0x51, 0xb5, 0x43, 0xa4, 0x53, 0x98, 0xe8, 0x84, 0x1d, 0xf8, 0x92, 0x58, 0xe4, 0xde, 0xf4,
0x90, 0x54, 0x38, 0x93, 0xe4, 0x8a, 0x27, 0x4b, 0xae, 0x34, 0x8f, 0xe4, 0x9a, 0x07, 0x50, 0x0c,
0x41, 0xa3, 0x75, 0xc8, 0x72, 0x68, 0x0a, 0x87, 0x56, 0x0e, 0x5f, 0x8d, 0x01, 0x22, 0x3e, 0x80,
0xea, 0x90, 0x1b, 0x19, 0x43, 0x9f, 0x70, 0xc7, 0x55, 0xb0, 0x68, 0xa0, 0x75, 0x28, 0x27, 0xb8,
0xe2, 0xbe, 0xaa, 0x60, 0x88, 0xa3, 0x71, 0x52, 0xd6, 0x09, 0xc6, 0x96, 0x42, 0xd6, 0x36, 0xac,
0x70, 0x35, 0xf1, 0xdc, 0xcc, 0x0d, 0x62, 0xd1, 0x29, 0xa7, 0x10, 0x9d, 0x3a, 0xf5, 0x91, 0x92,
0x49, 0x3e, 0x52, 0xb4, 0x1f, 0xe3, 0xb4, 0xbb, 0x6d, 0xb0, 0xde, 0xc3, 0x67, 0xf4, 0xf0, 0xba,
0x03, 0x85, 0x00, 0xb3, 0x49, 0x04, 0x9e, 0xf2, 0xd6, 0xd5, 0xd0, 0x34, 0x75, 0x7a, 0x1c, 0xda,
0x2d, 0xfa, 0xc2, 0xde, 0x80, 0x9a, 0x41, 0x8f, 0x79, 0x5d, 0x57, 0x0d, 0x3a, 0x45, 0xa7, 0xf9,
0xb9, 0x42, 0xe3, 0x37, 0x71, 0xea, 0x9c, 0x20, 0xee, 0xc2, 0x54, 0xb4, 0x09, 0x05, 0xa1, 0x91,
0x90, 0xb2, 0xe3, 0x64, 0x14, 0x9a, 0x68, 0x5f, 0x40, 0x9d, 0x33, 0x19, 0x5f, 0xf8, 0x73, 0x14,
0x53, 0xfa, 0xbd, 0x93, 0x39, 0xf2, 0xde, 0xd1, 0x7e, 0x56, 0xe1, 0x7a, 0x92, 0x9e, 0x67, 0xf9,
0xa6, 0x7b, 0x29, 0x2d, 0xae, 0x6b, 0x13, 0xe2, 0x4a, 0x51, 0xb2, 0xb4, 0x0a, 0xfb, 0x4e, 0x81,
0xf5, 0xa9, 0x14, 0x2e, 0x89, 0xcc, 0xfe, 0x52, 0xa0, 0xbe, 0xc7, 0x3c, 0x62, 0x58, 0x67, 0xaa,
0xc8, 0x23, 0x55, 0xaa, 0xa7, 0x2b, 0xb3, 0x33, 0x73, 0xba, 0x68, 0x56, 0x3a, 0x4e, 0xf8, 0x25,
0x37, 0x97, 0x5f, 0xba, 0xb0, 0x96, 0x3a, 0xb2, 0x74, 0x46, 0x1c, 0xe7, 0x95, 0x13, 0xe3, 0xfc,
0x53, 0x15, 0x9a, 0x13, 0xab, 0x9c, 0x25, 0xf0, 0xce, 0x4d, 0x5f, 0x92, 0x87, 0xcc, 0xd4, 0x0c,
0x91, 0x9d, 0x55, 0xc6, 0xe6, 0xe6, 0xa4, 0xfc, 0xd4, 0x72, 0xdf, 0x85, 0x7f, 0x1f, 0x4b, 0xc8,
0x02, 0xe4, 0x7e, 0xab, 0xc2, 0xfa, 0xc4, 0x5a, 0x67, 0x8e, 0x3e, 0xe7, 0xc2, 0x70, 0x3a, 0x6c,
0x66, 0x4f, 0x2c, 0x13, 0x2f, 0x8c, 0xec, 0xfb, 0xd0, 0x9a, 0x4e, 0xd0, 0x02, 0x8c, 0xff, 0xa0,
0xc2, 0x7f, 0xd2, 0x0b, 0x9e, 0xa5, 0x62, 0x3b, 0x17, 0xbe, 0x27, 0xcb, 0xb0, 0xec, 0x02, 0x65,
0xd8, 0x85, 0xf1, 0xff, 0x0e, 0x5c, 0x9f, 0x46, 0xd7, 0x02, 0xec, 0xbf, 0x06, 0x95, 0x6d, 0x72,
0x68, 0xda, 0x0b, 0x71, 0xad, 0xbd, 0x0a, 0x55, 0x39, 0x5b, 0x6e, 0x9d, 0xc8, 0x16, 0xca, 0xec,
0x6c, 0xa1, 0x3d, 0x51, 0xa0, 0xda, 0x75, 0x2c, 0xcb, 0x64, 0x17, 0x9e, 0xd5, 0xaf, 0x40, 0xde,
0x60, 0x8e, 0x65, 0xf6, 0xb8, 0x9f, 0x8b, 0x58, 0xb6, 0xb4, 0x55, 0xa8, 0x85, 0x08, 0x04, 0x7e,
0xed, 0x53, 0x58, 0xc1, 0xce, 0x70, 0x78, 0x60, 0xf4, 0x06, 0x17, 0x8d, 0x4a, 0x43, 0xb0, 0x1a,
0xef, 0x25, 0xf7, 0xff, 0x53, 0x85, 0x4b, 0x7b, 0xee, 0xd0, 0x64, 0xd2, 0x57, 0x8b, 0x40, 0x98,
0xf5, 0xfc, 0x9a, 0xbb, 0x0a, 0xbd, 0x01, 0x15, 0x1a, 0xe0, 0x90, 0x85, 0xa6, 0x0c, 0xec, 0x65,
0xde, 0x27, 0x4a, 0xcc, 0xa0, 0x56, 0x0a, 0x4d, 0x7c, 0x9b, 0x71, 0xc1, 0x67, 0x30, 0x48, 0x0b,
0xdf, 0x66, 0xe8, 0x05, 0xb8, 0x6a, 0xfb, 0x96, 0xee, 0x39, 0x8f, 0xa9, 0xee, 0x12, 0x4f, 0xe7,
0x2b, 0xeb, 0xae, 0xe1, 0x31, 0x2e, 0xf5, 0x0c, 0xbe, 0x6c, 0xfb, 0x16, 0x76, 0x1e, 0xd3, 0x07,
0xc4, 0xe3, 0x9b, 0x3f, 0x30, 0x3c, 0x86, 0xde, 0x80, 0x92, 0x31, 0x3c, 0x74, 0x3c, 0x93, 0x3d,
0xb4, 0x64, 0x65, 0xa9, 0x49, 0x98, 0x47, 0x98, 0xe9, 0xbc, 0x19, 0x5a, 0xe2, 0x78, 0x12, 0xfa,
0x3f, 0x20, 0x9f, 0x12, 0x5d, 0x80, 0x13, 0x9b, 0x8e, 0xb6, 0x64, 0x99, 0xb9, 0xe2, 0x53, 0x12,
0x2f, 0xf3, 0xe1, 0x96, 0xf6, 0x6b, 0x06, 0x50, 0x72, 0x5d, 0x29, 0xe4, 0x97, 0x21, 0xcf, 0xe7,
0xd3, 0x86, 0xc2, 0x2f, 0xff, 0x7a, 0xe4, 0xc6, 0x23, 0xb6, 0x9d, 0x00, 0x36, 0x96, 0xe6, 0xcd,
0x4f, 0xa0, 0x12, 0xde, 0x48, 0x7e, 0x9c, 0xa4, 0x37, 0x94, 0x99, 0x51, 0x46, 0x9d, 0x23, 0xca,
0x34, 0x5f, 0x87, 0x12, 0xcf, 0x6e, 0x27, 0xae, 0x1d, 0xe7, 0x64, 0x35, 0x99, 0x93, 0x9b, 0xbf,
0x2b, 0x90, 0xe5, 0x93, 0xe7, 0x7e, 0xce, 0xbf, 0x0b, 0xb5, 0x08, 0xa5, 0xf0, 0x9e, 0x50, 0xf6,
0xcd, 0x19, 0x94, 0x24, 0x29, 0xc0, 0x95, 0x41, 0x92, 0x90, 0x2e, 0x80, 0xf8, 0x4c, 0xc4, 0x97,
0x12, 0x3a, 0xfc, 0xef, 0x8c, 0xa5, 0xa2, 0xe3, 0xe2, 0x12, 0x8d, 0x4e, 0x8e, 0x20, 0x4b, 0xcd,
0xcf, 0xc5, 0x8b, 0x2c, 0x83, 0xf9, 0x7f, 0xed, 0x2e, 0xac, 0xbd, 0x4d, 0xd8, 0x9e, 0x37, 0x0a,
0x33, 0x52, 0x78, 0x7d, 0x66, 0xd0, 0xa4, 0x61, 0xb8, 0x92, 0x9e, 0x24, 0x15, 0xf0, 0x0a, 0x54,
0xa8, 0x37, 0xd2, 0x27, 0x66, 0x06, 0xd1, 0x39, 0x72, 0x4f, 0x72, 0x52, 0x99, 0xc6, 0x0d, 0xed,
0x7b, 0x15, 0x2e, 0x7f, 0xe0, 0xf6, 0x0d, 0x46, 0x44, 0xa0, 0x3e, 0xff, 0x6b, 0x5c, 0x87, 0x1c,
0xe7, 0x42, 0xe6, 0x2d, 0xd1, 0x40, 0xb7, 0xa1, 0x14, 0x39, 0x8a, 0x33, 0x73, 0xbc, 0x9a, 0x8a,
0xa1, 0x3b, 0x16, 0x4d, 0x59, 0xd7, 0xa0, 0xc4, 0x4c, 0x8b, 0x50, 0x66, 0x58, 0xae, 0xbc, 0xc9,
0x71, 0x47, 0xa0, 0x2b, 0x32, 0x22, 0x36, 0x93, 0xdf, 0x92, 0x42, 0x5d, 0xed, 0x04, 0x7d, 0xfb,
0xce, 0x80, 0xd8, 0x58, 0x8c, 0x6b, 0x03, 0xa8, 0x4f, 0xb2, 0x24, 0x89, 0x6f, 0x87, 0x0b, 0x4c,
0x66, 0x2f, 0x99, 0xf4, 0x82, 0x11, 0xb9, 0x02, 0xba, 0x05, 0xab, 0x41, 0x1a, 0xb3, 0x88, 0x1e,
0xe3, 0x11, 0xdf, 0xfd, 0x56, 0x44, 0xff, 0x7e, 0xd8, 0xbd, 0xdd, 0x84, 0x46, 0xcf, 0xb1, 0x3a,
0x63, 0xc7, 0x67, 0xfe, 0x01, 0xe9, 0x8c, 0x4c, 0x46, 0x28, 0x15, 0xdf, 0x3a, 0x0f, 0xf2, 0xfc,
0xe7, 0xee, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x69, 0x2d, 0x39, 0x0c, 0x34, 0x1d, 0x00, 0x00,
// 1518 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xd4, 0x59, 0x5d, 0x6f, 0x1b, 0x45,
0x17, 0xd6, 0xae, 0xbf, 0x8f, 0x3f, 0x92, 0x4e, 0x9d, 0xd6, 0xf5, 0x9b, 0xb7, 0x71, 0x57, 0x44,
0x75, 0x21, 0x72, 0xd5, 0x94, 0x2f, 0x21, 0x24, 0x20, 0x26, 0x42, 0x51, 0xa1, 0x94, 0x49, 0x40,
0x5c, 0x50, 0xad, 0x36, 0xf6, 0x28, 0x5d, 0xec, 0xdd, 0x75, 0x77, 0x66, 0x5d, 0xcc, 0x05, 0xea,
0x3f, 0xe8, 0x15, 0x12, 0x42, 0x48, 0x08, 0x89, 0x5b, 0x6e, 0x91, 0xb8, 0xe3, 0x02, 0x89, 0x1f,
0xc0, 0x05, 0xf7, 0xfc, 0x01, 0x04, 0xbf, 0x00, 0xed, 0xcc, 0xec, 0x87, 0x37, 0xb1, 0xe3, 0x38,
0x49, 0xe5, 0x5c, 0x65, 0x67, 0xe6, 0xcc, 0xcc, 0x33, 0xcf, 0x79, 0xe6, 0x9c, 0x39, 0x31, 0x94,
0x86, 0xec, 0xc0, 0x60, 0xa4, 0x35, 0x70, 0x1d, 0xe6, 0xa0, 0xac, 0x68, 0xd5, 0x8b, 0x8f, 0x3d,
0xe2, 0x8e, 0x44, 0x67, 0xbd, 0xc2, 0x9c, 0x81, 0xd3, 0x35, 0x98, 0x21, 0xdb, 0xc5, 0x21, 0x73,
0x07, 0x1d, 0xd1, 0xd0, 0xfe, 0x50, 0x20, 0xb7, 0x4b, 0x28, 0x35, 0x1d, 0x1b, 0xad, 0x43, 0xc5,
0xb4, 0x75, 0xe6, 0x1a, 0x36, 0x35, 0x3a, 0xcc, 0x74, 0xec, 0x9a, 0xd2, 0x50, 0x9a, 0x79, 0x5c,
0x36, 0xed, 0xbd, 0xa8, 0x13, 0xb5, 0xa1, 0x42, 0x1f, 0x19, 0x6e, 0x57, 0xa7, 0x62, 0x1e, 0xad,
0xa9, 0x8d, 0x54, 0xb3, 0xb8, 0xb9, 0xda, 0x92, 0x58, 0xe4, 0x7a, 0xad, 0x5d, 0xdf, 0x4a, 0x36,
0x70, 0x99, 0xc6, 0x5a, 0xb4, 0xfe, 0x19, 0x94, 0xe2, 0xc3, 0x68, 0x1d, 0xb2, 0xcc, 0x70, 0x0f,
0x08, 0xe3, 0x7b, 0x16, 0x37, 0xcb, 0x2d, 0x71, 0x84, 0x3d, 0xde, 0x89, 0xe5, 0xa0, 0x0f, 0x31,
0x86, 0x4f, 0x37, 0xbb, 0x35, 0xb5, 0xa1, 0x34, 0x53, 0xb8, 0x1c, 0xeb, 0xdd, 0xe9, 0x6a, 0xbf,
0xa9, 0x50, 0xd9, 0xfe, 0x82, 0x74, 0x3c, 0x46, 0x30, 0x79, 0xec, 0x11, 0xca, 0xd0, 0x06, 0x14,
0x3a, 0x46, 0xbf, 0x4f, 0x5c, 0x7f, 0x92, 0xd8, 0x63, 0xa9, 0x25, 0x98, 0x68, 0xf3, 0xfe, 0x9d,
0x77, 0x71, 0x5e, 0x58, 0xec, 0x74, 0xd1, 0x2d, 0xc8, 0xc9, 0xd3, 0xf1, 0x0d, 0x84, 0x6d, 0xfc,
0x70, 0x38, 0x18, 0x47, 0x37, 0x21, 0xc3, 0xa1, 0xd6, 0x52, 0xdc, 0xf0, 0x92, 0x04, 0xbe, 0xe5,
0x78, 0x76, 0xf7, 0x23, 0xff, 0x13, 0x8b, 0x71, 0xf4, 0x0a, 0x14, 0x99, 0xb1, 0xdf, 0x27, 0x4c,
0x67, 0xa3, 0x01, 0xa9, 0xa5, 0x1b, 0x4a, 0xb3, 0xb2, 0x59, 0x6d, 0x85, 0xde, 0xd9, 0xe3, 0x83,
0x7b, 0xa3, 0x01, 0xc1, 0xc0, 0xc2, 0x6f, 0xb4, 0x01, 0xc8, 0x76, 0x98, 0x9e, 0xf0, 0x4c, 0x86,
0x7b, 0x66, 0xd9, 0x76, 0xd8, 0xce, 0x98, 0x73, 0xea, 0x90, 0xef, 0x91, 0x11, 0x1d, 0x18, 0x1d,
0x52, 0xcb, 0x36, 0x94, 0x66, 0x01, 0x87, 0x6d, 0x74, 0x1b, 0x72, 0xce, 0x80, 0x71, 0x8f, 0xe5,
0x38, 0xd6, 0x15, 0x89, 0x55, 0x52, 0xf5, 0xa1, 0x18, 0xc4, 0x81, 0x95, 0xf6, 0x4c, 0x81, 0xa5,
0x90, 0x46, 0x3a, 0x70, 0x6c, 0x4a, 0xd0, 0x3a, 0x64, 0x88, 0xeb, 0x3a, 0x6e, 0x82, 0x43, 0xfc,
0xa0, 0xbd, 0xed, 0x77, 0x63, 0x31, 0x7a, 0x12, 0x02, 0x5f, 0x84, 0xac, 0x4b, 0xa8, 0xd7, 0x67,
0x92, 0x41, 0x24, 0x51, 0x09, 0xf2, 0xf8, 0x08, 0x96, 0x16, 0xda, 0x5f, 0x2a, 0x54, 0x25, 0x22,
0x2e, 0x1f, 0xba, 0x38, 0xee, 0x8d, 0x33, 0x9f, 0x4e, 0x30, 0x7f, 0x05, 0xb2, 0x5c, 0xfe, 0xb4,
0x96, 0x69, 0xa4, 0x9a, 0x05, 0x2c, 0x5b, 0x49, 0x49, 0x64, 0x4f, 0x25, 0x89, 0xdc, 0x04, 0x49,
0xc4, 0xdc, 0x9e, 0x9f, 0xc9, 0xed, 0x5f, 0x2b, 0xb0, 0x92, 0x20, 0x79, 0x21, 0x9c, 0xff, 0xaf,
0x0a, 0xd7, 0x24, 0xae, 0x7b, 0x92, 0xd9, 0x9d, 0x8b, 0xa2, 0x80, 0x1b, 0x50, 0x0a, 0xbe, 0x75,
0x53, 0xea, 0xa0, 0x84, 0x8b, 0xbd, 0xe8, 0x1c, 0x0b, 0x2a, 0x86, 0x6f, 0x15, 0xa8, 0x1f, 0x45,
0xfa, 0x42, 0x28, 0xe2, 0x69, 0x0a, 0xae, 0x46, 0xe0, 0xb0, 0x61, 0x1f, 0x90, 0x0b, 0xa2, 0x87,
0x3b, 0x00, 0x3d, 0x32, 0xd2, 0x5d, 0x0e, 0x99, 0xab, 0xc1, 0x3f, 0x69, 0xe8, 0xeb, 0xe0, 0x34,
0xb8, 0xd0, 0x0b, 0xce, 0xb5, 0xa0, 0xfa, 0xf8, 0x46, 0x81, 0xda, 0x61, 0x17, 0x2c, 0x84, 0x3a,
0x7e, 0x49, 0x87, 0xea, 0xd8, 0xb6, 0x99, 0xc9, 0x46, 0x17, 0x26, 0x5a, 0x6c, 0x00, 0x22, 0x1c,
0xb1, 0xde, 0x71, 0xfa, 0x9e, 0x65, 0xeb, 0xb6, 0x61, 0x11, 0x9e, 0xf3, 0x0b, 0x78, 0x59, 0x8c,
0xb4, 0xf9, 0xc0, 0x7d, 0xc3, 0x22, 0xe8, 0x53, 0xb8, 0x2c, 0xad, 0xc7, 0x42, 0x4c, 0x96, 0x8b,
0xaa, 0x19, 0x20, 0x9d, 0xc0, 0x44, 0x2b, 0xe8, 0xc0, 0x97, 0xc4, 0x22, 0xf7, 0x26, 0x87, 0xa4,
0xdc, 0xa9, 0x24, 0x97, 0x3f, 0x5e, 0x72, 0x85, 0x59, 0x24, 0x57, 0xdf, 0x87, 0x7c, 0x00, 0x1a,
0xad, 0x41, 0x9a, 0x43, 0x53, 0x38, 0xb4, 0x62, 0xf0, 0x6a, 0xf4, 0x11, 0xf1, 0x01, 0x54, 0x85,
0xcc, 0xd0, 0xe8, 0x7b, 0x84, 0x3b, 0xae, 0x84, 0x45, 0x03, 0xad, 0x41, 0x31, 0xc6, 0x15, 0xf7,
0x55, 0x09, 0x43, 0x14, 0x8d, 0xe3, 0xb2, 0x8e, 0x31, 0xb6, 0x10, 0xb2, 0xb6, 0x61, 0x89, 0xab,
0x89, 0xe7, 0x66, 0x6e, 0x10, 0x89, 0x4e, 0x39, 0x81, 0xe8, 0xd4, 0x89, 0x8f, 0x94, 0x54, 0xfc,
0x91, 0xa2, 0xfd, 0x1c, 0xa5, 0xdd, 0x2d, 0x83, 0x75, 0x1e, 0x3d, 0xa7, 0x87, 0xd7, 0x1d, 0xc8,
0xf9, 0x98, 0x4d, 0x22, 0xf0, 0x14, 0x37, 0xaf, 0x06, 0xa6, 0x89, 0xd3, 0xe3, 0xc0, 0x6e, 0xde,
0x17, 0xf6, 0x3a, 0x54, 0x0c, 0x7a, 0xc4, 0xeb, 0xba, 0x6c, 0xd0, 0x09, 0x3a, 0xcd, 0xce, 0x14,
0x1a, 0xbf, 0x8b, 0x52, 0xe7, 0x18, 0x71, 0xe7, 0xa6, 0xa2, 0x0d, 0xc8, 0x09, 0x8d, 0x04, 0x94,
0x1d, 0x25, 0xa3, 0xc0, 0x44, 0xfb, 0x0a, 0xaa, 0x9c, 0xc9, 0xe8, 0xc2, 0x9f, 0xa1, 0x98, 0x92,
0xef, 0x9d, 0xd4, 0xa1, 0xf7, 0x8e, 0xf6, 0xab, 0x0a, 0xd7, 0xe3, 0xf4, 0x3c, 0xcf, 0x37, 0xdd,
0xab, 0x49, 0x71, 0xad, 0x8e, 0x89, 0x2b, 0x41, 0xc9, 0xc2, 0x2a, 0xec, 0x07, 0x05, 0xd6, 0x26,
0x52, 0xb8, 0x20, 0x32, 0xfb, 0x47, 0x81, 0xea, 0x2e, 0x73, 0x89, 0x61, 0x9d, 0xaa, 0x22, 0x0f,
0x55, 0xa9, 0x9e, 0xac, 0xcc, 0x4e, 0xcd, 0xe8, 0xa2, 0x69, 0xe9, 0x38, 0xe6, 0x97, 0xcc, 0x4c,
0x7e, 0x69, 0xc3, 0x4a, 0xe2, 0xc8, 0xd2, 0x19, 0x51, 0x9c, 0x57, 0x8e, 0x8d, 0xf3, 0xcf, 0x54,
0xa8, 0x8f, 0xad, 0x72, 0x9a, 0xc0, 0x3b, 0x33, 0x7d, 0x71, 0x1e, 0x52, 0x13, 0x33, 0x44, 0x7a,
0x5a, 0x19, 0x9b, 0x99, 0x91, 0xf2, 0x13, 0xcb, 0x7d, 0x07, 0xfe, 0x77, 0x24, 0x21, 0x73, 0x90,
0xfb, 0xbd, 0x0a, 0x6b, 0x63, 0x6b, 0x9d, 0x3a, 0xfa, 0x9c, 0x09, 0xc3, 0xc9, 0xb0, 0x99, 0x3e,
0xb6, 0x4c, 0x3c, 0x37, 0xb2, 0xef, 0x43, 0x63, 0x32, 0x41, 0x73, 0x30, 0xfe, 0x93, 0x0a, 0xff,
0x4f, 0x2e, 0x78, 0x9a, 0x8a, 0xed, 0x4c, 0xf8, 0x1e, 0x2f, 0xc3, 0xd2, 0x73, 0x94, 0x61, 0xe7,
0xc6, 0xff, 0xfb, 0x70, 0x7d, 0x12, 0x5d, 0x73, 0xb0, 0xff, 0x26, 0x94, 0xb6, 0xc8, 0x81, 0x69,
0xcf, 0xc5, 0xb5, 0xf6, 0x06, 0x94, 0xe5, 0x6c, 0xb9, 0x75, 0x2c, 0x5b, 0x28, 0xd3, 0xb3, 0x85,
0xf6, 0x54, 0x81, 0x72, 0xdb, 0xb1, 0x2c, 0x93, 0x9d, 0x7b, 0x56, 0xbf, 0x02, 0x59, 0x83, 0x39,
0x96, 0xd9, 0xe1, 0x7e, 0xce, 0x63, 0xd9, 0xd2, 0x96, 0xa1, 0x12, 0x20, 0x10, 0xf8, 0xb5, 0xcf,
0x61, 0x09, 0x3b, 0xfd, 0xfe, 0xbe, 0xd1, 0xe9, 0x9d, 0x37, 0x2a, 0x0d, 0xc1, 0x72, 0xb4, 0x97,
0xdc, 0xff, 0x21, 0x5c, 0xc3, 0x84, 0x3a, 0xfd, 0x21, 0x89, 0xe5, 0xff, 0xf9, 0x90, 0x20, 0x48,
0x77, 0x99, 0xfc, 0x47, 0x78, 0x01, 0xf3, 0x6f, 0x6d, 0x15, 0xea, 0x47, 0x2d, 0x2f, 0x37, 0xff,
0x5b, 0x85, 0x4b, 0xbb, 0x83, 0xbe, 0xc9, 0xa4, 0x50, 0xe6, 0xd9, 0x75, 0xda, 0xdb, 0x6f, 0xe6,
0x12, 0xf8, 0x06, 0x94, 0xa8, 0x8f, 0x43, 0x56, 0xb9, 0x32, 0xab, 0x14, 0x79, 0x9f, 0xa8, 0x6f,
0xfd, 0x42, 0x2d, 0x30, 0xf1, 0x6c, 0xc6, 0x6f, 0x5b, 0x0a, 0x83, 0xb4, 0xf0, 0x6c, 0x86, 0x5e,
0x86, 0xab, 0xb6, 0x67, 0xe9, 0xae, 0xf3, 0x84, 0xea, 0x03, 0xe2, 0xea, 0x7c, 0x65, 0x7d, 0x60,
0xb8, 0x8c, 0xdf, 0xb3, 0x14, 0xbe, 0x6c, 0x7b, 0x16, 0x76, 0x9e, 0xd0, 0x07, 0xc4, 0xe5, 0x9b,
0x3f, 0x30, 0x5c, 0x86, 0xde, 0x86, 0x82, 0xd1, 0x3f, 0x70, 0x5c, 0x93, 0x3d, 0xb2, 0x64, 0x59,
0xab, 0x49, 0x98, 0x87, 0x98, 0x69, 0xbd, 0x13, 0x58, 0xe2, 0x68, 0x12, 0x7a, 0x09, 0x90, 0x47,
0x89, 0x2e, 0xc0, 0x89, 0x4d, 0x87, 0x9b, 0xb2, 0xc6, 0x5d, 0xf2, 0x28, 0x89, 0x96, 0xf9, 0x64,
0x53, 0xfb, 0x3d, 0x05, 0x28, 0xbe, 0xae, 0xbc, 0x45, 0xaf, 0x41, 0x96, 0xcf, 0xa7, 0x35, 0x85,
0x47, 0x9e, 0xb5, 0x50, 0x43, 0x87, 0x6c, 0x5b, 0x3e, 0x6c, 0x2c, 0xcd, 0xeb, 0x0f, 0xa1, 0x14,
0x84, 0x03, 0x7e, 0x9c, 0xb8, 0x37, 0x94, 0xa9, 0x21, 0x4e, 0x9d, 0x21, 0xc4, 0xd5, 0xdf, 0x82,
0x02, 0x4f, 0xad, 0xc7, 0xae, 0x1d, 0x3d, 0x08, 0xd4, 0xf8, 0x83, 0xa0, 0xfe, 0xa7, 0x02, 0x69,
0x3e, 0x79, 0xe6, 0x5a, 0xe2, 0x03, 0xa8, 0x84, 0x28, 0x85, 0xf7, 0xc4, 0xb5, 0xba, 0x39, 0x85,
0x92, 0x38, 0x05, 0xb8, 0xd4, 0x8b, 0x13, 0xd2, 0x06, 0x10, 0xbf, 0x51, 0xf1, 0xa5, 0x84, 0x0e,
0x5f, 0x98, 0xb2, 0x54, 0x78, 0x5c, 0x5c, 0xa0, 0xe1, 0xc9, 0x11, 0xa4, 0xa9, 0xf9, 0xa5, 0x78,
0x0e, 0xa6, 0x30, 0xff, 0xd6, 0xee, 0xc2, 0xca, 0x7b, 0x84, 0xed, 0xba, 0xc3, 0x20, 0x1d, 0x06,
0xd7, 0x67, 0x0a, 0x4d, 0x1a, 0x86, 0x2b, 0xc9, 0x49, 0x52, 0x01, 0xaf, 0x43, 0x89, 0xba, 0x43,
0x7d, 0x6c, 0xa6, 0x9f, 0x1a, 0x42, 0xf7, 0xc4, 0x27, 0x15, 0x69, 0xd4, 0xd0, 0x7e, 0x54, 0xe1,
0xf2, 0xc7, 0x83, 0xae, 0xc1, 0x88, 0xc8, 0x12, 0x67, 0x7f, 0x8d, 0xab, 0x90, 0xe1, 0x5c, 0xc8,
0xa4, 0x29, 0x1a, 0xe8, 0x36, 0x14, 0x42, 0x47, 0x71, 0x66, 0x8e, 0x56, 0x53, 0x3e, 0x70, 0xc7,
0xbc, 0xf9, 0x72, 0x15, 0x0a, 0xcc, 0xb4, 0x08, 0x65, 0x86, 0x35, 0x90, 0x37, 0x39, 0xea, 0xf0,
0x75, 0x45, 0x86, 0xc4, 0x66, 0xf2, 0x87, 0xac, 0x40, 0x57, 0xdb, 0x7e, 0xdf, 0x9e, 0xd3, 0x23,
0x36, 0x16, 0xe3, 0x5a, 0x0f, 0xaa, 0xe3, 0x2c, 0x49, 0xe2, 0x9b, 0xc1, 0x02, 0xe3, 0xa9, 0x53,
0x66, 0x5c, 0x7f, 0x44, 0xae, 0x80, 0x6e, 0xc1, 0xb2, 0x9f, 0x43, 0x2d, 0xa2, 0x47, 0x78, 0xc4,
0x8f, 0x8e, 0x4b, 0xa2, 0x7f, 0x2f, 0xe8, 0xde, 0xaa, 0x43, 0xad, 0xe3, 0x58, 0xad, 0x91, 0xe3,
0x31, 0x6f, 0x9f, 0xb4, 0x86, 0x26, 0x23, 0x94, 0x8a, 0x1f, 0x5a, 0xf7, 0xb3, 0xfc, 0xcf, 0xdd,
0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x36, 0x13, 0x91, 0xa1, 0xb1, 0x1d, 0x00, 0x00,
}

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

@ -94,6 +94,9 @@ type VitessClient interface {
// Rollback a transaction.
// API group: Transactions
Rollback(ctx context.Context, in *vtgate.RollbackRequest, opts ...grpc.CallOption) (*vtgate.RollbackResponse, error)
// ResolveTransaction resolves a transaction.
// API group: Transactions
ResolveTransaction(ctx context.Context, in *vtgate.ResolveTransactionRequest, opts ...grpc.CallOption) (*vtgate.ResolveTransactionResponse, error)
// Split a query into non-overlapping sub queries
// API group: Map Reduce
SplitQuery(ctx context.Context, in *vtgate.SplitQueryRequest, opts ...grpc.CallOption) (*vtgate.SplitQueryResponse, error)
@ -337,6 +340,15 @@ func (c *vitessClient) Rollback(ctx context.Context, in *vtgate.RollbackRequest,
return out, nil
}
func (c *vitessClient) ResolveTransaction(ctx context.Context, in *vtgate.ResolveTransactionRequest, opts ...grpc.CallOption) (*vtgate.ResolveTransactionResponse, error) {
out := new(vtgate.ResolveTransactionResponse)
err := grpc.Invoke(ctx, "/vtgateservice.Vitess/ResolveTransaction", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *vitessClient) SplitQuery(ctx context.Context, in *vtgate.SplitQueryRequest, opts ...grpc.CallOption) (*vtgate.SplitQueryResponse, error) {
out := new(vtgate.SplitQueryResponse)
err := grpc.Invoke(ctx, "/vtgateservice.Vitess/SplitQuery", in, out, c.cc, opts...)
@ -440,6 +452,9 @@ type VitessServer interface {
// Rollback a transaction.
// API group: Transactions
Rollback(context.Context, *vtgate.RollbackRequest) (*vtgate.RollbackResponse, error)
// ResolveTransaction resolves a transaction.
// API group: Transactions
ResolveTransaction(context.Context, *vtgate.ResolveTransactionRequest) (*vtgate.ResolveTransactionResponse, error)
// Split a query into non-overlapping sub queries
// API group: Map Reduce
SplitQuery(context.Context, *vtgate.SplitQueryRequest) (*vtgate.SplitQueryResponse, error)
@ -725,6 +740,24 @@ func _Vitess_Rollback_Handler(srv interface{}, ctx context.Context, dec func(int
return interceptor(ctx, in, info, handler)
}
func _Vitess_ResolveTransaction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(vtgate.ResolveTransactionRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(VitessServer).ResolveTransaction(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/vtgateservice.Vitess/ResolveTransaction",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(VitessServer).ResolveTransaction(ctx, req.(*vtgate.ResolveTransactionRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Vitess_SplitQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(vtgate.SplitQueryRequest)
if err := dec(in); err != nil {
@ -826,6 +859,10 @@ var _Vitess_serviceDesc = grpc.ServiceDesc{
MethodName: "Rollback",
Handler: _Vitess_Rollback_Handler,
},
{
MethodName: "ResolveTransaction",
Handler: _Vitess_ResolveTransaction_Handler,
},
{
MethodName: "SplitQuery",
Handler: _Vitess_SplitQuery_Handler,
@ -868,35 +905,36 @@ var _Vitess_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("vtgateservice.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 465 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x94, 0x5f, 0x8b, 0xd3, 0x40,
0x14, 0xc5, 0xf5, 0xc1, 0x2a, 0xd7, 0xad, 0xc8, 0xac, 0x76, 0xd7, 0xba, 0xeb, 0x6a, 0xc5, 0x5d,
0x9f, 0x82, 0x28, 0x08, 0x82, 0x20, 0x54, 0x8a, 0x88, 0x28, 0x6e, 0x83, 0xfa, 0xe4, 0xc3, 0x24,
0xbd, 0x64, 0xc3, 0xe6, 0x5f, 0x33, 0x93, 0x60, 0x3e, 0x91, 0x5f, 0x53, 0x6c, 0x32, 0xb7, 0x33,
0x93, 0x49, 0xfb, 0xb6, 0x39, 0xe7, 0xdc, 0xdf, 0x6c, 0xcf, 0x5c, 0x06, 0x0e, 0x6b, 0x19, 0x71,
0x89, 0x02, 0xcb, 0x3a, 0x0e, 0xd1, 0x2b, 0xca, 0x5c, 0xe6, 0x6c, 0x6c, 0x88, 0xd3, 0x83, 0xf6,
0xb3, 0x35, 0x5f, 0xff, 0xbd, 0x0b, 0xa3, 0x9f, 0xb1, 0x44, 0x21, 0xd8, 0x7b, 0xb8, 0xbd, 0xf8,
0x83, 0x61, 0x25, 0x91, 0x4d, 0xbc, 0x2e, 0xd4, 0x09, 0x4b, 0x5c, 0x57, 0x28, 0xe4, 0xf4, 0xa8,
0xa7, 0x8b, 0x22, 0xcf, 0x04, 0xce, 0x6e, 0xb0, 0x6f, 0x30, 0xee, 0x44, 0xff, 0x8a, 0x97, 0x2b,
0xc1, 0x4e, 0xac, 0x6c, 0x2b, 0x2b, 0xd2, 0xe9, 0x80, 0x4b, 0xbc, 0xdf, 0xc0, 0x3a, 0xeb, 0x0b,
0x36, 0xa2, 0xe0, 0x21, 0x7e, 0x5e, 0x09, 0xf6, 0xcc, 0x1a, 0xd3, 0x3c, 0x45, 0x9e, 0xed, 0x8a,
0x10, 0xfe, 0x17, 0xdc, 0xdf, 0xfa, 0x4b, 0x9e, 0x45, 0x28, 0xd8, 0x59, 0x7f, 0xb2, 0x75, 0x14,
0xfa, 0xe9, 0x70, 0xc0, 0x01, 0x5e, 0x64, 0x32, 0x96, 0xcd, 0xff, 0xff, 0xda, 0x06, 0x93, 0x33,
0x04, 0xd6, 0x02, 0x8e, 0x42, 0xe6, 0x5c, 0x86, 0x57, 0x5d, 0xcb, 0x76, 0x21, 0x9a, 0x37, 0x54,
0x88, 0x11, 0x21, 0x7c, 0x02, 0x47, 0xba, 0xaf, 0x97, 0x7e, 0xee, 0x02, 0x38, 0x9a, 0xbf, 0xd8,
0x9b, 0xa3, 0xd3, 0xbe, 0xc3, 0xd8, 0x97, 0x25, 0xf2, 0x54, 0x6d, 0x1c, 0x6d, 0x8b, 0x21, 0xf7,
0xb6, 0xc5, 0x72, 0x15, 0xef, 0xd5, 0x4d, 0x16, 0xc0, 0xa1, 0x61, 0x76, 0xfd, 0xcc, 0x9c, 0x93,
0x66, 0x41, 0xcf, 0x77, 0x66, 0xb4, 0x33, 0xd6, 0x70, 0x6c, 0x44, 0xf4, 0x92, 0x2e, 0x9c, 0x10,
0x47, 0x4b, 0x2f, 0xf7, 0x07, 0xb5, 0x23, 0xaf, 0x61, 0x62, 0xe7, 0xba, 0x6d, 0x7d, 0x31, 0xc4,
0x31, 0x77, 0xf6, 0x7c, 0x5f, 0x4c, 0x3b, 0xec, 0x2d, 0xdc, 0x9a, 0x63, 0x14, 0x67, 0xec, 0x81,
0x1a, 0xda, 0x7c, 0x2a, 0xd4, 0x43, 0x4b, 0xa5, 0xdb, 0x7c, 0x07, 0xa3, 0x8f, 0x79, 0x9a, 0xc6,
0x92, 0x51, 0xa4, 0xfd, 0x56, 0x93, 0x13, 0x5b, 0xa6, 0xd1, 0x0f, 0x70, 0x67, 0x99, 0x27, 0x49,
0xc0, 0xc3, 0x6b, 0x46, 0xaf, 0x8b, 0x52, 0xd4, 0xf8, 0x71, 0xdf, 0x20, 0xc0, 0x02, 0xc0, 0x2f,
0x92, 0x58, 0x5e, 0x56, 0x58, 0x36, 0xec, 0x11, 0xfd, 0x5a, 0xd2, 0x14, 0x64, 0xea, 0xb2, 0x08,
0x73, 0x09, 0xf7, 0x3e, 0xa1, 0xf4, 0xcb, 0x5a, 0x5d, 0x04, 0xa3, 0x9d, 0x33, 0x75, 0x85, 0x7b,
0x32, 0x64, 0x13, 0xf2, 0x2b, 0x1c, 0xfc, 0x28, 0x56, 0x5c, 0x62, 0xdb, 0x3c, 0x7b, 0xac, 0x26,
0x74, 0x55, 0xe1, 0x4e, 0xdc, 0xe6, 0xf6, 0x72, 0xe6, 0x67, 0x70, 0x1a, 0xe6, 0xa9, 0xd7, 0xe4,
0x95, 0xac, 0x02, 0xf4, 0xea, 0xcd, 0xa3, 0xdd, 0xbe, 0xe2, 0x5e, 0x54, 0x16, 0x61, 0x30, 0xda,
0xfc, 0xfd, 0xe6, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x83, 0x0a, 0x30, 0xea, 0x05, 0x06, 0x00,
0x00,
// 490 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x95, 0x5f, 0x8b, 0xd3, 0x40,
0x14, 0xc5, 0xf5, 0xc1, 0x2a, 0x97, 0x56, 0x64, 0x56, 0xbb, 0x6b, 0xdd, 0x75, 0xb5, 0xe2, 0xae,
0x4f, 0x41, 0x14, 0x04, 0x41, 0x10, 0x2a, 0x45, 0x44, 0x14, 0xb7, 0xf5, 0xcf, 0x93, 0x0f, 0xd3,
0xf4, 0xd2, 0x0d, 0x9b, 0x66, 0xb2, 0x99, 0x9b, 0x60, 0xbe, 0x80, 0x9f, 0x5b, 0x6c, 0x32, 0xb7,
0x93, 0xc9, 0xa4, 0x7d, 0xdb, 0x9c, 0x73, 0xee, 0x6f, 0x96, 0x33, 0x37, 0x0d, 0x1c, 0x14, 0xb4,
0x92, 0x84, 0x1a, 0xb3, 0x22, 0x0a, 0x31, 0x48, 0x33, 0x45, 0x4a, 0x0c, 0x1a, 0xe2, 0xa8, 0x5f,
0x3d, 0x56, 0xe6, 0xab, 0xbf, 0x7d, 0xe8, 0xfd, 0x8c, 0x08, 0xb5, 0x16, 0xef, 0xe0, 0xf6, 0xf4,
0x0f, 0x86, 0x39, 0xa1, 0x18, 0x06, 0x75, 0xa8, 0x16, 0x66, 0x78, 0x9d, 0xa3, 0xa6, 0xd1, 0x61,
0x4b, 0xd7, 0xa9, 0x4a, 0x34, 0x8e, 0x6f, 0x88, 0xaf, 0x30, 0xa8, 0xc5, 0xf9, 0xa5, 0xcc, 0x96,
0x5a, 0x1c, 0x3b, 0xd9, 0x4a, 0x36, 0xa4, 0x93, 0x0e, 0x97, 0x79, 0xbf, 0x41, 0xd4, 0xd6, 0x67,
0x2c, 0x75, 0x2a, 0x43, 0xfc, 0xb4, 0xd4, 0xe2, 0xa9, 0x33, 0x66, 0x79, 0x86, 0x3c, 0xde, 0x15,
0x61, 0xfc, 0x2f, 0xb8, 0xb7, 0xf5, 0x67, 0x32, 0x59, 0xa1, 0x16, 0xa7, 0xed, 0xc9, 0xca, 0x31,
0xe8, 0x27, 0xdd, 0x01, 0x0f, 0x78, 0x9a, 0x50, 0x44, 0xe5, 0xff, 0xff, 0xda, 0x05, 0xb3, 0xd3,
0x05, 0xb6, 0x02, 0x9e, 0x42, 0x26, 0x92, 0xc2, 0xcb, 0xba, 0x65, 0xb7, 0x10, 0xcb, 0xeb, 0x2a,
0xa4, 0x11, 0x61, 0x7c, 0x0c, 0x87, 0xb6, 0x6f, 0x97, 0x7e, 0xe6, 0x03, 0x78, 0x9a, 0x3f, 0xdf,
0x9b, 0xe3, 0xd3, 0xbe, 0xc1, 0x60, 0x4e, 0x19, 0xca, 0xb5, 0xd9, 0x38, 0xde, 0x96, 0x86, 0xdc,
0xda, 0x16, 0xc7, 0x35, 0xbc, 0x97, 0x37, 0xc5, 0x02, 0x0e, 0x1a, 0x66, 0xdd, 0xcf, 0xd8, 0x3b,
0xd9, 0x2c, 0xe8, 0xd9, 0xce, 0x8c, 0x75, 0xc6, 0x35, 0x1c, 0x35, 0x22, 0x76, 0x49, 0xe7, 0x5e,
0x88, 0xa7, 0xa5, 0x17, 0xfb, 0x83, 0xd6, 0x91, 0x57, 0x30, 0x74, 0x73, 0xf5, 0xb6, 0x3e, 0xef,
0xe2, 0x34, 0x77, 0xf6, 0x6c, 0x5f, 0xcc, 0x3a, 0xec, 0x0d, 0xdc, 0x9a, 0xe0, 0x2a, 0x4a, 0xc4,
0x7d, 0x33, 0xb4, 0x79, 0x34, 0xa8, 0x07, 0x8e, 0xca, 0xb7, 0xf9, 0x16, 0x7a, 0x1f, 0xd4, 0x7a,
0x1d, 0x91, 0xe0, 0x48, 0xf5, 0x6c, 0x26, 0x87, 0xae, 0xcc, 0xa3, 0xef, 0xe1, 0xce, 0x4c, 0xc5,
0xf1, 0x42, 0x86, 0x57, 0x82, 0x7f, 0x5d, 0x8c, 0x62, 0xc6, 0x8f, 0xda, 0x86, 0xfd, 0x5a, 0xcc,
0x50, 0xab, 0xb8, 0xc0, 0xef, 0x99, 0x4c, 0xb4, 0x0c, 0x29, 0x52, 0xc9, 0xf6, 0xb5, 0x68, 0x7b,
0xad, 0xd7, 0xc2, 0x17, 0x61, 0xfc, 0x14, 0x60, 0x9e, 0xc6, 0x11, 0x5d, 0xe4, 0x98, 0x95, 0xe2,
0x21, 0x97, 0xc9, 0x9a, 0xc1, 0x8d, 0x7c, 0x16, 0x63, 0x2e, 0xe0, 0xee, 0x47, 0xa4, 0x79, 0x56,
0x98, 0x7b, 0x16, 0xbc, 0xd2, 0x4d, 0xdd, 0xe0, 0x1e, 0x77, 0xd9, 0x8c, 0xfc, 0x02, 0xfd, 0x1f,
0xe9, 0x52, 0x12, 0x56, 0x17, 0x2b, 0x1e, 0x99, 0x09, 0x5b, 0x35, 0xb8, 0x63, 0xbf, 0xb9, 0xbd,
0xfb, 0xc9, 0x29, 0x9c, 0x84, 0x6a, 0x1d, 0x94, 0x2a, 0xa7, 0x7c, 0x81, 0x41, 0xb1, 0xf9, 0x26,
0x54, 0x1f, 0x89, 0x60, 0x95, 0xa5, 0xe1, 0xa2, 0xb7, 0xf9, 0xfb, 0xf5, 0xbf, 0x00, 0x00, 0x00,
0xff, 0xff, 0x69, 0x3f, 0xb5, 0xcf, 0x64, 0x06, 0x00, 0x00,
}

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

@ -151,6 +151,14 @@ func (f *fakeVTGateService) Rollback(ctx context.Context, session *vtgatepb.Sess
return nil
}
// ResolveTransaction is part of the VTGateService interface
func (f *fakeVTGateService) ResolveTransaction(ctx context.Context, dtid string) error {
if dtid != dtid2 {
return errors.New("ResolveTransaction: dtid mismatch")
}
return nil
}
// SplitQuery is part of the VTGateService interface
func (f *fakeVTGateService) SplitQuery(
ctx context.Context,
@ -287,3 +295,5 @@ var session2 = &vtgatepb.Session{
},
},
}
var dtid2 = "aa"

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

@ -334,6 +334,11 @@ func (conn *FakeVTGateConn) Rollback(ctx context.Context, session interface{}) e
return nil
}
// ResolveTransaction please see vtgateconn.Impl.ResolveTransaction
func (conn *FakeVTGateConn) ResolveTransaction(ctx context.Context, dtid string) error {
return nil
}
// SplitQuery please see vtgateconn.Impl.SplitQuery
func (conn *FakeVTGateConn) SplitQuery(
ctx context.Context,

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

@ -403,6 +403,15 @@ func (conn *vtgateConn) Rollback(ctx context.Context, session interface{}) error
return vterrors.FromGRPCError(err)
}
func (conn *vtgateConn) ResolveTransaction(ctx context.Context, dtid string) error {
request := &vtgatepb.ResolveTransactionRequest{
CallerId: callerid.EffectiveCallerIDFromContext(ctx),
Dtid: dtid,
}
_, err := conn.c.ResolveTransaction(ctx, request)
return vterrors.FromGRPCError(err)
}
func (conn *vtgateConn) SplitQuery(
ctx context.Context,
keyspace string,

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

@ -361,6 +361,18 @@ func (vtg *VTGate) Rollback(ctx context.Context, request *vtgatepb.RollbackReque
return nil, vterrors.ToGRPCError(vtgErr)
}
// ResolveTransaction is the RPC version of vtgateservice.VTGateService method
func (vtg *VTGate) ResolveTransaction(ctx context.Context, request *vtgatepb.ResolveTransactionRequest) (response *vtgatepb.ResolveTransactionResponse, err error) {
defer vtg.server.HandlePanic(&err)
ctx = withCallerIDContext(ctx, request.CallerId)
vtgErr := vtg.server.ResolveTransaction(ctx, request.Dtid)
response = &vtgatepb.ResolveTransactionResponse{}
if vtgErr == nil {
return response, nil
}
return nil, vterrors.ToGRPCError(vtgErr)
}
// SplitQuery is the RPC version of vtgateservice.VTGateService method
func (vtg *VTGate) SplitQuery(ctx context.Context, request *vtgatepb.SplitQueryRequest) (response *vtgatepb.SplitQueryResponse, err error) {

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

@ -91,7 +91,7 @@ func (txc *TxConn) commit2PC(ctx context.Context, session *SafeSession) error {
if err != nil {
// TODO(sougou): Perform a more fine-grained cleanup
// including unprepared transactions.
if resumeErr := txc.Resume(ctx, dtid); resumeErr != nil {
if resumeErr := txc.Resolve(ctx, dtid); resumeErr != nil {
log.Warningf("Rollback failed after Prepare failure: %v", resumeErr)
}
// Return the original error even if the previous operation fails.
@ -135,8 +135,8 @@ func (txc *TxConn) RollbackIfNeeded(ctx context.Context, err error, session *Saf
}
}
// Resume resumes the specified 2PC transaction.
func (txc *TxConn) Resume(ctx context.Context, dtid string) error {
// Resolve resolves the specified 2PC transaction.
func (txc *TxConn) Resolve(ctx context.Context, dtid string) error {
mmShard, err := txc.dtidToShardSession(dtid)
if err != nil {
return err

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

@ -318,7 +318,7 @@ func TestTxConnRollback(t *testing.T) {
}
}
func TestTxConnResumeOnPrepare(t *testing.T) {
func TestTxConnResolveOnPrepare(t *testing.T) {
sc, sbc0, sbc1 := newTestTxConnEnv("TestTxConn")
dtid := "TestTxConn:0:0:1234"
@ -331,7 +331,7 @@ func TestTxConnResumeOnPrepare(t *testing.T) {
TabletType: topodatapb.TabletType_MASTER,
}},
}}
err := sc.txConn.Resume(context.Background(), dtid)
err := sc.txConn.Resolve(context.Background(), dtid)
if err != nil {
t.Error(err)
}
@ -349,7 +349,7 @@ func TestTxConnResumeOnPrepare(t *testing.T) {
}
}
func TestTxConnResumeOnRollback(t *testing.T) {
func TestTxConnResolveOnRollback(t *testing.T) {
sc, sbc0, sbc1 := newTestTxConnEnv("TestTxConn")
dtid := "TestTxConn:0:0:1234"
@ -362,7 +362,7 @@ func TestTxConnResumeOnRollback(t *testing.T) {
TabletType: topodatapb.TabletType_MASTER,
}},
}}
if err := sc.txConn.Resume(context.Background(), dtid); err != nil {
if err := sc.txConn.Resolve(context.Background(), dtid); err != nil {
t.Error(err)
}
if c := sbc0.SetRollbackCount.Get(); c != 0 {
@ -379,7 +379,7 @@ func TestTxConnResumeOnRollback(t *testing.T) {
}
}
func TestTxConnResumeOnCommit(t *testing.T) {
func TestTxConnResolveOnCommit(t *testing.T) {
sc, sbc0, sbc1 := newTestTxConnEnv("TestTxConn")
dtid := "TestTxConn:0:0:1234"
@ -392,7 +392,7 @@ func TestTxConnResumeOnCommit(t *testing.T) {
TabletType: topodatapb.TabletType_MASTER,
}},
}}
if err := sc.txConn.Resume(context.Background(), dtid); err != nil {
if err := sc.txConn.Resolve(context.Background(), dtid); err != nil {
t.Error(err)
}
if c := sbc0.SetRollbackCount.Get(); c != 0 {
@ -409,29 +409,29 @@ func TestTxConnResumeOnCommit(t *testing.T) {
}
}
func TestTxConnResumeInvalidDTID(t *testing.T) {
func TestTxConnResolveInvalidDTID(t *testing.T) {
sc, _, _ := newTestTxConnEnv("TestTxConn")
err := sc.txConn.Resume(context.Background(), "abcd")
err := sc.txConn.Resolve(context.Background(), "abcd")
want := "invalid parts in dtid: abcd"
if err == nil || err.Error() != want {
t.Errorf("Resume: %v, want %s", err, want)
t.Errorf("Resolve: %v, want %s", err, want)
}
}
func TestTxConnResumeReadTransactionFail(t *testing.T) {
func TestTxConnResolveReadTransactionFail(t *testing.T) {
sc, sbc0, _ := newTestTxConnEnv("TestTxConn")
dtid := "TestTxConn:0:0:1234"
sbc0.MustFailServer = 1
err := sc.txConn.Resume(context.Background(), dtid)
err := sc.txConn.Resolve(context.Background(), dtid)
want := "error: err"
if err == nil || !strings.Contains(err.Error(), want) {
t.Errorf("Resume: %v, want %s", err, want)
t.Errorf("Resolve: %v, want %s", err, want)
}
}
func TestTxConnResumeInternalError(t *testing.T) {
func TestTxConnResolveInternalError(t *testing.T) {
sc, sbc0, _ := newTestTxConnEnv("TestTxConn")
dtid := "TestTxConn:0:0:1234"
@ -444,14 +444,14 @@ func TestTxConnResumeInternalError(t *testing.T) {
TabletType: topodatapb.TabletType_MASTER,
}},
}}
err := sc.txConn.Resume(context.Background(), dtid)
err := sc.txConn.Resolve(context.Background(), dtid)
want := "invalid state: UNKNOWN"
if err == nil || !strings.Contains(err.Error(), want) {
t.Errorf("Resume: %v, want %s", err, want)
t.Errorf("Resolve: %v, want %s", err, want)
}
}
func TestTxConnResumeSetRollbackFail(t *testing.T) {
func TestTxConnResolveSetRollbackFail(t *testing.T) {
sc, sbc0, sbc1 := newTestTxConnEnv("TestTxConn")
dtid := "TestTxConn:0:0:1234"
@ -465,10 +465,10 @@ func TestTxConnResumeSetRollbackFail(t *testing.T) {
}},
}}
sbc0.MustFailSetRollback = 1
err := sc.txConn.Resume(context.Background(), dtid)
err := sc.txConn.Resolve(context.Background(), dtid)
want := "error: err"
if err == nil || !strings.Contains(err.Error(), want) {
t.Errorf("Resume: %v, want %s", err, want)
t.Errorf("Resolve: %v, want %s", err, want)
}
if c := sbc0.SetRollbackCount.Get(); c != 1 {
t.Errorf("sbc0.SetRollbackCount: %d, want 1", c)
@ -484,7 +484,7 @@ func TestTxConnResumeSetRollbackFail(t *testing.T) {
}
}
func TestTxConnResumeRollbackPreparedFail(t *testing.T) {
func TestTxConnResolveRollbackPreparedFail(t *testing.T) {
sc, sbc0, sbc1 := newTestTxConnEnv("TestTxConn")
dtid := "TestTxConn:0:0:1234"
@ -498,10 +498,10 @@ func TestTxConnResumeRollbackPreparedFail(t *testing.T) {
}},
}}
sbc1.MustFailRollbackPrepared = 1
err := sc.txConn.Resume(context.Background(), dtid)
err := sc.txConn.Resolve(context.Background(), dtid)
want := "error: err"
if err == nil || !strings.Contains(err.Error(), want) {
t.Errorf("Resume: %v, want %s", err, want)
t.Errorf("Resolve: %v, want %s", err, want)
}
if c := sbc0.SetRollbackCount.Get(); c != 0 {
t.Errorf("sbc0.SetRollbackCount: %d, want 0", c)
@ -517,7 +517,7 @@ func TestTxConnResumeRollbackPreparedFail(t *testing.T) {
}
}
func TestTxConnResumeCommitPreparedFail(t *testing.T) {
func TestTxConnResolveCommitPreparedFail(t *testing.T) {
sc, sbc0, sbc1 := newTestTxConnEnv("TestTxConn")
dtid := "TestTxConn:0:0:1234"
@ -531,10 +531,10 @@ func TestTxConnResumeCommitPreparedFail(t *testing.T) {
}},
}}
sbc1.MustFailCommitPrepared = 1
err := sc.txConn.Resume(context.Background(), dtid)
err := sc.txConn.Resolve(context.Background(), dtid)
want := "error: err"
if err == nil || !strings.Contains(err.Error(), want) {
t.Errorf("Resume: %v, want %s", err, want)
t.Errorf("Resolve: %v, want %s", err, want)
}
if c := sbc0.SetRollbackCount.Get(); c != 0 {
t.Errorf("sbc0.SetRollbackCount: %d, want 0", c)
@ -550,7 +550,7 @@ func TestTxConnResumeCommitPreparedFail(t *testing.T) {
}
}
func TestTxConnResumeConcludeTransactionFail(t *testing.T) {
func TestTxConnResolveConcludeTransactionFail(t *testing.T) {
sc, sbc0, sbc1 := newTestTxConnEnv("TestTxConn")
dtid := "TestTxConn:0:0:1234"
@ -564,10 +564,10 @@ func TestTxConnResumeConcludeTransactionFail(t *testing.T) {
}},
}}
sbc0.MustFailConcludeTransaction = 1
err := sc.txConn.Resume(context.Background(), dtid)
err := sc.txConn.Resolve(context.Background(), dtid)
want := "error: err"
if err == nil || !strings.Contains(err.Error(), want) {
t.Errorf("Resume: %v, want %s", err, want)
t.Errorf("Resolve: %v, want %s", err, want)
}
if c := sbc0.SetRollbackCount.Get(); c != 0 {
t.Errorf("sbc0.SetRollbackCount: %d, want 0", c)

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

@ -583,6 +583,11 @@ func (vtg *VTGate) Rollback(ctx context.Context, session *vtgatepb.Session) erro
return formatError(vtg.txConn.Rollback(ctx, NewSafeSession(session)))
}
// ResolveTransaction resolves the specified 2PC transaction.
func (vtg *VTGate) ResolveTransaction(ctx context.Context, dtid string) error {
return formatError(vtg.txConn.Resolve(ctx, dtid))
}
// isKeyspaceRangeBasedSharded returns true if a keyspace is sharded
// by range. This is true when there is a ShardingColumnType defined
// in the SrvKeyspace (that is using the range-based sharding with the

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

@ -111,6 +111,11 @@ func (conn *VTGateConn) StreamExecuteKeyspaceIds(ctx context.Context, query stri
return conn.impl.StreamExecuteKeyspaceIds(ctx, query, keyspace, keyspaceIds, bindVars, tabletType, options)
}
// ResolveTransaction resolves the 2pc transaction.
func (conn *VTGateConn) ResolveTransaction(ctx context.Context, dtid string) error {
return conn.impl.ResolveTransaction(ctx, dtid)
}
// Begin starts a transaction and returns a VTGateTX.
func (conn *VTGateConn) Begin(ctx context.Context) (*VTGateTx, error) {
session, err := conn.impl.Begin(ctx)
@ -311,6 +316,8 @@ type Impl interface {
Commit(ctx context.Context, session interface{}) error
// Rollback rolls back the current transaction.
Rollback(ctx context.Context, session interface{}) error
// ResolveTransaction resolves the specified 2pc transaction.
ResolveTransaction(ctx context.Context, dtid string) error
// SplitQuery splits a query into smaller queries. It is mostly used by batch job frameworks
// such as MapReduce. See the documentation for the vtgate.SplitQueryRequest protocol buffer

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

@ -628,6 +628,21 @@ func (f *fakeVTGateService) Rollback(ctx context.Context, inSession *vtgatepb.Se
return nil
}
// ResolveTransaction is part of the VTGateService interface
func (f *fakeVTGateService) ResolveTransaction(ctx context.Context, dtid string) error {
if f.hasError {
return errTestVtGateError
}
if f.panics {
panic(fmt.Errorf("test forced panic"))
}
f.checkCallerID(ctx, "ResolveTransaction")
if dtid != dtid2 {
return errors.New("ResolveTransaction: dtid mismatch")
}
return nil
}
// querySplitQuery contains all the fields we use to test SplitQuery
type querySplitQuery struct {
Keyspace string
@ -802,6 +817,7 @@ func TestSuite(t *testing.T, impl vtgateconn.Impl, fakeServer vtgateservice.VTGa
testStreamExecuteKeyRanges(t, conn)
testStreamExecuteKeyspaceIds(t, conn)
testTxPass(t, conn)
testResolveTransaction(t, conn)
testTxFail(t, conn)
testSplitQuery(t, conn)
testGetSrvKeyspace(t, conn)
@ -812,6 +828,7 @@ func TestSuite(t *testing.T, impl vtgateconn.Impl, fakeServer vtgateservice.VTGa
testBeginPanic(t, conn)
testCommitPanic(t, conn, fs)
testRollbackPanic(t, conn, fs)
testResolveTransactionPanic(t, conn, fs)
testExecutePanic(t, conn)
testExecuteShardsPanic(t, conn)
testExecuteKeyspaceIdsPanic(t, conn)
@ -843,6 +860,7 @@ func TestErrorSuite(t *testing.T, fakeServer vtgateservice.VTGateService) {
testBeginError(t, conn)
testCommitError(t, conn, fs)
testRollbackError(t, conn, fs)
testResolveTransactionError(t, conn, fs)
testExecuteError(t, conn, fs)
testExecuteShardsError(t, conn, fs)
testExecuteKeyspaceIdsError(t, conn, fs)
@ -1559,6 +1577,12 @@ func testTxPass(t *testing.T, conn *vtgateconn.VTGateConn) {
}
}
func testResolveTransaction(t *testing.T, conn *vtgateconn.VTGateConn) {
if err := conn.ResolveTransaction(newContext(), dtid2); err != nil {
t.Error(err)
}
}
func testBeginError(t *testing.T, conn *vtgateconn.VTGateConn) {
ctx := newContext()
_, err := conn.Begin(ctx)
@ -1593,6 +1617,11 @@ func testRollbackError(t *testing.T, conn *vtgateconn.VTGateConn, fake *fakeVTGa
verifyError(t, err, "Rollback")
}
func testResolveTransactionError(t *testing.T, conn *vtgateconn.VTGateConn, fake *fakeVTGateService) {
err := conn.ResolveTransaction(newContext(), "")
verifyError(t, err, "ResolveTransaction")
}
func testBeginPanic(t *testing.T, conn *vtgateconn.VTGateConn) {
ctx := newContext()
_, err := conn.Begin(ctx)
@ -1627,6 +1656,11 @@ func testRollbackPanic(t *testing.T, conn *vtgateconn.VTGateConn, fake *fakeVTGa
expectPanic(t, err)
}
func testResolveTransactionPanic(t *testing.T, conn *vtgateconn.VTGateConn, fake *fakeVTGateService) {
err := conn.ResolveTransaction(newContext(), "")
expectPanic(t, err)
}
func testTxFail(t *testing.T, conn *vtgateconn.VTGateConn) {
ctx := newContext()
tx, err := conn.Begin(ctx)
@ -2322,6 +2356,8 @@ var session2 = &vtgatepb.Session{
},
}
var dtid2 = "aa"
var splitQueryRequest = &querySplitQuery{
Keyspace: "ks2",
SQL: "in for SplitQuery",

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

@ -41,6 +41,7 @@ type VTGateService interface {
Begin(ctx context.Context) (*vtgatepb.Session, error)
Commit(ctx context.Context, twopc bool, session *vtgatepb.Session) error
Rollback(ctx context.Context, session *vtgatepb.Session) error
ResolveTransaction(ctx context.Context, dtid string) error
// Map Reduce support

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

@ -522,6 +522,20 @@ message RollbackRequest {
message RollbackResponse {
}
// ResolveTransactionRequest is the payload to ResolveTransaction.
message ResolveTransactionRequest {
// caller_id identifies the caller. This is the effective caller ID,
// set by the application to further identify the caller.
vtrpc.CallerID caller_id = 1;
// dtid is the dtid of the transaction to be resolved.
string dtid = 2;
}
// ResolveTransactionResponse is the returned value from Rollback.
message ResolveTransactionResponse {
}
// SplitQueryRequest is the payload to SplitQuery.
//
// SplitQuery takes a "SELECT" query and generates a list of queries called

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

@ -76,6 +76,10 @@ service Vitess {
// API group: Transactions
rpc Rollback(vtgate.RollbackRequest) returns (vtgate.RollbackResponse) {};
// ResolveTransaction resolves a transaction.
// API group: Transactions
rpc ResolveTransaction(vtgate.ResolveTransactionRequest) returns (vtgate.ResolveTransactionResponse) {};
// Split a query into non-overlapping sub queries
// API group: Map Reduce
rpc SplitQuery(vtgate.SplitQueryRequest) returns (vtgate.SplitQueryResponse) {};

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

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

@ -20,7 +20,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
name='vtgateservice.proto',
package='vtgateservice',
syntax='proto3',
serialized_pb=_b('\n\x13vtgateservice.proto\x12\rvtgateservice\x1a\x0cvtgate.proto2\xa7\x0b\n\x06Vitess\x12<\n\x07\x45xecute\x12\x16.vtgate.ExecuteRequest\x1a\x17.vtgate.ExecuteResponse\"\x00\x12N\n\rExecuteShards\x12\x1c.vtgate.ExecuteShardsRequest\x1a\x1d.vtgate.ExecuteShardsResponse\"\x00\x12]\n\x12\x45xecuteKeyspaceIds\x12!.vtgate.ExecuteKeyspaceIdsRequest\x1a\".vtgate.ExecuteKeyspaceIdsResponse\"\x00\x12W\n\x10\x45xecuteKeyRanges\x12\x1f.vtgate.ExecuteKeyRangesRequest\x1a .vtgate.ExecuteKeyRangesResponse\"\x00\x12W\n\x10\x45xecuteEntityIds\x12\x1f.vtgate.ExecuteEntityIdsRequest\x1a .vtgate.ExecuteEntityIdsResponse\"\x00\x12]\n\x12\x45xecuteBatchShards\x12!.vtgate.ExecuteBatchShardsRequest\x1a\".vtgate.ExecuteBatchShardsResponse\"\x00\x12l\n\x17\x45xecuteBatchKeyspaceIds\x12&.vtgate.ExecuteBatchKeyspaceIdsRequest\x1a\'.vtgate.ExecuteBatchKeyspaceIdsResponse\"\x00\x12P\n\rStreamExecute\x12\x1c.vtgate.StreamExecuteRequest\x1a\x1d.vtgate.StreamExecuteResponse\"\x00\x30\x01\x12\x62\n\x13StreamExecuteShards\x12\".vtgate.StreamExecuteShardsRequest\x1a#.vtgate.StreamExecuteShardsResponse\"\x00\x30\x01\x12q\n\x18StreamExecuteKeyspaceIds\x12\'.vtgate.StreamExecuteKeyspaceIdsRequest\x1a(.vtgate.StreamExecuteKeyspaceIdsResponse\"\x00\x30\x01\x12k\n\x16StreamExecuteKeyRanges\x12%.vtgate.StreamExecuteKeyRangesRequest\x1a&.vtgate.StreamExecuteKeyRangesResponse\"\x00\x30\x01\x12\x36\n\x05\x42\x65gin\x12\x14.vtgate.BeginRequest\x1a\x15.vtgate.BeginResponse\"\x00\x12\x39\n\x06\x43ommit\x12\x15.vtgate.CommitRequest\x1a\x16.vtgate.CommitResponse\"\x00\x12?\n\x08Rollback\x12\x17.vtgate.RollbackRequest\x1a\x18.vtgate.RollbackResponse\"\x00\x12\x45\n\nSplitQuery\x12\x19.vtgate.SplitQueryRequest\x1a\x1a.vtgate.SplitQueryResponse\"\x00\x12Q\n\x0eGetSrvKeyspace\x12\x1d.vtgate.GetSrvKeyspaceRequest\x1a\x1e.vtgate.GetSrvKeyspaceResponse\"\x00\x12M\n\x0cUpdateStream\x12\x1b.vtgate.UpdateStreamRequest\x1a\x1c.vtgate.UpdateStreamResponse\"\x00\x30\x01\x42\x1f\n\x1d\x63om.youtube.vitess.proto.grpcb\x06proto3')
serialized_pb=_b('\n\x13vtgateservice.proto\x12\rvtgateservice\x1a\x0cvtgate.proto2\x86\x0c\n\x06Vitess\x12<\n\x07\x45xecute\x12\x16.vtgate.ExecuteRequest\x1a\x17.vtgate.ExecuteResponse\"\x00\x12N\n\rExecuteShards\x12\x1c.vtgate.ExecuteShardsRequest\x1a\x1d.vtgate.ExecuteShardsResponse\"\x00\x12]\n\x12\x45xecuteKeyspaceIds\x12!.vtgate.ExecuteKeyspaceIdsRequest\x1a\".vtgate.ExecuteKeyspaceIdsResponse\"\x00\x12W\n\x10\x45xecuteKeyRanges\x12\x1f.vtgate.ExecuteKeyRangesRequest\x1a .vtgate.ExecuteKeyRangesResponse\"\x00\x12W\n\x10\x45xecuteEntityIds\x12\x1f.vtgate.ExecuteEntityIdsRequest\x1a .vtgate.ExecuteEntityIdsResponse\"\x00\x12]\n\x12\x45xecuteBatchShards\x12!.vtgate.ExecuteBatchShardsRequest\x1a\".vtgate.ExecuteBatchShardsResponse\"\x00\x12l\n\x17\x45xecuteBatchKeyspaceIds\x12&.vtgate.ExecuteBatchKeyspaceIdsRequest\x1a\'.vtgate.ExecuteBatchKeyspaceIdsResponse\"\x00\x12P\n\rStreamExecute\x12\x1c.vtgate.StreamExecuteRequest\x1a\x1d.vtgate.StreamExecuteResponse\"\x00\x30\x01\x12\x62\n\x13StreamExecuteShards\x12\".vtgate.StreamExecuteShardsRequest\x1a#.vtgate.StreamExecuteShardsResponse\"\x00\x30\x01\x12q\n\x18StreamExecuteKeyspaceIds\x12\'.vtgate.StreamExecuteKeyspaceIdsRequest\x1a(.vtgate.StreamExecuteKeyspaceIdsResponse\"\x00\x30\x01\x12k\n\x16StreamExecuteKeyRanges\x12%.vtgate.StreamExecuteKeyRangesRequest\x1a&.vtgate.StreamExecuteKeyRangesResponse\"\x00\x30\x01\x12\x36\n\x05\x42\x65gin\x12\x14.vtgate.BeginRequest\x1a\x15.vtgate.BeginResponse\"\x00\x12\x39\n\x06\x43ommit\x12\x15.vtgate.CommitRequest\x1a\x16.vtgate.CommitResponse\"\x00\x12?\n\x08Rollback\x12\x17.vtgate.RollbackRequest\x1a\x18.vtgate.RollbackResponse\"\x00\x12]\n\x12ResolveTransaction\x12!.vtgate.ResolveTransactionRequest\x1a\".vtgate.ResolveTransactionResponse\"\x00\x12\x45\n\nSplitQuery\x12\x19.vtgate.SplitQueryRequest\x1a\x1a.vtgate.SplitQueryResponse\"\x00\x12Q\n\x0eGetSrvKeyspace\x12\x1d.vtgate.GetSrvKeyspaceRequest\x1a\x1e.vtgate.GetSrvKeyspaceResponse\"\x00\x12M\n\x0cUpdateStream\x12\x1b.vtgate.UpdateStreamRequest\x1a\x1c.vtgate.UpdateStreamResponse\"\x00\x30\x01\x42\x1f\n\x1d\x63om.youtube.vitess.proto.grpcb\x06proto3')
,
dependencies=[vtgate__pb2.DESCRIPTOR,])
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
@ -119,6 +119,11 @@ class VitessStub(object):
request_serializer=vtgate__pb2.RollbackRequest.SerializeToString,
response_deserializer=vtgate__pb2.RollbackResponse.FromString,
)
self.ResolveTransaction = channel.unary_unary(
'/vtgateservice.Vitess/ResolveTransaction',
request_serializer=vtgate__pb2.ResolveTransactionRequest.SerializeToString,
response_deserializer=vtgate__pb2.ResolveTransactionResponse.FromString,
)
self.SplitQuery = channel.unary_unary(
'/vtgateservice.Vitess/SplitQuery',
request_serializer=vtgate__pb2.SplitQueryRequest.SerializeToString,
@ -261,6 +266,14 @@ class VitessServicer(object):
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def ResolveTransaction(self, request, context):
"""ResolveTransaction resolves a transaction.
API group: Transactions
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def SplitQuery(self, request, context):
"""Split a query into non-overlapping sub queries
API group: Map Reduce
@ -364,6 +377,11 @@ def add_VitessServicer_to_server(servicer, server):
request_deserializer=vtgate__pb2.RollbackRequest.FromString,
response_serializer=vtgate__pb2.RollbackResponse.SerializeToString,
),
'ResolveTransaction': grpc.unary_unary_rpc_method_handler(
servicer.ResolveTransaction,
request_deserializer=vtgate__pb2.ResolveTransactionRequest.FromString,
response_serializer=vtgate__pb2.ResolveTransactionResponse.SerializeToString,
),
'SplitQuery': grpc.unary_unary_rpc_method_handler(
servicer.SplitQuery,
request_deserializer=vtgate__pb2.SplitQueryRequest.FromString,
@ -467,6 +485,11 @@ class BetaVitessServicer(object):
API group: Transactions
"""
context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
def ResolveTransaction(self, request, context):
"""ResolveTransaction resolves a transaction.
API group: Transactions
"""
context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
def SplitQuery(self, request, context):
"""Split a query into non-overlapping sub queries
API group: Map Reduce
@ -582,6 +605,12 @@ class BetaVitessStub(object):
"""
raise NotImplementedError()
Rollback.future = None
def ResolveTransaction(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
"""ResolveTransaction resolves a transaction.
API group: Transactions
"""
raise NotImplementedError()
ResolveTransaction.future = None
def SplitQuery(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
"""Split a query into non-overlapping sub queries
API group: Map Reduce
@ -619,6 +648,7 @@ def beta_create_Vitess_server(servicer, pool=None, pool_size=None, default_timeo
('vtgateservice.Vitess', 'ExecuteKeyspaceIds'): vtgate__pb2.ExecuteKeyspaceIdsRequest.FromString,
('vtgateservice.Vitess', 'ExecuteShards'): vtgate__pb2.ExecuteShardsRequest.FromString,
('vtgateservice.Vitess', 'GetSrvKeyspace'): vtgate__pb2.GetSrvKeyspaceRequest.FromString,
('vtgateservice.Vitess', 'ResolveTransaction'): vtgate__pb2.ResolveTransactionRequest.FromString,
('vtgateservice.Vitess', 'Rollback'): vtgate__pb2.RollbackRequest.FromString,
('vtgateservice.Vitess', 'SplitQuery'): vtgate__pb2.SplitQueryRequest.FromString,
('vtgateservice.Vitess', 'StreamExecute'): vtgate__pb2.StreamExecuteRequest.FromString,
@ -638,6 +668,7 @@ def beta_create_Vitess_server(servicer, pool=None, pool_size=None, default_timeo
('vtgateservice.Vitess', 'ExecuteKeyspaceIds'): vtgate__pb2.ExecuteKeyspaceIdsResponse.SerializeToString,
('vtgateservice.Vitess', 'ExecuteShards'): vtgate__pb2.ExecuteShardsResponse.SerializeToString,
('vtgateservice.Vitess', 'GetSrvKeyspace'): vtgate__pb2.GetSrvKeyspaceResponse.SerializeToString,
('vtgateservice.Vitess', 'ResolveTransaction'): vtgate__pb2.ResolveTransactionResponse.SerializeToString,
('vtgateservice.Vitess', 'Rollback'): vtgate__pb2.RollbackResponse.SerializeToString,
('vtgateservice.Vitess', 'SplitQuery'): vtgate__pb2.SplitQueryResponse.SerializeToString,
('vtgateservice.Vitess', 'StreamExecute'): vtgate__pb2.StreamExecuteResponse.SerializeToString,
@ -657,6 +688,7 @@ def beta_create_Vitess_server(servicer, pool=None, pool_size=None, default_timeo
('vtgateservice.Vitess', 'ExecuteKeyspaceIds'): face_utilities.unary_unary_inline(servicer.ExecuteKeyspaceIds),
('vtgateservice.Vitess', 'ExecuteShards'): face_utilities.unary_unary_inline(servicer.ExecuteShards),
('vtgateservice.Vitess', 'GetSrvKeyspace'): face_utilities.unary_unary_inline(servicer.GetSrvKeyspace),
('vtgateservice.Vitess', 'ResolveTransaction'): face_utilities.unary_unary_inline(servicer.ResolveTransaction),
('vtgateservice.Vitess', 'Rollback'): face_utilities.unary_unary_inline(servicer.Rollback),
('vtgateservice.Vitess', 'SplitQuery'): face_utilities.unary_unary_inline(servicer.SplitQuery),
('vtgateservice.Vitess', 'StreamExecute'): face_utilities.unary_stream_inline(servicer.StreamExecute),
@ -681,6 +713,7 @@ def beta_create_Vitess_stub(channel, host=None, metadata_transformer=None, pool=
('vtgateservice.Vitess', 'ExecuteKeyspaceIds'): vtgate__pb2.ExecuteKeyspaceIdsRequest.SerializeToString,
('vtgateservice.Vitess', 'ExecuteShards'): vtgate__pb2.ExecuteShardsRequest.SerializeToString,
('vtgateservice.Vitess', 'GetSrvKeyspace'): vtgate__pb2.GetSrvKeyspaceRequest.SerializeToString,
('vtgateservice.Vitess', 'ResolveTransaction'): vtgate__pb2.ResolveTransactionRequest.SerializeToString,
('vtgateservice.Vitess', 'Rollback'): vtgate__pb2.RollbackRequest.SerializeToString,
('vtgateservice.Vitess', 'SplitQuery'): vtgate__pb2.SplitQueryRequest.SerializeToString,
('vtgateservice.Vitess', 'StreamExecute'): vtgate__pb2.StreamExecuteRequest.SerializeToString,
@ -700,6 +733,7 @@ def beta_create_Vitess_stub(channel, host=None, metadata_transformer=None, pool=
('vtgateservice.Vitess', 'ExecuteKeyspaceIds'): vtgate__pb2.ExecuteKeyspaceIdsResponse.FromString,
('vtgateservice.Vitess', 'ExecuteShards'): vtgate__pb2.ExecuteShardsResponse.FromString,
('vtgateservice.Vitess', 'GetSrvKeyspace'): vtgate__pb2.GetSrvKeyspaceResponse.FromString,
('vtgateservice.Vitess', 'ResolveTransaction'): vtgate__pb2.ResolveTransactionResponse.FromString,
('vtgateservice.Vitess', 'Rollback'): vtgate__pb2.RollbackResponse.FromString,
('vtgateservice.Vitess', 'SplitQuery'): vtgate__pb2.SplitQueryResponse.FromString,
('vtgateservice.Vitess', 'StreamExecute'): vtgate__pb2.StreamExecuteResponse.FromString,
@ -719,6 +753,7 @@ def beta_create_Vitess_stub(channel, host=None, metadata_transformer=None, pool=
'ExecuteKeyspaceIds': cardinality.Cardinality.UNARY_UNARY,
'ExecuteShards': cardinality.Cardinality.UNARY_UNARY,
'GetSrvKeyspace': cardinality.Cardinality.UNARY_UNARY,
'ResolveTransaction': cardinality.Cardinality.UNARY_UNARY,
'Rollback': cardinality.Cardinality.UNARY_UNARY,
'SplitQuery': cardinality.Cardinality.UNARY_UNARY,
'StreamExecute': cardinality.Cardinality.UNARY_STREAM,