@@ -462,6 +462,7 @@ type BranchSession struct { | |||
Type BranchSession_BranchType `protobuf:"varint,7,opt,name=Type,proto3,enum=apis.BranchSession_BranchType" json:"Type,omitempty" xorm:"branch_type"` | |||
Status BranchSession_BranchStatus `protobuf:"varint,8,opt,name=Status,proto3,enum=apis.BranchSession_BranchStatus" json:"Status,omitempty" xorm:"status"` | |||
ApplicationData []byte `protobuf:"bytes,9,opt,name=ApplicationData,proto3" json:"ApplicationData,omitempty" xorm:"application_data"` | |||
AsyncCommit bool `protobuf:"varint,10,opt,name=AsyncCommit,proto3" json:"AsyncCommit,omitempty" xorm:"async_commit"` | |||
} | |||
func (m *BranchSession) Reset() { *m = BranchSession{} } | |||
@@ -559,6 +560,13 @@ func (m *BranchSession) GetApplicationData() []byte { | |||
return nil | |||
} | |||
func (m *BranchSession) GetAsyncCommit() bool { | |||
if m != nil { | |||
return m.AsyncCommit | |||
} | |||
return false | |||
} | |||
type RowLock struct { | |||
XID string `protobuf:"bytes,1,opt,name=XID,proto3" json:"XID,omitempty" xorm:"xid"` | |||
TransactionID int64 `protobuf:"varint,2,opt,name=TransactionID,proto3" json:"TransactionID,omitempty" xorm:"transaction_id"` | |||
@@ -786,6 +794,7 @@ type BranchRegisterRequest struct { | |||
LockKey string `protobuf:"bytes,4,opt,name=LockKey,proto3" json:"LockKey,omitempty"` | |||
BranchType BranchSession_BranchType `protobuf:"varint,5,opt,name=BranchType,proto3,enum=apis.BranchSession_BranchType" json:"BranchType,omitempty"` | |||
ApplicationData []byte `protobuf:"bytes,6,opt,name=ApplicationData,proto3" json:"ApplicationData,omitempty"` | |||
AsyncCommit bool `protobuf:"varint,7,opt,name=AsyncCommit,proto3" json:"AsyncCommit,omitempty"` | |||
} | |||
func (m *BranchRegisterRequest) Reset() { *m = BranchRegisterRequest{} } | |||
@@ -862,6 +871,13 @@ func (m *BranchRegisterRequest) GetApplicationData() []byte { | |||
return nil | |||
} | |||
func (m *BranchRegisterRequest) GetAsyncCommit() bool { | |||
if m != nil { | |||
return m.AsyncCommit | |||
} | |||
return false | |||
} | |||
// BranchRegisterResponse represents a response to BranchRegisterRequest | |||
type BranchRegisterResponse struct { | |||
ResultCode ResultCode `protobuf:"varint,1,opt,name=ResultCode,proto3,enum=apis.ResultCode" json:"ResultCode,omitempty"` | |||
@@ -2097,128 +2113,129 @@ func init() { | |||
func init() { proto.RegisterFile("seata.proto", fileDescriptor_450a439f8893981f) } | |||
var fileDescriptor_450a439f8893981f = []byte{ | |||
// 1931 bytes of a gzipped FileDescriptorProto | |||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x59, 0xcd, 0x6f, 0x23, 0x49, | |||
0x15, 0x77, 0xb7, 0xbf, 0x5f, 0x62, 0xbb, 0x52, 0xce, 0x87, 0xe3, 0xd9, 0xb4, 0x33, 0xbd, 0x5a, | |||
0xe1, 0x1d, 0xd8, 0x64, 0x94, 0x11, 0x48, 0x8b, 0x10, 0x2b, 0x3b, 0xc9, 0x0e, 0x21, 0xec, 0xee, | |||
0xd0, 0xc9, 0x8a, 0x15, 0x97, 0x51, 0xc7, 0xae, 0x75, 0x5a, 0x71, 0xba, 0x4d, 0x77, 0x7b, 0x12, | |||
0x8b, 0x0b, 0x77, 0x0e, 0x80, 0x56, 0xe2, 0x80, 0xc4, 0x8d, 0x03, 0x27, 0x6e, 0x1c, 0x10, 0xfc, | |||
0x01, 0x1c, 0x38, 0xcc, 0x09, 0xed, 0xc9, 0x62, 0x12, 0x21, 0x40, 0x02, 0x69, 0xe5, 0xbf, 0x00, | |||
0xd5, 0x47, 0xbb, 0xab, 0x6c, 0x67, 0x3d, 0x59, 0x40, 0x64, 0xf7, 0x58, 0xef, 0xfd, 0xaa, 0xea, | |||
0xf5, 0x7b, 0xef, 0xf7, 0x5e, 0x55, 0x35, 0x2c, 0x04, 0xc4, 0x0e, 0xed, 0xad, 0x9e, 0xef, 0x85, | |||
0x1e, 0x4e, 0xd9, 0x3d, 0x27, 0xa8, 0x42, 0xc7, 0xeb, 0x78, 0x5c, 0x52, 0x5d, 0xef, 0x78, 0x5e, | |||
0xa7, 0x4b, 0xb6, 0xd9, 0xe8, 0xa4, 0xff, 0xe1, 0xb6, 0xed, 0x0e, 0xb8, 0xca, 0xfc, 0x45, 0x06, | |||
0x0a, 0x8f, 0xbb, 0xde, 0x89, 0xdd, 0x3d, 0x22, 0x41, 0xe0, 0x78, 0x2e, 0xfe, 0x2a, 0x40, 0xa3, | |||
0xdd, 0xf6, 0xe9, 0xc8, 0xed, 0x54, 0xb4, 0x4d, 0xad, 0x9e, 0x6f, 0xae, 0x8c, 0x86, 0xb5, 0xa5, | |||
0x4b, 0xcf, 0x3f, 0xff, 0xba, 0x69, 0x8f, 0x75, 0xa6, 0x25, 0x01, 0xf1, 0x26, 0x24, 0x3f, 0x38, | |||
0xd8, 0xab, 0xe8, 0x0c, 0x5f, 0x1c, 0x0d, 0x6b, 0xc0, 0xf1, 0x97, 0x4e, 0xdb, 0xb4, 0xa8, 0x0a, | |||
0xbf, 0x05, 0x85, 0x63, 0xdf, 0x76, 0x03, 0xbb, 0x15, 0x3a, 0x9e, 0x7b, 0xb0, 0x57, 0x49, 0x6e, | |||
0x6a, 0xf5, 0x64, 0x73, 0x7d, 0x34, 0xac, 0xad, 0x70, 0x6c, 0x18, 0xab, 0x9f, 0xd2, 0x69, 0x2a, | |||
0x1e, 0xef, 0x43, 0x49, 0x12, 0xbc, 0x6b, 0x9f, 0x93, 0x4a, 0x8a, 0x6d, 0x77, 0x6f, 0x34, 0xac, | |||
0xad, 0x4d, 0x2f, 0xe1, 0xda, 0xe7, 0xc4, 0xb4, 0x26, 0xe7, 0xe0, 0xaf, 0x40, 0xf6, 0xd8, 0x39, | |||
0x27, 0x5e, 0x3f, 0xac, 0xa4, 0x37, 0xb5, 0x7a, 0xba, 0x89, 0x47, 0xc3, 0x5a, 0x51, 0x4c, 0xe7, | |||
0x0a, 0xd3, 0x8a, 0x20, 0xf8, 0x11, 0xe4, 0x9b, 0xa4, 0xe3, 0xb8, 0x74, 0x5c, 0xc9, 0x30, 0x8b, | |||
0x25, 0x6f, 0x9c, 0x50, 0xd5, 0x53, 0x3a, 0xcb, 0xb4, 0x62, 0x1c, 0x3e, 0x84, 0xcc, 0x51, 0x68, | |||
0x87, 0xfd, 0xa0, 0x92, 0xdd, 0xd4, 0xea, 0xc5, 0x9d, 0xcd, 0x2d, 0x1a, 0x93, 0x2d, 0xc5, 0xd1, | |||
0xd1, 0x88, 0xe1, 0x9a, 0x4b, 0xa3, 0x61, 0xad, 0xc0, 0xd7, 0x0c, 0x98, 0xc4, 0xb4, 0xc4, 0x12, | |||
0xf8, 0x75, 0xc8, 0x34, 0x5a, 0xa1, 0xf3, 0x8c, 0x54, 0x72, 0x9b, 0x5a, 0x3d, 0x27, 0x43, 0x6d, | |||
0x26, 0x37, 0x2d, 0x01, 0x30, 0xff, 0xa4, 0xc3, 0xa2, 0xbc, 0x2c, 0x5e, 0x83, 0xf2, 0xfb, 0xee, | |||
0x99, 0xeb, 0x5d, 0xb8, 0xb2, 0x18, 0x25, 0x70, 0x1e, 0xd2, 0xcc, 0x5c, 0xa4, 0xe1, 0x22, 0xc0, | |||
0xae, 0x77, 0x7e, 0xee, 0x84, 0xa1, 0xe3, 0x76, 0x90, 0x8e, 0x31, 0x14, 0xf9, 0xd8, 0x22, 0xa1, | |||
0x3f, 0xa0, 0xb2, 0x24, 0x2e, 0xc1, 0x82, 0xe5, 0x75, 0xbb, 0x8e, 0xdb, 0x69, 0xda, 0xad, 0x33, | |||
0x94, 0xc2, 0xcb, 0x80, 0xa8, 0xe0, 0xc4, 0x6e, 0x9d, 0x8d, 0x61, 0x69, 0xbc, 0x0a, 0x58, 0xf8, | |||
0x4d, 0x46, 0x67, 0xf0, 0x3d, 0x58, 0x93, 0xe4, 0xca, 0xa4, 0x2c, 0x2e, 0x43, 0xa9, 0x11, 0x0c, | |||
0xdc, 0x96, 0x64, 0x44, 0x0e, 0x17, 0x20, 0x2f, 0xc6, 0xa4, 0x8d, 0xf2, 0x18, 0xc1, 0x22, 0x1f, | |||
0xbe, 0x6d, 0x3b, 0x5d, 0xd2, 0x46, 0x40, 0xad, 0xa6, 0x6b, 0x91, 0x36, 0xdb, 0x62, 0x81, 0x5a, | |||
0x1d, 0xad, 0x2d, 0x30, 0x8b, 0x78, 0x05, 0x96, 0xa4, 0x6d, 0x05, 0xb4, 0x80, 0xd7, 0x61, 0x65, | |||
0xc2, 0x1a, 0x31, 0xa3, 0x88, 0x17, 0x21, 0xf7, 0xb6, 0xe3, 0x3a, 0xc1, 0x29, 0x69, 0xa3, 0x92, | |||
0xf9, 0xe3, 0x2c, 0x14, 0x9a, 0xbe, 0xed, 0xb6, 0x4e, 0xff, 0xe7, 0xe4, 0x78, 0x08, 0x39, 0xbe, | |||
0xd3, 0x98, 0x17, 0xcb, 0xa3, 0x61, 0x0d, 0x89, 0x2c, 0x63, 0x1a, 0x46, 0x89, 0x31, 0x6a, 0x9a, | |||
0x4e, 0xa9, 0x5b, 0xd2, 0xe9, 0x6b, 0x00, 0x16, 0x09, 0xbc, 0xbe, 0xdf, 0x22, 0x07, 0x7b, 0x8c, | |||
0x0a, 0xf9, 0xe6, 0xea, 0x68, 0x58, 0xc3, 0x7c, 0xb6, 0x2f, 0x74, 0x6c, 0xaa, 0x84, 0xc4, 0x6f, | |||
0x40, 0xf6, 0x3b, 0x5e, 0xeb, 0xec, 0x90, 0x0c, 0x18, 0x1f, 0xf2, 0xcd, 0xf2, 0x68, 0x58, 0x2b, | |||
0xf1, 0x49, 0x5d, 0xaf, 0x75, 0xf6, 0xf4, 0x8c, 0x0c, 0x4c, 0x2b, 0xc2, 0xe0, 0x6f, 0x43, 0xea, | |||
0x78, 0xd0, 0x23, 0x82, 0x09, 0x06, 0x67, 0x82, 0xe2, 0x55, 0x31, 0xa2, 0x28, 0xd9, 0x00, 0xf1, | |||
0xd5, 0xe1, 0xa0, 0x47, 0x4c, 0x8b, 0xad, 0x21, 0xf1, 0x2a, 0x27, 0xf3, 0x6a, 0xd6, 0x6a, 0xf3, | |||
0x79, 0xb5, 0x0f, 0xa5, 0x46, 0xaf, 0xd7, 0x75, 0x5a, 0x36, 0x75, 0xc8, 0x9e, 0x1d, 0xda, 0x95, | |||
0xfc, 0xa6, 0x56, 0x5f, 0x94, 0xcb, 0x89, 0x1d, 0x03, 0x9e, 0xb6, 0xed, 0xd0, 0x36, 0xad, 0xc9, | |||
0x39, 0xe6, 0x36, 0x40, 0x6c, 0x3f, 0xce, 0x80, 0xde, 0x38, 0x46, 0x09, 0x9c, 0x85, 0xe4, 0xf1, | |||
0xee, 0x2e, 0xd2, 0x70, 0x0e, 0x52, 0x47, 0x8d, 0xc7, 0x0d, 0xa4, 0x53, 0xd5, 0x07, 0x0d, 0x94, | |||
0x34, 0x7f, 0xab, 0xc3, 0xa2, 0x6c, 0xa3, 0x44, 0x52, 0x59, 0x8c, 0x12, 0x2c, 0xc7, 0x49, 0xc7, | |||
0x09, 0x42, 0xe2, 0x93, 0x36, 0xd2, 0x28, 0x0b, 0x9e, 0x9c, 0xda, 0x01, 0x79, 0xcf, 0x25, 0x7b, | |||
0x9e, 0x4b, 0x38, 0x57, 0x23, 0x89, 0xc8, 0xe1, 0x24, 0xe5, 0x53, 0x24, 0x13, 0x69, 0x8e, 0x52, | |||
0x94, 0x0a, 0x4c, 0x78, 0x7c, 0xe1, 0xc5, 0xbc, 0x4a, 0xe3, 0xfb, 0xb0, 0xa1, 0x8a, 0xf9, 0x2a, | |||
0x8c, 0x9d, 0xf6, 0x49, 0x97, 0xa0, 0x0c, 0x7e, 0x15, 0x6a, 0xb3, 0x20, 0xbb, 0xb6, 0xfb, 0xae, | |||
0xc7, 0x4b, 0x04, 0xca, 0x52, 0xe2, 0x47, 0x20, 0x89, 0x6a, 0x39, 0x79, 0xb2, 0xca, 0xb5, 0x78, | |||
0x87, 0x3c, 0x7e, 0x0d, 0xee, 0xcf, 0x06, 0xc9, 0x7b, 0x80, 0xf9, 0x67, 0x1d, 0xb2, 0x96, 0x77, | |||
0x41, 0xf3, 0x2a, 0x22, 0x94, 0x76, 0x8b, 0x6e, 0xa3, 0xdf, 0x92, 0x1e, 0xb7, 0x67, 0xa4, 0x4a, | |||
0xa8, 0xd4, 0x4b, 0x13, 0xea, 0x11, 0xe4, 0x8f, 0xa9, 0x2b, 0x58, 0x47, 0x4b, 0x4f, 0xd6, 0x94, | |||
0x90, 0xaa, 0x44, 0x2f, 0x8b, 0x71, 0x78, 0x03, 0xf4, 0x27, 0x87, 0x82, 0x80, 0x85, 0xd1, 0xb0, | |||
0x96, 0xe7, 0xe8, 0xde, 0x99, 0x69, 0xe9, 0x4f, 0x0e, 0xf1, 0x03, 0xc8, 0x58, 0xde, 0x05, 0xe5, | |||
0x68, 0x96, 0x41, 0xa4, 0x1e, 0xe7, 0x7b, 0x17, 0x9c, 0xa2, 0x02, 0x61, 0x5e, 0x02, 0xe6, 0xdd, | |||
0x81, 0x75, 0x04, 0x8b, 0xfc, 0xa0, 0x4f, 0x82, 0x10, 0x1b, 0xd3, 0xa5, 0x4e, 0xa9, 0x69, 0x95, | |||
0xb8, 0x8d, 0x52, 0xd7, 0xa6, 0xe3, 0x96, 0x59, 0x9f, 0xee, 0xd3, 0x49, 0x36, 0x7d, 0x52, 0x6c, | |||
0xfe, 0x46, 0x83, 0xb2, 0xb2, 0x75, 0xd0, 0xf3, 0xdc, 0x80, 0xe0, 0x87, 0xcc, 0x93, 0xfd, 0x6e, | |||
0xb8, 0xeb, 0xb5, 0x09, 0xdb, 0xbb, 0xb8, 0x83, 0x38, 0xd7, 0x63, 0xb9, 0x25, 0x61, 0xf0, 0x9b, | |||
0x50, 0xd8, 0xbf, 0x6c, 0x91, 0x1e, 0x5d, 0x9a, 0x4d, 0xd2, 0xd9, 0xa4, 0x32, 0x9f, 0xa4, 0xa8, | |||
0x2c, 0x15, 0x49, 0x3f, 0xe4, 0x1d, 0x12, 0x04, 0x76, 0x27, 0x32, 0x33, 0x1a, 0x62, 0xc4, 0xb3, | |||
0x8c, 0x45, 0x92, 0x65, 0x95, 0xf9, 0x2f, 0x0d, 0x56, 0x78, 0xbc, 0x23, 0x62, 0xbe, 0xac, 0xbb, | |||
0x90, 0xd4, 0x02, 0x78, 0x86, 0x1a, 0x4a, 0xba, 0xf0, 0xad, 0xe5, 0xb4, 0xa8, 0xc4, 0x75, 0x96, | |||
0x5b, 0x30, 0x2e, 0xa9, 0xdf, 0x94, 0x4b, 0x0e, 0xcb, 0x98, 0xb9, 0x85, 0xd5, 0x92, 0x8b, 0x54, | |||
0x7d, 0xba, 0xf2, 0xd1, 0x44, 0x5a, 0x9c, 0x2e, 0x6e, 0xbf, 0xd7, 0x60, 0x75, 0xf2, 0x7b, 0xef, | |||
0x56, 0x8c, 0xaa, 0x12, 0x4d, 0x59, 0x07, 0x8c, 0x09, 0x69, 0x7e, 0xa4, 0x43, 0x39, 0xb2, 0xbe, | |||
0xe7, 0xf9, 0x61, 0x14, 0x2b, 0x24, 0x55, 0x0f, 0x1e, 0x0b, 0x79, 0x15, 0x5d, 0x5d, 0x65, 0x6e, | |||
0x9c, 0xd4, 0x68, 0xa4, 0x6e, 0x1d, 0x8d, 0x3d, 0xb5, 0x1d, 0x88, 0x78, 0xce, 0x6d, 0x6d, 0x96, | |||
0xda, 0x44, 0x5e, 0x3e, 0xa6, 0xbf, 0xd4, 0x60, 0x59, 0xf5, 0xca, 0x9d, 0x8a, 0xa8, 0xf9, 0x2b, | |||
0x0d, 0x56, 0x79, 0x51, 0xa0, 0xf9, 0xfe, 0xdd, 0x3e, 0xf1, 0x07, 0x37, 0x07, 0x4e, 0x0d, 0x8e, | |||
0xfe, 0x69, 0x24, 0x4a, 0x7e, 0x1a, 0x89, 0x6e, 0x1d, 0x36, 0xf3, 0x0f, 0x1a, 0xac, 0x4d, 0x99, | |||
0x79, 0xe7, 0xb8, 0x41, 0x6d, 0xa3, 0x3d, 0x83, 0x7d, 0x60, 0xce, 0x1a, 0x8f, 0xcd, 0x2f, 0x45, | |||
0x95, 0x57, 0x64, 0xd3, 0x4d, 0x1e, 0x36, 0xaf, 0x35, 0x58, 0x56, 0x91, 0x77, 0xeb, 0x23, 0xf7, | |||
0xd4, 0x2b, 0x8f, 0x88, 0xe4, 0xdc, 0x1b, 0x97, 0xa5, 0xcc, 0x8a, 0xdd, 0x11, 0x5d, 0x7d, 0xe6, | |||
0xbb, 0x23, 0x42, 0x7e, 0x11, 0xdd, 0xf1, 0x3a, 0xac, 0xf0, 0x71, 0x7c, 0x5f, 0xbb, 0xc9, 0x21, | |||
0x7f, 0x1d, 0xd3, 0x35, 0xc6, 0x7e, 0x11, 0x5d, 0x72, 0x1e, 0x65, 0xc8, 0xbc, 0x5e, 0x32, 0xb9, | |||
0x9d, 0xfe, 0x99, 0xb6, 0x8b, 0xf3, 0xec, 0x4e, 0x56, 0xe9, 0xff, 0x92, 0x53, 0xff, 0xa6, 0x45, | |||
0x1d, 0x7a, 0x0e, 0xef, 0xfe, 0xa3, 0x0e, 0x7d, 0x17, 0x4e, 0x52, 0x3f, 0xd3, 0xa3, 0xae, 0x7b, | |||
0x37, 0xeb, 0xc6, 0xd4, 0x59, 0x57, 0xf1, 0x78, 0x7a, 0xc2, 0xe3, 0x93, 0x67, 0x96, 0xcc, 0x67, | |||
0x39, 0xb3, 0x98, 0xff, 0x88, 0x4f, 0xd3, 0xf3, 0xca, 0xcc, 0xe7, 0x3e, 0xfe, 0x1f, 0xe9, 0xe3, | |||
0x93, 0xf4, 0x1d, 0x2d, 0x93, 0xff, 0x8f, 0x0c, 0xf8, 0xb9, 0x16, 0xbd, 0xb0, 0x45, 0x56, 0x14, | |||
0x41, 0x17, 0x81, 0x4f, 0x5a, 0x3a, 0x7b, 0xf4, 0x5d, 0x52, 0x00, 0x2c, 0x50, 0xfc, 0x73, 0xd7, | |||
0xe4, 0xcd, 0x24, 0xb5, 0x35, 0x3d, 0x03, 0x6f, 0xa9, 0x9f, 0xbd, 0xb0, 0xb3, 0xbc, 0xc5, 0x1f, | |||
0xc5, 0xb7, 0xa2, 0x47, 0xf1, 0xad, 0x86, 0x3b, 0x18, 0x3b, 0xe3, 0xc1, 0x9b, 0x72, 0x4c, 0xd8, | |||
0x6b, 0xe7, 0x78, 0x24, 0x1e, 0x5a, 0x12, 0x78, 0x05, 0x96, 0x62, 0xe9, 0x51, 0xbf, 0xd5, 0x22, | |||
0x41, 0x80, 0xb4, 0x07, 0x3f, 0x49, 0x4d, 0x44, 0x07, 0x17, 0x01, 0xc4, 0x03, 0xcf, 0xbe, 0xef, | |||
0xa3, 0x04, 0x2e, 0xc1, 0x02, 0xbb, 0xef, 0x8a, 0x95, 0x34, 0x5c, 0x86, 0x92, 0xc8, 0xc8, 0x5d, | |||
0xcf, 0xfd, 0xb0, 0xeb, 0xb4, 0x42, 0xfe, 0x5e, 0x74, 0xf0, 0x1e, 0x4a, 0xe2, 0xfb, 0xb0, 0xa1, | |||
0x26, 0xce, 0xe4, 0x0b, 0x4a, 0x0a, 0xbf, 0x0a, 0xb5, 0x59, 0x90, 0xf7, 0x5d, 0x7f, 0x0c, 0x4a, | |||
0xe3, 0x4a, 0x7c, 0xec, 0xe7, 0x57, 0x39, 0xb1, 0x7d, 0x06, 0xaf, 0x02, 0x96, 0x2f, 0x04, 0x42, | |||
0x9e, 0xc5, 0x6b, 0x50, 0x8e, 0xce, 0x8b, 0xbb, 0xa7, 0x64, 0xfc, 0x4c, 0x9a, 0xc3, 0x1b, 0xb0, | |||
0x2e, 0x48, 0x20, 0x5d, 0xe8, 0xbd, 0x70, 0xff, 0xd2, 0x09, 0x42, 0x94, 0xa7, 0x6a, 0x5e, 0xe5, | |||
0x67, 0xa9, 0x01, 0x1b, 0x50, 0x9d, 0xa5, 0xe6, 0x6f, 0xd8, 0x68, 0x01, 0x9b, 0x60, 0x4c, 0xe9, | |||
0x79, 0xbe, 0x1c, 0xb8, 0xcf, 0xec, 0xae, 0xd3, 0x46, 0x8b, 0xf4, 0x8b, 0xb9, 0x35, 0xc7, 0xde, | |||
0x11, 0x71, 0xdb, 0x33, 0x7a, 0x08, 0x2a, 0xe0, 0xd7, 0xe0, 0xfe, 0x34, 0x68, 0xa2, 0xd4, 0xa0, | |||
0x22, 0x8d, 0x63, 0x04, 0x6b, 0xb4, 0x05, 0x0a, 0x95, 0x70, 0x0d, 0xee, 0x71, 0x31, 0xf5, 0xc1, | |||
0x94, 0x41, 0x08, 0x51, 0xb7, 0x71, 0xc0, 0xf7, 0x7c, 0x27, 0x24, 0x22, 0xdb, 0xd1, 0x12, 0x0d, | |||
0x2f, 0x97, 0x1f, 0x85, 0x9e, 0x4f, 0x10, 0x7e, 0xf0, 0xc3, 0x19, 0x39, 0x4c, 0x73, 0x8a, 0xbd, | |||
0x78, 0x4a, 0x96, 0xa3, 0x04, 0xae, 0xc2, 0xea, 0xa4, 0x94, 0xe7, 0x18, 0xd2, 0xd8, 0xeb, 0xfa, | |||
0x58, 0x17, 0x7d, 0x06, 0xd2, 0xf1, 0x2b, 0x50, 0x51, 0xe5, 0x4d, 0x5e, 0x5d, 0xe8, 0xac, 0xe4, | |||
0xce, 0x3f, 0x75, 0x58, 0x97, 0xec, 0x7e, 0xc7, 0x76, 0xed, 0x0e, 0xf1, 0x8f, 0x88, 0xff, 0xcc, | |||
0x69, 0x11, 0xfc, 0x0d, 0xf1, 0x1f, 0x00, 0x57, 0xe4, 0xce, 0x2d, 0x3f, 0x04, 0x55, 0xd7, 0x67, | |||
0x68, 0x44, 0xe5, 0x6a, 0x42, 0xfe, 0x31, 0x09, 0xc5, 0x0d, 0x54, 0xc1, 0x29, 0xb7, 0x8a, 0x6a, | |||
0x75, 0x96, 0x4a, 0xac, 0xb1, 0x1f, 0x1d, 0x24, 0x78, 0xf2, 0xa9, 0xcb, 0x28, 0x67, 0x2d, 0x75, | |||
0x99, 0x89, 0x63, 0xd1, 0x5b, 0x90, 0xe1, 0xee, 0x52, 0x17, 0x50, 0x52, 0x42, 0x5d, 0x60, 0xa2, | |||
0x0f, 0xef, 0x43, 0x2e, 0xf2, 0x29, 0xbe, 0xa7, 0x6c, 0xa4, 0x26, 0x4c, 0xf5, 0x95, 0xd9, 0x4a, | |||
0xbe, 0xcc, 0xce, 0xef, 0x74, 0x58, 0x8d, 0x5a, 0xcf, 0x84, 0xaf, 0x1b, 0x51, 0x1a, 0xd0, 0x9d, | |||
0xfb, 0x2e, 0xed, 0x0e, 0x04, 0x97, 0x67, 0x14, 0xb1, 0xea, 0x2c, 0x61, 0x5d, 0x7b, 0xa8, 0xe1, | |||
0x43, 0x28, 0xaa, 0x1c, 0x8e, 0x4c, 0x9d, 0xf9, 0x28, 0x15, 0x99, 0x7a, 0xc3, 0x0b, 0xce, 0x7e, | |||
0x54, 0xc2, 0x55, 0xcf, 0xcf, 0x78, 0x31, 0x89, 0x1c, 0x37, 0xf3, 0xd9, 0xe0, 0x5b, 0x90, 0x1f, | |||
0xdf, 0x80, 0xb1, 0xe2, 0x9c, 0xc9, 0xfb, 0x7b, 0x75, 0xe3, 0x06, 0x2d, 0x5f, 0xa9, 0x69, 0x3f, | |||
0x7f, 0x61, 0x24, 0x3e, 0x7e, 0x61, 0x24, 0x3e, 0x79, 0x61, 0x68, 0x3f, 0xba, 0x32, 0xb4, 0x5f, | |||
0x5f, 0x19, 0xda, 0x1f, 0xaf, 0x0c, 0xed, 0xf9, 0x95, 0xa1, 0xfd, 0xe5, 0xca, 0xd0, 0xfe, 0x7e, | |||
0x65, 0x24, 0x3e, 0xb9, 0x32, 0xb4, 0x9f, 0x5e, 0x1b, 0x89, 0xe7, 0xd7, 0x46, 0xe2, 0xe3, 0x6b, | |||
0x23, 0xf1, 0xfd, 0x2f, 0x77, 0x9c, 0xf0, 0xb4, 0x7f, 0xb2, 0xd5, 0xf2, 0xce, 0xb7, 0xbd, 0x1e, | |||
0x71, 0x43, 0xff, 0x72, 0x9b, 0xfd, 0x0f, 0x7d, 0xa3, 0xe3, 0x75, 0x6d, 0xb7, 0xb3, 0xfd, 0x6c, | |||
0x67, 0xbb, 0x77, 0xd6, 0xd9, 0xa6, 0x5b, 0x9f, 0x64, 0x58, 0xb9, 0x7f, 0xf4, 0xef, 0x00, 0x00, | |||
0x00, 0xff, 0xff, 0xf4, 0xc7, 0x17, 0x6a, 0x32, 0x1d, 0x00, 0x00, | |||
// 1943 bytes of a gzipped FileDescriptorProto | |||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x59, 0x4f, 0x6f, 0x23, 0x49, | |||
0x15, 0x77, 0xb7, 0xff, 0xbf, 0xc4, 0x76, 0xa5, 0x3c, 0x49, 0x1c, 0xcf, 0xa6, 0xed, 0xe9, 0xd5, | |||
0x0a, 0xef, 0x88, 0xcd, 0x8c, 0x32, 0x80, 0x34, 0x08, 0xb1, 0xb2, 0x93, 0xec, 0x10, 0xc2, 0xee, | |||
0x0e, 0x9d, 0xac, 0xd8, 0x5b, 0xd4, 0xb1, 0x6b, 0x9d, 0x56, 0x9c, 0x6e, 0xd3, 0xdd, 0x9e, 0xc4, | |||
0xe2, 0xc2, 0x37, 0x58, 0xd0, 0x4a, 0x1c, 0x90, 0xb8, 0x71, 0xe0, 0xc4, 0x8d, 0x03, 0x82, 0x33, | |||
0xe2, 0xc0, 0x61, 0x4e, 0x68, 0x4f, 0x16, 0x93, 0x11, 0x02, 0x24, 0x0e, 0x2b, 0x7f, 0x02, 0x54, | |||
0x7f, 0xda, 0x5d, 0x65, 0x3b, 0xeb, 0xc9, 0x02, 0x22, 0xec, 0xcd, 0xf5, 0xde, 0xaf, 0x5e, 0x55, | |||
0xbf, 0xf7, 0x7e, 0xef, 0x55, 0x95, 0x61, 0x29, 0x20, 0x76, 0x68, 0x6f, 0xf5, 0x7d, 0x2f, 0xf4, | |||
0x70, 0xca, 0xee, 0x3b, 0x41, 0xf5, 0xad, 0xae, 0x13, 0x9e, 0x0e, 0x4e, 0xb6, 0xda, 0xde, 0xf9, | |||
0x83, 0xae, 0xd7, 0xf5, 0x1e, 0x30, 0xe5, 0xc9, 0xe0, 0x23, 0x36, 0x62, 0x03, 0xf6, 0x8b, 0x4f, | |||
0xaa, 0x6e, 0x74, 0x3d, 0xaf, 0xdb, 0x23, 0x31, 0xca, 0x76, 0x87, 0x5c, 0x65, 0xfe, 0x3c, 0x03, | |||
0x85, 0x27, 0x3d, 0xef, 0xc4, 0xee, 0x1d, 0x92, 0x20, 0x70, 0x3c, 0x17, 0x7f, 0x1d, 0xa0, 0xd9, | |||
0xe9, 0xf8, 0x74, 0xe4, 0x76, 0x2b, 0x5a, 0x5d, 0x6b, 0xe4, 0x5b, 0xab, 0xe3, 0x51, 0x6d, 0xe5, | |||
0xd2, 0xf3, 0xcf, 0xbf, 0x69, 0xda, 0x13, 0x9d, 0x69, 0x49, 0x40, 0x5c, 0x87, 0xe4, 0x87, 0xfb, | |||
0xbb, 0x15, 0x9d, 0xe1, 0x8b, 0xe3, 0x51, 0x0d, 0x38, 0xfe, 0xd2, 0xe9, 0x98, 0x16, 0x55, 0xe1, | |||
0xb7, 0xa1, 0x70, 0xe4, 0xdb, 0x6e, 0x60, 0xb7, 0x43, 0xc7, 0x73, 0xf7, 0x77, 0x2b, 0xc9, 0xba, | |||
0xd6, 0x48, 0xb6, 0x36, 0xc6, 0xa3, 0xda, 0x2a, 0xc7, 0x86, 0xb1, 0xfa, 0x98, 0x4e, 0x53, 0xf1, | |||
0x78, 0x0f, 0x4a, 0x92, 0xe0, 0x3d, 0xfb, 0x9c, 0x54, 0x52, 0x6c, 0xb9, 0xbb, 0xe3, 0x51, 0x6d, | |||
0x7d, 0xd6, 0x84, 0x6b, 0x9f, 0x13, 0xd3, 0x9a, 0x9e, 0x83, 0xbf, 0x0a, 0xd9, 0x23, 0xe7, 0x9c, | |||
0x78, 0x83, 0xb0, 0x92, 0xae, 0x6b, 0x8d, 0x74, 0x0b, 0x8f, 0x47, 0xb5, 0xa2, 0x98, 0xce, 0x15, | |||
0xa6, 0x15, 0x41, 0xf0, 0x23, 0xc8, 0xb7, 0x48, 0xd7, 0x71, 0xe9, 0xb8, 0x92, 0x61, 0x3b, 0x96, | |||
0xbc, 0x71, 0x42, 0x55, 0xc7, 0x74, 0x96, 0x69, 0xc5, 0x38, 0x7c, 0x00, 0x99, 0xc3, 0xd0, 0x0e, | |||
0x07, 0x41, 0x25, 0x5b, 0xd7, 0x1a, 0xc5, 0xed, 0xfa, 0x16, 0x0d, 0xdb, 0x96, 0xe2, 0xe8, 0x68, | |||
0xc4, 0x70, 0xad, 0x95, 0xf1, 0xa8, 0x56, 0xe0, 0x36, 0x03, 0x26, 0x31, 0x2d, 0x61, 0x02, 0xbf, | |||
0x09, 0x99, 0x66, 0x3b, 0x74, 0x9e, 0x91, 0x4a, 0xae, 0xae, 0x35, 0x72, 0x32, 0xd4, 0x66, 0x72, | |||
0xd3, 0x12, 0x00, 0xf3, 0x4f, 0x3a, 0x2c, 0xcb, 0x66, 0xf1, 0x3a, 0x94, 0x3f, 0x70, 0xcf, 0x5c, | |||
0xef, 0xc2, 0x95, 0xc5, 0x28, 0x81, 0xf3, 0x90, 0x66, 0xdb, 0x45, 0x1a, 0x2e, 0x02, 0xec, 0x78, | |||
0xe7, 0xe7, 0x4e, 0x18, 0x3a, 0x6e, 0x17, 0xe9, 0x18, 0x43, 0x91, 0x8f, 0x2d, 0x12, 0xfa, 0x43, | |||
0x2a, 0x4b, 0xe2, 0x12, 0x2c, 0x59, 0x5e, 0xaf, 0xe7, 0xb8, 0xdd, 0x96, 0xdd, 0x3e, 0x43, 0x29, | |||
0x7c, 0x07, 0x10, 0x15, 0x9c, 0xd8, 0xed, 0xb3, 0x09, 0x2c, 0x8d, 0xd7, 0x00, 0x0b, 0xbf, 0xc9, | |||
0xe8, 0x0c, 0xbe, 0x0b, 0xeb, 0x92, 0x5c, 0x99, 0x94, 0xc5, 0x65, 0x28, 0x35, 0x83, 0xa1, 0xdb, | |||
0x96, 0x36, 0x91, 0xc3, 0x05, 0xc8, 0x8b, 0x31, 0xe9, 0xa0, 0x3c, 0x46, 0xb0, 0xcc, 0x87, 0xef, | |||
0xd8, 0x4e, 0x8f, 0x74, 0x10, 0xd0, 0x5d, 0x53, 0x5b, 0xa4, 0xc3, 0x96, 0x58, 0xa2, 0xbb, 0x8e, | |||
0x6c, 0x0b, 0xcc, 0x32, 0x5e, 0x85, 0x15, 0x69, 0x59, 0x01, 0x2d, 0xe0, 0x0d, 0x58, 0x9d, 0xda, | |||
0x8d, 0x98, 0x51, 0xc4, 0xcb, 0x90, 0x7b, 0xc7, 0x71, 0x9d, 0xe0, 0x94, 0x74, 0x50, 0xc9, 0xfc, | |||
0x43, 0x16, 0x0a, 0x2d, 0xdf, 0x76, 0xdb, 0xa7, 0xff, 0x75, 0x72, 0x3c, 0x84, 0x1c, 0x5f, 0x69, | |||
0xc2, 0x8b, 0x3b, 0xe3, 0x51, 0x0d, 0x89, 0x2c, 0x63, 0x1a, 0x46, 0x89, 0x09, 0x6a, 0x96, 0x4e, | |||
0xa9, 0x1b, 0xd2, 0xe9, 0x1b, 0x00, 0x16, 0x09, 0xbc, 0x81, 0xdf, 0x26, 0xfb, 0xbb, 0x8c, 0x0a, | |||
0xf9, 0xd6, 0xda, 0x78, 0x54, 0xc3, 0x7c, 0xb6, 0x2f, 0x74, 0x6c, 0xaa, 0x84, 0xc4, 0x6f, 0x41, | |||
0xf6, 0x7b, 0x5e, 0xfb, 0xec, 0x80, 0x0c, 0x19, 0x1f, 0xf2, 0xad, 0xf2, 0x78, 0x54, 0x2b, 0xf1, | |||
0x49, 0x3d, 0xaf, 0x7d, 0x76, 0x7c, 0x46, 0x86, 0xa6, 0x15, 0x61, 0xf0, 0x77, 0x21, 0x75, 0x34, | |||
0xec, 0x13, 0xc1, 0x04, 0x83, 0x33, 0x41, 0xf1, 0xaa, 0x18, 0x51, 0x94, 0xbc, 0x01, 0xf1, 0xd5, | |||
0xe1, 0xb0, 0x4f, 0x4c, 0x8b, 0xd9, 0x90, 0x78, 0x95, 0x93, 0x79, 0x35, 0xcf, 0xda, 0x62, 0x5e, | |||
0xed, 0x41, 0xa9, 0xd9, 0xef, 0xf7, 0x9c, 0xb6, 0x4d, 0x1d, 0xb2, 0x6b, 0x87, 0x76, 0x25, 0x5f, | |||
0xd7, 0x1a, 0xcb, 0x72, 0x39, 0xb1, 0x63, 0xc0, 0x71, 0xc7, 0x0e, 0x6d, 0xd3, 0x9a, 0x9e, 0x83, | |||
0x1f, 0xc3, 0x92, 0x94, 0xbe, 0x15, 0x60, 0x1c, 0x5d, 0x1f, 0x8f, 0x6a, 0x65, 0x61, 0x82, 0x2a, | |||
0x8f, 0xdb, 0x4c, 0x6b, 0x5a, 0x32, 0xd6, 0x7c, 0x00, 0x10, 0x7f, 0x3a, 0xce, 0x80, 0xde, 0x3c, | |||
0x42, 0x09, 0x9c, 0x85, 0xe4, 0xd1, 0xce, 0x0e, 0xd2, 0x70, 0x0e, 0x52, 0x87, 0xcd, 0x27, 0x4d, | |||
0xa4, 0x53, 0xd5, 0x87, 0x4d, 0x94, 0x34, 0x7f, 0xa3, 0xc3, 0xb2, 0xfc, 0x79, 0x12, 0xbf, 0x65, | |||
0x31, 0x4a, 0x30, 0x7a, 0x90, 0xae, 0x13, 0x84, 0xc4, 0x27, 0x1d, 0xa4, 0x51, 0x02, 0x3d, 0x3d, | |||
0xb5, 0x03, 0xf2, 0xbe, 0x4b, 0x76, 0x3d, 0x97, 0x70, 0x9a, 0x47, 0x12, 0x91, 0xfe, 0x49, 0x4a, | |||
0xc5, 0x48, 0x26, 0x18, 0x82, 0x52, 0x94, 0x45, 0x4c, 0x78, 0x74, 0xe1, 0xc5, 0x94, 0x4c, 0xe3, | |||
0x7b, 0xb0, 0xa9, 0x8a, 0xb9, 0x15, 0x46, 0x6c, 0xfb, 0xa4, 0x47, 0x50, 0x06, 0xbf, 0x0e, 0xb5, | |||
0x79, 0x90, 0x1d, 0xdb, 0x7d, 0xcf, 0xe3, 0xd5, 0x05, 0x65, 0x69, 0xcd, 0x88, 0x40, 0x12, 0x4b, | |||
0x73, 0xf2, 0x64, 0x95, 0xa6, 0xf1, 0x0a, 0x79, 0xfc, 0x06, 0xdc, 0x9b, 0x0f, 0x92, 0xd7, 0x00, | |||
0xf3, 0xcf, 0x3a, 0x64, 0x2d, 0xef, 0x82, 0xa6, 0x64, 0xc4, 0x45, 0xed, 0x06, 0x8d, 0x4a, 0xbf, | |||
0x21, 0xb3, 0x6e, 0x4e, 0x66, 0x95, 0x8b, 0xa9, 0x57, 0xe6, 0xe2, 0x23, 0xc8, 0x1f, 0x51, 0x57, | |||
0xb0, 0x66, 0x98, 0x9e, 0x2e, 0x47, 0x21, 0x55, 0x89, 0x36, 0x18, 0xe3, 0xf0, 0x26, 0xe8, 0x4f, | |||
0x0f, 0x04, 0x77, 0x0b, 0xe3, 0x51, 0x2d, 0xcf, 0xd1, 0xfd, 0x33, 0xd3, 0xd2, 0x9f, 0x1e, 0xe0, | |||
0xfb, 0x90, 0xb1, 0xbc, 0x0b, 0x4a, 0xef, 0x2c, 0x83, 0x48, 0xed, 0xd1, 0xf7, 0x2e, 0x38, 0xbb, | |||
0x05, 0xc2, 0xbc, 0x04, 0xcc, 0x1b, 0x0b, 0x6b, 0x26, 0x16, 0xf9, 0xe1, 0x80, 0x04, 0x21, 0x36, | |||
0x66, 0xab, 0xa4, 0x52, 0x0e, 0x2b, 0x71, 0x07, 0xa6, 0xae, 0x4d, 0xc7, 0xdd, 0xb6, 0x31, 0xdb, | |||
0xe2, 0x93, 0x6c, 0xfa, 0xb4, 0xd8, 0xfc, 0xb5, 0x06, 0x65, 0x65, 0xe9, 0xa0, 0xef, 0xb9, 0x01, | |||
0xc1, 0x0f, 0x99, 0x27, 0x07, 0xbd, 0x70, 0xc7, 0xeb, 0x10, 0xb6, 0x76, 0x71, 0x1b, 0xf1, 0x32, | |||
0x11, 0xcb, 0x2d, 0x09, 0x83, 0x1f, 0x43, 0x61, 0xef, 0xb2, 0x4d, 0xfa, 0xd4, 0x34, 0x9b, 0xa4, | |||
0xb3, 0x49, 0x65, 0x3e, 0x49, 0x51, 0x59, 0x2a, 0x92, 0x7e, 0xc8, 0xbb, 0x24, 0x08, 0xec, 0x6e, | |||
0xb4, 0xcd, 0x68, 0x88, 0x11, 0xcf, 0x32, 0x16, 0x49, 0x96, 0x55, 0xe6, 0xc7, 0x3a, 0xac, 0xf2, | |||
0x78, 0x47, 0xc4, 0x7c, 0x55, 0x77, 0x21, 0xa9, 0x7b, 0xf0, 0x0c, 0x35, 0x94, 0x74, 0xe1, 0x4b, | |||
0xcb, 0x69, 0x51, 0x89, 0x4b, 0x34, 0xdf, 0xc1, 0xa4, 0x1a, 0x7f, 0x5b, 0x2e, 0x39, 0x2c, 0x63, | |||
0x16, 0xd6, 0x64, 0x4b, 0x2e, 0x52, 0x8d, 0xd9, 0xa2, 0x49, 0x13, 0x69, 0x79, 0xb6, 0x2e, 0xd6, | |||
0xd5, 0xba, 0x48, 0x73, 0x29, 0xa7, 0x96, 0xbf, 0xdf, 0x69, 0xb0, 0x36, 0xed, 0x91, 0xdb, 0x15, | |||
0xc5, 0xaa, 0x44, 0x64, 0xd6, 0x5e, 0x63, 0xca, 0x9a, 0x9f, 0xe8, 0x50, 0x8e, 0x76, 0xdf, 0xf7, | |||
0xfc, 0x30, 0x8a, 0x26, 0x92, 0xea, 0x0b, 0x8f, 0x96, 0x6c, 0x45, 0x57, 0xad, 0x2c, 0x8c, 0xa4, | |||
0x1a, 0xaf, 0xd4, 0x8d, 0xe3, 0xb5, 0xab, 0x36, 0x0c, 0x11, 0xf1, 0x85, 0x7d, 0xd3, 0x52, 0xdb, | |||
0xcc, 0x2b, 0x47, 0xdd, 0xfc, 0x85, 0x06, 0x77, 0x54, 0xaf, 0xdc, 0xaa, 0x88, 0x9a, 0xbf, 0xd4, | |||
0x60, 0x8d, 0x97, 0x0d, 0xca, 0x88, 0xef, 0x0f, 0x88, 0x3f, 0xbc, 0x3e, 0x70, 0x6a, 0x70, 0xf4, | |||
0xcf, 0xa3, 0x59, 0xf2, 0xf3, 0x68, 0x76, 0xe3, 0xb0, 0x99, 0xbf, 0xd7, 0x60, 0x7d, 0x66, 0x9b, | |||
0xb7, 0x8e, 0x1b, 0x74, 0x6f, 0xb4, 0xab, 0xb0, 0x0f, 0xcc, 0x59, 0x93, 0xb1, 0xf9, 0x95, 0xa8, | |||
0x36, 0x8b, 0x6c, 0xba, 0xce, 0xc3, 0xe6, 0x4b, 0x0d, 0xee, 0xa8, 0xc8, 0xdb, 0xf5, 0x91, 0xbb, | |||
0xea, 0x7d, 0x4a, 0x44, 0x72, 0xe1, 0x75, 0xce, 0x52, 0x66, 0xc5, 0xee, 0x88, 0xee, 0x55, 0x8b, | |||
0xdd, 0x11, 0x21, 0xbf, 0x8c, 0xee, 0x78, 0x13, 0x56, 0xf9, 0x38, 0xbe, 0x0c, 0x5e, 0xe7, 0x90, | |||
0xbf, 0x4e, 0xe8, 0x1a, 0x63, 0xbf, 0x8c, 0x2e, 0x39, 0x8f, 0x32, 0x64, 0x51, 0x2f, 0x99, 0x5e, | |||
0x4e, 0xff, 0x42, 0xcb, 0xc5, 0x79, 0x76, 0x2b, 0xab, 0xf4, 0x7f, 0xc8, 0xa9, 0x7f, 0xd3, 0xa2, | |||
0x0e, 0xbd, 0x80, 0x77, 0xff, 0x56, 0x87, 0xbe, 0x05, 0x67, 0x2d, 0xf3, 0xa7, 0x7a, 0xd4, 0x75, | |||
0x6f, 0x67, 0xdd, 0x98, 0x39, 0x0d, 0x2b, 0x1e, 0x4f, 0x4f, 0x79, 0x7c, 0xfa, 0xcc, 0x92, 0xf9, | |||
0x22, 0x67, 0x16, 0xf3, 0x1f, 0xda, 0xe4, 0xbc, 0xbd, 0xa8, 0xcc, 0xfc, 0xdf, 0xc7, 0xff, 0x13, | |||
0x7d, 0x72, 0x92, 0xbe, 0xa5, 0x65, 0xf2, 0x7f, 0x91, 0x01, 0x3f, 0xd3, 0xa2, 0xe7, 0xbb, 0x68, | |||
0x17, 0x45, 0xd0, 0x45, 0xe0, 0x93, 0x96, 0xce, 0x5e, 0x94, 0x57, 0x14, 0x00, 0x0b, 0x14, 0xff, | |||
0xdc, 0x75, 0x79, 0x31, 0x49, 0x6d, 0xcd, 0xce, 0xc0, 0x5b, 0xea, 0x67, 0x2f, 0x6d, 0xdf, 0xd9, | |||
0xe2, 0x2f, 0xee, 0x5b, 0xd1, 0x8b, 0xfb, 0x56, 0xd3, 0x1d, 0x4e, 0x9c, 0x71, 0xff, 0xb1, 0x1c, | |||
0x13, 0xf6, 0x94, 0x3a, 0x19, 0x89, 0xa7, 0x98, 0x04, 0x5e, 0x85, 0x95, 0x58, 0x7a, 0x38, 0x68, | |||
0xb7, 0x49, 0x10, 0x20, 0xed, 0xfe, 0xc7, 0xa9, 0xa9, 0xe8, 0xe0, 0x22, 0x80, 0x78, 0x02, 0xda, | |||
0xf3, 0x7d, 0x94, 0xc0, 0x25, 0x58, 0x62, 0x37, 0x62, 0x61, 0x49, 0xc3, 0x65, 0x28, 0x89, 0x8c, | |||
0xdc, 0xf1, 0xdc, 0x8f, 0x7a, 0x4e, 0x3b, 0xe4, 0x2f, 0x4a, 0xfb, 0xef, 0xa3, 0x24, 0xbe, 0x07, | |||
0x9b, 0x6a, 0xe2, 0x4c, 0xbf, 0xb1, 0xa4, 0xf0, 0xeb, 0x50, 0x9b, 0x07, 0xf9, 0xc0, 0xf5, 0x27, | |||
0xa0, 0x34, 0xae, 0xc4, 0xc7, 0x7e, 0x7e, 0x95, 0x13, 0xcb, 0x67, 0xf0, 0x1a, 0x60, 0xf9, 0x42, | |||
0x20, 0xe4, 0x59, 0xbc, 0x0e, 0xe5, 0xe8, 0xbc, 0xb8, 0x73, 0x4a, 0x26, 0x6f, 0xb0, 0x39, 0xbc, | |||
0x09, 0x1b, 0x82, 0x04, 0xd2, 0x95, 0xdf, 0x0b, 0xf7, 0x2e, 0x9d, 0x20, 0x44, 0x79, 0xaa, 0xe6, | |||
0x55, 0x7e, 0x9e, 0x1a, 0xb0, 0x01, 0xd5, 0x79, 0x6a, 0xfe, 0x40, 0x8e, 0x96, 0xb0, 0x09, 0xc6, | |||
0x8c, 0x9e, 0xe7, 0xcb, 0xbe, 0xfb, 0xcc, 0xee, 0x39, 0x1d, 0xb4, 0x4c, 0xbf, 0x98, 0xef, 0xe6, | |||
0xc8, 0x3b, 0x24, 0x6e, 0x67, 0x4e, 0x0f, 0x41, 0x05, 0xfc, 0x06, 0xdc, 0x9b, 0x05, 0x4d, 0x95, | |||
0x1a, 0x54, 0xa4, 0x71, 0x8c, 0x60, 0xcd, 0x8e, 0x40, 0xa1, 0x12, 0xae, 0xc1, 0x5d, 0x2e, 0xa6, | |||
0x3e, 0x98, 0xd9, 0x10, 0x42, 0xd4, 0x6d, 0x1c, 0xf0, 0x03, 0xdf, 0x09, 0x89, 0xc8, 0x76, 0xb4, | |||
0x42, 0xc3, 0xcb, 0xe5, 0x87, 0xa1, 0xe7, 0x13, 0x84, 0xef, 0xff, 0x68, 0x4e, 0x0e, 0xd3, 0x9c, | |||
0x62, 0xcf, 0xa9, 0xd2, 0xce, 0x51, 0x02, 0x57, 0x61, 0x6d, 0x5a, 0xca, 0x73, 0x0c, 0x69, 0xec, | |||
0xe9, 0x7e, 0xa2, 0x8b, 0x3e, 0x03, 0xe9, 0xf8, 0x35, 0xa8, 0xa8, 0xf2, 0x16, 0xaf, 0x2e, 0x74, | |||
0x56, 0x72, 0xfb, 0x9f, 0x3a, 0x6c, 0x48, 0xfb, 0x7e, 0xd7, 0x76, 0xed, 0x2e, 0xf1, 0x0f, 0x89, | |||
0xff, 0xcc, 0x69, 0x13, 0xfc, 0x2d, 0xf1, 0x27, 0x03, 0xae, 0xc8, 0x9d, 0x5b, 0x7e, 0x2a, 0xaa, | |||
0x6e, 0xcc, 0xd1, 0x88, 0xca, 0xd5, 0x82, 0xfc, 0x13, 0x12, 0x8a, 0x1b, 0xa8, 0x82, 0x53, 0x6e, | |||
0x15, 0xd5, 0xea, 0x3c, 0x95, 0xb0, 0xb1, 0x17, 0x1d, 0x24, 0x78, 0xf2, 0xa9, 0x66, 0x94, 0xb3, | |||
0x96, 0x6a, 0x66, 0xea, 0x58, 0xf4, 0x36, 0x64, 0xb8, 0xbb, 0x54, 0x03, 0x4a, 0x4a, 0xa8, 0x06, | |||
0xa6, 0xfa, 0xf0, 0x1e, 0xe4, 0x22, 0x9f, 0xe2, 0xbb, 0xca, 0x42, 0x6a, 0xc2, 0x54, 0x5f, 0x9b, | |||
0xaf, 0xe4, 0x66, 0xb6, 0x7f, 0xab, 0xc3, 0x5a, 0xd4, 0x7a, 0xa6, 0x7c, 0xdd, 0x8c, 0xd2, 0x80, | |||
0xae, 0x3c, 0x70, 0x69, 0x77, 0x20, 0xb8, 0x3c, 0xa7, 0x88, 0x55, 0xe7, 0x09, 0x1b, 0xda, 0x43, | |||
0x0d, 0x1f, 0x40, 0x51, 0xe5, 0x70, 0xb4, 0xd5, 0xb9, 0xcf, 0x56, 0xd1, 0x56, 0xaf, 0x79, 0xc1, | |||
0xd9, 0x8b, 0x4a, 0xb8, 0xea, 0xf9, 0x39, 0x2f, 0x26, 0x91, 0xe3, 0xe6, 0x3e, 0x1b, 0x7c, 0x07, | |||
0xf2, 0x93, 0x1b, 0x30, 0x56, 0x9c, 0x33, 0x7d, 0x7f, 0xaf, 0x6e, 0x5e, 0xa3, 0xe5, 0x96, 0x5a, | |||
0x5f, 0x7b, 0xfe, 0xc2, 0x48, 0x7c, 0xfa, 0xc2, 0x48, 0x7c, 0xf6, 0xc2, 0xd0, 0x7e, 0x7c, 0x65, | |||
0x68, 0xbf, 0xba, 0x32, 0xb4, 0x3f, 0x5e, 0x19, 0xda, 0xf3, 0x2b, 0x43, 0xfb, 0xcb, 0x95, 0xa1, | |||
0xfd, 0xfd, 0xca, 0x48, 0x7c, 0x76, 0x65, 0x68, 0x3f, 0x79, 0x69, 0x24, 0x9e, 0xbf, 0x34, 0x12, | |||
0x9f, 0xbe, 0x34, 0x12, 0x27, 0x19, 0x56, 0xc1, 0x1f, 0xfd, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x29, | |||
0x5b, 0x99, 0x9e, 0x85, 0x1d, 0x00, 0x00, | |||
} | |||
func (x ResultCode) String() string { | |||
@@ -2354,6 +2371,9 @@ func (this *BranchSession) Equal(that interface{}) bool { | |||
if !bytes.Equal(this.ApplicationData, that1.ApplicationData) { | |||
return false | |||
} | |||
if this.AsyncCommit != that1.AsyncCommit { | |||
return false | |||
} | |||
return true | |||
} | |||
func (this *RowLock) Equal(that interface{}) bool { | |||
@@ -2498,6 +2518,9 @@ func (this *BranchRegisterRequest) Equal(that interface{}) bool { | |||
if !bytes.Equal(this.ApplicationData, that1.ApplicationData) { | |||
return false | |||
} | |||
if this.AsyncCommit != that1.AsyncCommit { | |||
return false | |||
} | |||
return true | |||
} | |||
func (this *BranchRegisterResponse) Equal(that interface{}) bool { | |||
@@ -3106,7 +3129,7 @@ func (this *BranchSession) GoString() string { | |||
if this == nil { | |||
return "nil" | |||
} | |||
s := make([]string, 0, 13) | |||
s := make([]string, 0, 14) | |||
s = append(s, "&apis.BranchSession{") | |||
s = append(s, "Addressing: "+fmt.Sprintf("%#v", this.Addressing)+",\n") | |||
s = append(s, "XID: "+fmt.Sprintf("%#v", this.XID)+",\n") | |||
@@ -3117,6 +3140,7 @@ func (this *BranchSession) GoString() string { | |||
s = append(s, "Type: "+fmt.Sprintf("%#v", this.Type)+",\n") | |||
s = append(s, "Status: "+fmt.Sprintf("%#v", this.Status)+",\n") | |||
s = append(s, "ApplicationData: "+fmt.Sprintf("%#v", this.ApplicationData)+",\n") | |||
s = append(s, "AsyncCommit: "+fmt.Sprintf("%#v", this.AsyncCommit)+",\n") | |||
s = append(s, "}") | |||
return strings.Join(s, "") | |||
} | |||
@@ -3165,7 +3189,7 @@ func (this *BranchRegisterRequest) GoString() string { | |||
if this == nil { | |||
return "nil" | |||
} | |||
s := make([]string, 0, 10) | |||
s := make([]string, 0, 11) | |||
s = append(s, "&apis.BranchRegisterRequest{") | |||
s = append(s, "Addressing: "+fmt.Sprintf("%#v", this.Addressing)+",\n") | |||
s = append(s, "XID: "+fmt.Sprintf("%#v", this.XID)+",\n") | |||
@@ -3173,6 +3197,7 @@ func (this *BranchRegisterRequest) GoString() string { | |||
s = append(s, "LockKey: "+fmt.Sprintf("%#v", this.LockKey)+",\n") | |||
s = append(s, "BranchType: "+fmt.Sprintf("%#v", this.BranchType)+",\n") | |||
s = append(s, "ApplicationData: "+fmt.Sprintf("%#v", this.ApplicationData)+",\n") | |||
s = append(s, "AsyncCommit: "+fmt.Sprintf("%#v", this.AsyncCommit)+",\n") | |||
s = append(s, "}") | |||
return strings.Join(s, "") | |||
} | |||
@@ -3511,6 +3536,16 @@ func (m *BranchSession) MarshalToSizedBuffer(dAtA []byte) (int, error) { | |||
_ = i | |||
var l int | |||
_ = l | |||
if m.AsyncCommit { | |||
i-- | |||
if m.AsyncCommit { | |||
dAtA[i] = 1 | |||
} else { | |||
dAtA[i] = 0 | |||
} | |||
i-- | |||
dAtA[i] = 0x50 | |||
} | |||
if len(m.ApplicationData) > 0 { | |||
i -= len(m.ApplicationData) | |||
copy(dAtA[i:], m.ApplicationData) | |||
@@ -3746,6 +3781,16 @@ func (m *BranchRegisterRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { | |||
_ = i | |||
var l int | |||
_ = l | |||
if m.AsyncCommit { | |||
i-- | |||
if m.AsyncCommit { | |||
dAtA[i] = 1 | |||
} else { | |||
dAtA[i] = 0 | |||
} | |||
i-- | |||
dAtA[i] = 0x38 | |||
} | |||
if len(m.ApplicationData) > 0 { | |||
i -= len(m.ApplicationData) | |||
copy(dAtA[i:], m.ApplicationData) | |||
@@ -4703,6 +4748,9 @@ func (m *BranchSession) Size() (n int) { | |||
if l > 0 { | |||
n += 1 + l + sovSeata(uint64(l)) | |||
} | |||
if m.AsyncCommit { | |||
n += 2 | |||
} | |||
return n | |||
} | |||
@@ -4813,6 +4861,9 @@ func (m *BranchRegisterRequest) Size() (n int) { | |||
if l > 0 { | |||
n += 1 + l + sovSeata(uint64(l)) | |||
} | |||
if m.AsyncCommit { | |||
n += 2 | |||
} | |||
return n | |||
} | |||
@@ -5252,6 +5303,7 @@ func (this *BranchSession) String() string { | |||
`Type:` + fmt.Sprintf("%v", this.Type) + `,`, | |||
`Status:` + fmt.Sprintf("%v", this.Status) + `,`, | |||
`ApplicationData:` + fmt.Sprintf("%v", this.ApplicationData) + `,`, | |||
`AsyncCommit:` + fmt.Sprintf("%v", this.AsyncCommit) + `,`, | |||
`}`, | |||
}, "") | |||
return s | |||
@@ -5308,6 +5360,7 @@ func (this *BranchRegisterRequest) String() string { | |||
`LockKey:` + fmt.Sprintf("%v", this.LockKey) + `,`, | |||
`BranchType:` + fmt.Sprintf("%v", this.BranchType) + `,`, | |||
`ApplicationData:` + fmt.Sprintf("%v", this.ApplicationData) + `,`, | |||
`AsyncCommit:` + fmt.Sprintf("%v", this.AsyncCommit) + `,`, | |||
`}`, | |||
}, "") | |||
return s | |||
@@ -6060,6 +6113,26 @@ func (m *BranchSession) Unmarshal(dAtA []byte) error { | |||
m.ApplicationData = []byte{} | |||
} | |||
iNdEx = postIndex | |||
case 10: | |||
if wireType != 0 { | |||
return fmt.Errorf("proto: wrong wireType = %d for field AsyncCommit", wireType) | |||
} | |||
var v int | |||
for shift := uint(0); ; shift += 7 { | |||
if shift >= 64 { | |||
return ErrIntOverflowSeata | |||
} | |||
if iNdEx >= l { | |||
return io.ErrUnexpectedEOF | |||
} | |||
b := dAtA[iNdEx] | |||
iNdEx++ | |||
v |= int(b&0x7F) << shift | |||
if b < 0x80 { | |||
break | |||
} | |||
} | |||
m.AsyncCommit = bool(v != 0) | |||
default: | |||
iNdEx = preIndex | |||
skippy, err := skipSeata(dAtA[iNdEx:]) | |||
@@ -6824,6 +6897,26 @@ func (m *BranchRegisterRequest) Unmarshal(dAtA []byte) error { | |||
m.ApplicationData = []byte{} | |||
} | |||
iNdEx = postIndex | |||
case 7: | |||
if wireType != 0 { | |||
return fmt.Errorf("proto: wrong wireType = %d for field AsyncCommit", wireType) | |||
} | |||
var v int | |||
for shift := uint(0); ; shift += 7 { | |||
if shift >= 64 { | |||
return ErrIntOverflowSeata | |||
} | |||
if iNdEx >= l { | |||
return io.ErrUnexpectedEOF | |||
} | |||
b := dAtA[iNdEx] | |||
iNdEx++ | |||
v |= int(b&0x7F) << shift | |||
if b < 0x80 { | |||
break | |||
} | |||
} | |||
m.AsyncCommit = bool(v != 0) | |||
default: | |||
iNdEx = preIndex | |||
skippy, err := skipSeata(dAtA[iNdEx:]) | |||
@@ -108,7 +108,7 @@ message GlobalSession { | |||
// Retrying rollback (since timeout) after a recoverable failure. | |||
TimeoutRollbackRetrying = 7; | |||
// All branches can be async committed. The committing is NOT done yet, but it can be seen as | |||
// All branches can be async committed. The committing is NOT done yet, but it can be seen as | |||
// committed for TM/RM rpc_client. | |||
AsyncCommitting = 8; | |||
@@ -215,6 +215,7 @@ message BranchSession { | |||
BranchType Type = 7 [(gogoproto.moretags) = "xorm:\"branch_type\""]; | |||
BranchStatus Status = 8 [(gogoproto.moretags) = "xorm:\"status\""]; | |||
bytes ApplicationData = 9 [(gogoproto.moretags) = "xorm:\"application_data\""]; | |||
bool AsyncCommit = 10 [(gogoproto.moretags) = "xorm:\"async_commit\""]; | |||
} | |||
message RowLock { | |||
@@ -227,14 +228,14 @@ message RowLock { | |||
string RowKey = 7 [(gogoproto.moretags) = "xorm:\"row_key\""]; | |||
} | |||
// GlobalBeginRequest represents a global transaction begin | |||
// GlobalBeginRequest represents a global transaction begin | |||
message GlobalBeginRequest { | |||
string Addressing = 1; | |||
int32 Timeout = 2; | |||
string TransactionName = 3; | |||
} | |||
// GlobalBeginResponse represents a response to GlobalBeginRequest | |||
// GlobalBeginResponse represents a response to GlobalBeginRequest | |||
message GlobalBeginResponse { | |||
ResultCode ResultCode = 1; | |||
ExceptionCode ExceptionCode = 2; | |||
@@ -242,7 +243,7 @@ message GlobalBeginResponse { | |||
string XID = 4; | |||
} | |||
// BranchRegisterRequest represents a branch transaction join in the global transaction | |||
// BranchRegisterRequest represents a branch transaction join in the global transaction | |||
message BranchRegisterRequest { | |||
string Addressing = 1; | |||
string XID = 2; | |||
@@ -250,9 +251,10 @@ message BranchRegisterRequest { | |||
string LockKey = 4; | |||
BranchSession.BranchType BranchType = 5; | |||
bytes ApplicationData = 6; | |||
bool AsyncCommit = 7; | |||
} | |||
// BranchRegisterResponse represents a response to BranchRegisterRequest | |||
// BranchRegisterResponse represents a response to BranchRegisterRequest | |||
message BranchRegisterResponse { | |||
ResultCode ResultCode = 1; | |||
ExceptionCode ExceptionCode = 2; | |||
@@ -260,7 +262,7 @@ message BranchRegisterResponse { | |||
int64 BranchID = 4; | |||
} | |||
// BranchReportRequest represents a request to report branch transaction execution status | |||
// BranchReportRequest represents a request to report branch transaction execution status | |||
message BranchReportRequest { | |||
string XID = 1; | |||
int64 BranchID = 2; | |||
@@ -270,7 +272,7 @@ message BranchReportRequest { | |||
bytes ApplicationData = 6; | |||
} | |||
// BranchReportResponse represents a response to BranchReportRequest | |||
// BranchReportResponse represents a response to BranchReportRequest | |||
message BranchReportResponse { | |||
ResultCode ResultCode = 1; | |||
ExceptionCode ExceptionCode = 2; | |||
@@ -293,12 +295,12 @@ message GlobalLockQueryResponse { | |||
bool Lockable = 4; | |||
} | |||
// GlobalStatusRequest represents a request to query the global transaction status | |||
// GlobalStatusRequest represents a request to query the global transaction status | |||
message GlobalStatusRequest { | |||
string XID = 1; | |||
} | |||
// GlobalStatusResponse represents a response to GlobalStatusRequest | |||
// GlobalStatusResponse represents a response to GlobalStatusRequest | |||
message GlobalStatusResponse { | |||
ResultCode ResultCode = 1; | |||
ExceptionCode ExceptionCode = 2; | |||
@@ -306,12 +308,12 @@ message GlobalStatusResponse { | |||
GlobalSession.GlobalStatus GlobalStatus = 4; | |||
} | |||
// GlobalCommitRequest represents a request to commit global transaction | |||
// GlobalCommitRequest represents a request to commit global transaction | |||
message GlobalCommitRequest { | |||
string XID = 1; | |||
} | |||
// GlobalCommitResponse represents a response to GlobalCommitRequest | |||
// GlobalCommitResponse represents a response to GlobalCommitRequest | |||
message GlobalCommitResponse { | |||
ResultCode ResultCode = 1; | |||
ExceptionCode ExceptionCode = 2; | |||
@@ -319,12 +321,12 @@ message GlobalCommitResponse { | |||
GlobalSession.GlobalStatus GlobalStatus = 4; | |||
} | |||
// GlobalRollbackRequest represents a request to rollback global transaction | |||
// GlobalRollbackRequest represents a request to rollback global transaction | |||
message GlobalRollbackRequest { | |||
string XID = 1; | |||
} | |||
// GlobalRollbackResponse represents a response to GlobalRollbackRequest | |||
// GlobalRollbackResponse represents a response to GlobalRollbackRequest | |||
message GlobalRollbackResponse { | |||
ResultCode ResultCode = 1; | |||
ExceptionCode ExceptionCode = 2; | |||
@@ -332,13 +334,13 @@ message GlobalRollbackResponse { | |||
GlobalSession.GlobalStatus GlobalStatus = 4; | |||
} | |||
// GlobalReportRequest represents a request to report global transaction execution status | |||
// GlobalReportRequest represents a request to report global transaction execution status | |||
message GlobalReportRequest { | |||
string XID = 1; | |||
GlobalSession.GlobalStatus GlobalStatus = 2; | |||
} | |||
// GlobalReportResponse represents a response to GlobalReportRequest | |||
// GlobalReportResponse represents a response to GlobalReportRequest | |||
message GlobalReportResponse { | |||
ResultCode ResultCode = 1; | |||
ExceptionCode ExceptionCode = 2; | |||
@@ -346,7 +348,7 @@ message GlobalReportResponse { | |||
GlobalSession.GlobalStatus GlobalStatus = 4; | |||
} | |||
// BranchCommitRequest represents a request to commit branch transaction | |||
// BranchCommitRequest represents a request to commit branch transaction | |||
message BranchCommitRequest { | |||
string XID = 1; | |||
int64 BranchID = 2; | |||
@@ -356,7 +358,7 @@ message BranchCommitRequest { | |||
bytes ApplicationData = 6; | |||
} | |||
// BranchCommitResponse represents a response to BranchCommitRequest | |||
// BranchCommitResponse represents a response to BranchCommitRequest | |||
message BranchCommitResponse { | |||
ResultCode ResultCode = 1; | |||
ExceptionCode ExceptionCode = 2; | |||
@@ -366,7 +368,7 @@ message BranchCommitResponse { | |||
BranchSession.BranchStatus BranchStatus = 6; | |||
} | |||
// BranchCommitRequest represents a request to rollback branch transaction | |||
// BranchCommitRequest represents a request to rollback branch transaction | |||
message BranchRollbackRequest { | |||
string XID = 1; | |||
int64 BranchID = 2; | |||
@@ -376,7 +378,7 @@ message BranchRollbackRequest { | |||
bytes ApplicationData = 6; | |||
} | |||
// BranchRollbackResponse represents a response to BranchRollbackRequest | |||
// BranchRollbackResponse represents a response to BranchRollbackRequest | |||
message BranchRollbackResponse { | |||
ResultCode ResultCode = 1; | |||
ExceptionCode ExceptionCode = 2; | |||
@@ -7,4 +7,5 @@ type BusinessActionContext struct { | |||
BranchID int64 | |||
ActionName string | |||
ActionContext map[string]interface{} | |||
AsyncCommit bool | |||
} |
@@ -157,7 +157,7 @@ func (manager *ResourceManager) branchCommunicate() { | |||
} | |||
func (manager *ResourceManager) BranchRegister(ctx context.Context, xid string, resourceID string, | |||
branchType apis.BranchSession_BranchType, applicationData []byte, lockKeys string) (int64, error) { | |||
branchType apis.BranchSession_BranchType, applicationData []byte, lockKeys string, asyncCommit bool) (int64, error) { | |||
request := &apis.BranchRegisterRequest{ | |||
Addressing: manager.addressing, | |||
XID: xid, | |||
@@ -165,6 +165,7 @@ func (manager *ResourceManager) BranchRegister(ctx context.Context, xid string, | |||
LockKey: lockKeys, | |||
BranchType: branchType, | |||
ApplicationData: applicationData, | |||
AsyncCommit: asyncCommit, | |||
} | |||
resp, err := manager.rpcClient.BranchRegister(ctx, request) | |||
if err != nil { | |||
@@ -36,7 +36,7 @@ var ( | |||
) | |||
type TccService interface { | |||
Try(ctx *ctx.BusinessActionContext) (bool, error) | |||
Try(ctx *ctx.BusinessActionContext, async bool) (bool, error) | |||
Confirm(ctx *ctx.BusinessActionContext) bool | |||
Cancel(ctx *ctx.BusinessActionContext) bool | |||
} | |||
@@ -162,7 +162,15 @@ func doTccActionLogStore(ctx *ctx.BusinessActionContext, resource *TCCResource) | |||
return 0, err | |||
} | |||
branchID, err := rm.GetResourceManager().BranchRegister(ctx.RootContext, ctx.XID, resource.GetResourceID(), resource.GetBranchType(), applicationData, "") | |||
branchID, err := rm.GetResourceManager().BranchRegister( | |||
ctx.RootContext, | |||
ctx.XID, | |||
resource.GetResourceID(), | |||
resource.GetBranchType(), | |||
applicationData, | |||
"", | |||
ctx.AsyncCommit, | |||
) | |||
if err != nil { | |||
log.Errorf("TCC branch Register error, xid: %s", ctx.XID) | |||
return 0, errors.WithStack(err) | |||
@@ -31,7 +31,7 @@ func (gt *GlobalTransaction) GetBranch(branchID int64) *apis.BranchSession { | |||
func (gt *GlobalTransaction) CanBeCommittedAsync() bool { | |||
for branchSession := range gt.BranchSessions { | |||
if branchSession.Type == apis.TCC { | |||
if !branchSession.AsyncCommit { | |||
return false | |||
} | |||
} | |||
@@ -709,11 +709,11 @@ func (tc *TransactionCoordinator) BranchCommunicate(stream apis.ResourceManagerS | |||
func (tc *TransactionCoordinator) BranchRegister(ctx context.Context, request *apis.BranchRegisterRequest) (*apis.BranchRegisterResponse, error) { | |||
gt := tc.holder.FindGlobalTransaction(request.XID) | |||
if gt == nil { | |||
log.Errorf("could not found global transaction xid = %s", request.XID) | |||
log.Errorf("could not find global transaction xid = %s", request.XID) | |||
return &apis.BranchRegisterResponse{ | |||
ResultCode: apis.ResultCodeFailed, | |||
ExceptionCode: apis.GlobalTransactionNotExist, | |||
Message: fmt.Sprintf("could not found global transaction xid = %s", request.XID), | |||
Message: fmt.Sprintf("could not find global transaction xid = %s", request.XID), | |||
}, nil | |||
} | |||
@@ -722,7 +722,7 @@ func (tc *TransactionCoordinator) BranchRegister(ctx context.Context, request *a | |||
return &apis.BranchRegisterResponse{ | |||
ResultCode: apis.ResultCodeFailed, | |||
ExceptionCode: apis.FailedLockGlobalTransaction, | |||
Message: fmt.Sprintf("could not found global transaction xid = %s", request.XID), | |||
Message: fmt.Sprintf("could not find global transaction xid = %s", request.XID), | |||
}, nil | |||
} | |||
if result { | |||
@@ -743,6 +743,13 @@ func (tc *TransactionCoordinator) BranchRegister(ctx context.Context, request *a | |||
}, nil | |||
} | |||
var asyncCommit bool | |||
if request.BranchType == apis.AT { | |||
asyncCommit = true | |||
} else { | |||
asyncCommit = request.AsyncCommit | |||
} | |||
bs := &apis.BranchSession{ | |||
Addressing: request.Addressing, | |||
XID: request.XID, | |||
@@ -753,6 +760,7 @@ func (tc *TransactionCoordinator) BranchRegister(ctx context.Context, request *a | |||
Type: request.BranchType, | |||
Status: apis.Registered, | |||
ApplicationData: request.ApplicationData, | |||
AsyncCommit: asyncCommit, | |||
} | |||
if bs.Type == apis.AT { | |||
@@ -793,11 +801,11 @@ func (tc *TransactionCoordinator) BranchRegister(ctx context.Context, request *a | |||
func (tc *TransactionCoordinator) BranchReport(ctx context.Context, request *apis.BranchReportRequest) (*apis.BranchReportResponse, error) { | |||
gt := tc.holder.FindGlobalTransaction(request.XID) | |||
if gt == nil { | |||
log.Errorf("could not found global transaction xid = %s", request.XID) | |||
log.Errorf("could not find global transaction xid = %s", request.XID) | |||
return &apis.BranchReportResponse{ | |||
ResultCode: apis.ResultCodeFailed, | |||
ExceptionCode: apis.GlobalTransactionNotExist, | |||
Message: fmt.Sprintf("could not found global transaction xid = %s", request.XID), | |||
Message: fmt.Sprintf("could not find global transaction xid = %s", request.XID), | |||
}, nil | |||
} | |||
@@ -806,7 +814,7 @@ func (tc *TransactionCoordinator) BranchReport(ctx context.Context, request *api | |||
return &apis.BranchReportResponse{ | |||
ResultCode: apis.ResultCodeFailed, | |||
ExceptionCode: apis.BranchTransactionNotExist, | |||
Message: fmt.Sprintf("could not found branch session xid = %s branchID = %d", gt.XID, request.BranchID), | |||
Message: fmt.Sprintf("could not find branch session xid = %s branchID = %d", gt.XID, request.BranchID), | |||
}, nil | |||
} | |||
@@ -121,7 +121,7 @@ func (driver *driver) UpdateGlobalSessionStatus(session *apis.GlobalSession, sta | |||
gt.Status = status | |||
return nil | |||
} | |||
return fmt.Errorf("could not found global transaction xid = %s", session.XID) | |||
return fmt.Errorf("could not find global transaction xid = %s", session.XID) | |||
} | |||
// Inactive global session. | |||
@@ -132,7 +132,7 @@ func (driver *driver) InactiveGlobalSession(session *apis.GlobalSession) error { | |||
gt.Active = false | |||
return nil | |||
} | |||
return fmt.Errorf("could not found global transaction xid = %s", session.XID) | |||
return fmt.Errorf("could not find global transaction xid = %s", session.XID) | |||
} | |||
// Remove global session. | |||
@@ -149,7 +149,7 @@ func (driver *driver) AddBranchSession(globalSession *apis.GlobalSession, sessio | |||
gt.BranchSessions[session] = true | |||
return nil | |||
} | |||
return fmt.Errorf("could not found global transaction xid = %s", session.XID) | |||
return fmt.Errorf("could not find global transaction xid = %s", session.XID) | |||
} | |||
// Find branch session. | |||
@@ -195,7 +195,7 @@ func (driver *driver) RemoveBranchSession(globalSession *apis.GlobalSession, ses | |||
delete(gt.BranchSessions, session) | |||
return nil | |||
} | |||
return fmt.Errorf("could not found global transaction xid = %s", session.XID) | |||
return fmt.Errorf("could not find global transaction xid = %s", session.XID) | |||
} | |||
// AcquireLock Acquire lock boolean. | |||
@@ -31,13 +31,13 @@ const ( | |||
DeleteGlobalTransaction = "delete from %s where xid = ?" | |||
InsertBranchTransaction = `insert into %s (addressing, xid, branch_id, transaction_id, resource_id, lock_key, branch_type, | |||
status, application_data, gmt_create, gmt_modified) values(?, ?, ?, ?, ?, ?, ?, ?, ?, now(), now())` | |||
status, application_data, async_commit, gmt_create, gmt_modified) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, now(), now())` | |||
QueryBranchTransaction = `select addressing, xid, branch_id, transaction_id, resource_id, lock_key, branch_type, status, | |||
application_data, gmt_create, gmt_modified from %s where %s order by gmt_create asc` | |||
application_data, async_commit, gmt_create, gmt_modified from %s where %s order by gmt_create asc` | |||
QueryBranchTransactionByXid = `select addressing, xid, branch_id, transaction_id, resource_id, lock_key, branch_type, status, | |||
application_data, gmt_create, gmt_modified from %s where xid = ? order by gmt_create asc` | |||
application_data, async_commit, gmt_create, gmt_modified from %s where xid = ? order by gmt_create asc` | |||
UpdateBranchTransaction = "update %s set status = ?, gmt_modified = now() where branch_id = ?" | |||
@@ -49,22 +49,58 @@ const ( | |||
QueryRowKey = `select xid, transaction_id, branch_id, resource_id, table_name, pk, row_key, gmt_create, gmt_modified | |||
from %s where %s order by gmt_create asc` | |||
CreateGlobalTable = "CREATE TABLE IF NOT EXISTS `%s` (`addressing` varchar(128) NOT NULL, " + | |||
"`xid` varchar(128) NOT NULL, `transaction_id` bigint DEFAULT NULL, " + | |||
"`transaction_name` varchar(128) DEFAULT NULL, `timeout` int DEFAULT NULL, `begin_time` bigint DEFAULT NULL, " + | |||
"`status` tinyint NOT NULL, `active` bit(1) NOT NULL, `gmt_create` datetime DEFAULT NULL, `gmt_modified` datetime DEFAULT NULL, " + | |||
"PRIMARY KEY (`xid`), KEY `idx_gmt_modified_status` (`gmt_modified`,`status`), KEY `idx_transaction_id` (`transaction_id`)) " + | |||
"ENGINE = InnoDB DEFAULT CHARSET = utf8;" | |||
CreateBranchTable = "CREATE TABLE IF NOT EXISTS `%s` (`addressing` varchar(128) NOT NULL, `xid` varchar(128) NOT NULL, " + | |||
"`branch_id` bigint NOT NULL, `transaction_id` bigint DEFAULT NULL, `resource_id` varchar(256) DEFAULT NULL, `lock_key` VARCHAR(1000), " + | |||
"`branch_type` varchar(8) DEFAULT NULL, `status` tinyint DEFAULT NULL, `application_data` varchar(2000) DEFAULT NULL, " + | |||
"`gmt_create` datetime(6) DEFAULT NULL, `gmt_modified` datetime(6) DEFAULT NULL, PRIMARY KEY (`branch_id`), KEY `idx_xid` (`xid`)) " + | |||
"ENGINE = InnoDB DEFAULT CHARSET = utf8;" | |||
CreateLockTable = "CREATE TABLE IF NOT EXISTS `%s` (`row_key` VARCHAR(256) NOT NULL, `xid` VARCHAR(128) NOT NULL, `transaction_id` BIGINT, " + | |||
"`branch_id` BIGINT NOT NULL, `resource_id` VARCHAR(256), `table_name` VARCHAR(64), `pk` VARCHAR(36), `gmt_create` DATETIME, " + | |||
"`gmt_modified` DATETIME, PRIMARY KEY (`row_key`), KEY `idx_branch_id` (`branch_id`)) ENGINE = InnoDB DEFAULT CHARSET = utf8;" | |||
CreateGlobalTable = ` | |||
CREATE TABLE IF NOT EXISTS %s | |||
( | |||
addressing varchar(128) NOT NULL, | |||
xid varchar(128) NOT NULL, | |||
transaction_id bigint DEFAULT NULL, | |||
transaction_name varchar(128) DEFAULT NULL, | |||
timeout int DEFAULT NULL, | |||
begin_time bigint DEFAULT NULL, | |||
status tinyint NOT NULL, | |||
active bit(1) NOT NULL, | |||
gmt_create datetime DEFAULT NULL, | |||
gmt_modified datetime DEFAULT NULL, | |||
PRIMARY KEY (xid), | |||
KEY idx_gmt_modified_status (gmt_modified, status), | |||
KEY idx_transaction_id (transaction_id) | |||
) ENGINE = InnoDB DEFAULT CHARSET = utf8;` | |||
CreateBranchTable = ` | |||
CREATE TABLE IF NOT EXISTS %s | |||
( | |||
addressing varchar(128) NOT NULL, | |||
xid varchar(128) NOT NULL, | |||
branch_id bigint NOT NULL, | |||
transaction_id bigint DEFAULT NULL, | |||
resource_id varchar(256) DEFAULT NULL, | |||
lock_key VARCHAR(1000), | |||
branch_type varchar(8) DEFAULT NULL, | |||
status tinyint DEFAULT NULL, | |||
application_data varchar(2000) DEFAULT NULL, | |||
async_commit tinyint NOT NULL DEFAULT 0, | |||
gmt_create datetime(6) DEFAULT NULL, | |||
gmt_modified datetime(6) DEFAULT NULL, | |||
PRIMARY KEY (branch_id), | |||
KEY idx_xid (xid) | |||
) ENGINE = InnoDB DEFAULT CHARSET = utf8;` | |||
CreateLockTable = ` | |||
CREATE TABLE IF NOT EXISTS %s | |||
( | |||
row_key VARCHAR(256) NOT NULL, | |||
xid VARCHAR(128) NOT NULL, | |||
transaction_id BIGINT, | |||
branch_id BIGINT NOT NULL, | |||
resource_id VARCHAR(256), | |||
table_name VARCHAR(64), | |||
pk VARCHAR(36), | |||
gmt_create DATETIME, | |||
gmt_modified DATETIME, | |||
PRIMARY KEY (row_key), | |||
KEY idx_branch_id (branch_id) | |||
) ENGINE = InnoDB DEFAULT CHARSET = utf8;` | |||
) | |||
func init() { | |||
@@ -200,7 +236,7 @@ func FromParameters(parameters map[string]interface{}) (storage.Driver, error) { | |||
return New(driverParameters) | |||
} | |||
// New constructs a new Driver | |||
// New constructs a new Driver. | |||
func New(params DriverParameters) (storage.Driver, error) { | |||
if params.DSN == "" { | |||
return nil, fmt.Errorf("the dsn parameter should not be empty") | |||
@@ -235,7 +271,7 @@ func New(params DriverParameters) (storage.Driver, error) { | |||
}, nil | |||
} | |||
// Add global session. | |||
// AddGlobalSession adds a global session. | |||
func (driver *driver) AddGlobalSession(session *apis.GlobalSession) error { | |||
_, err := driver.engine.Exec(fmt.Sprintf(InsertGlobalTransaction, driver.globalTable), | |||
session.Addressing, session.XID, session.TransactionID, session.TransactionName, | |||
@@ -243,7 +279,7 @@ func (driver *driver) AddGlobalSession(session *apis.GlobalSession) error { | |||
return err | |||
} | |||
// Find global session. | |||
// FindGlobalSession finds a global session by xid. | |||
func (driver *driver) FindGlobalSession(xid string) *apis.GlobalSession { | |||
var globalTransaction apis.GlobalSession | |||
result, err := driver.engine.SQL(fmt.Sprintf(QueryGlobalTransactionByXid, driver.globalTable), xid). | |||
@@ -257,7 +293,7 @@ func (driver *driver) FindGlobalSession(xid string) *apis.GlobalSession { | |||
return nil | |||
} | |||
// Find global sessions list. | |||
// FindGlobalSessions finds global sessions list by statuses list | |||
func (driver *driver) FindGlobalSessions(statuses []apis.GlobalSession_GlobalStatus) []*apis.GlobalSession { | |||
var globalSessions []*apis.GlobalSession | |||
err := driver.engine.Table(driver.globalTable). | |||
@@ -272,9 +308,8 @@ func (driver *driver) FindGlobalSessions(statuses []apis.GlobalSession_GlobalSta | |||
return globalSessions | |||
} | |||
// Find global sessions list with addressing identities | |||
func (driver *driver) FindGlobalSessionsWithAddressingIdentities(statuses []apis.GlobalSession_GlobalStatus, | |||
addressingIdentities []string) []*apis.GlobalSession { | |||
// FindGlobalSessionsWithAddressingIdentities finds global sessions list by addressing identities and statuses list | |||
func (driver *driver) FindGlobalSessionsWithAddressingIdentities(statuses []apis.GlobalSession_GlobalStatus, addressingIdentities []string) []*apis.GlobalSession { | |||
var globalSessions []*apis.GlobalSession | |||
err := driver.engine.Table(driver.globalTable). | |||
Where(builder. | |||
@@ -290,7 +325,7 @@ func (driver *driver) FindGlobalSessionsWithAddressingIdentities(statuses []apis | |||
return globalSessions | |||
} | |||
// All sessions collection. | |||
// AllSessions returns all sessions collection. | |||
func (driver *driver) AllSessions() []*apis.GlobalSession { | |||
var globalSessions []*apis.GlobalSession | |||
err := driver.engine.Table(driver.globalTable). | |||
@@ -304,33 +339,33 @@ func (driver *driver) AllSessions() []*apis.GlobalSession { | |||
return globalSessions | |||
} | |||
// Update global session status. | |||
// UpdateGlobalSessionStatus updates status of global session. | |||
func (driver *driver) UpdateGlobalSessionStatus(session *apis.GlobalSession, status apis.GlobalSession_GlobalStatus) error { | |||
_, err := driver.engine.Exec(fmt.Sprintf(UpdateGlobalTransaction, driver.globalTable), status, session.XID) | |||
return err | |||
} | |||
// Inactive global session. | |||
// InactiveGlobalSession inactivates a global session. | |||
func (driver *driver) InactiveGlobalSession(session *apis.GlobalSession) error { | |||
_, err := driver.engine.Exec(fmt.Sprintf(InactiveGlobalTransaction, driver.globalTable), session.XID) | |||
return err | |||
} | |||
// Remove global session. | |||
// RemoveGlobalSession removes a global session. | |||
func (driver *driver) RemoveGlobalSession(session *apis.GlobalSession) error { | |||
_, err := driver.engine.Exec(fmt.Sprintf(DeleteGlobalTransaction, driver.globalTable), session.XID) | |||
return err | |||
} | |||
// Add branch session. | |||
// AddBranchSession adds a branch session. | |||
func (driver *driver) AddBranchSession(globalSession *apis.GlobalSession, session *apis.BranchSession) error { | |||
_, err := driver.engine.Exec(fmt.Sprintf(InsertBranchTransaction, driver.branchTable), | |||
session.Addressing, session.XID, session.BranchID, session.TransactionID, session.ResourceID, session.LockKey, | |||
session.Type, session.Status, session.ApplicationData) | |||
session.Type, session.Status, session.ApplicationData, session.AsyncCommit) | |||
return err | |||
} | |||
// Find branch session. | |||
// FindBranchSessions finds branch sessions list by xid. | |||
func (driver *driver) FindBranchSessions(xid string) []*apis.BranchSession { | |||
var branchTransactions []*apis.BranchSession | |||
err := driver.engine.SQL(fmt.Sprintf(QueryBranchTransactionByXid, driver.branchTable), xid).Find(&branchTransactions) | |||
@@ -340,7 +375,7 @@ func (driver *driver) FindBranchSessions(xid string) []*apis.BranchSession { | |||
return branchTransactions | |||
} | |||
// Find branch session. | |||
// FindBatchBranchSessions finds branch sessions list by xids list. | |||
func (driver *driver) FindBatchBranchSessions(xids []string) []*apis.BranchSession { | |||
var ( | |||
branchTransactions []*apis.BranchSession | |||
@@ -358,7 +393,7 @@ func (driver *driver) FindBatchBranchSessions(xids []string) []*apis.BranchSessi | |||
return branchTransactions | |||
} | |||
// Update branch session status. | |||
// UpdateBranchSessionStatus updates status of branch session. | |||
func (driver *driver) UpdateBranchSessionStatus(session *apis.BranchSession, status apis.BranchSession_BranchStatus) error { | |||
_, err := driver.engine.Exec(fmt.Sprintf(UpdateBranchTransaction, driver.branchTable), | |||
status, | |||
@@ -366,14 +401,14 @@ func (driver *driver) UpdateBranchSessionStatus(session *apis.BranchSession, sta | |||
return err | |||
} | |||
// Remove branch session. | |||
// RemoveBranchSession removes branch session. | |||
func (driver *driver) RemoveBranchSession(globalSession *apis.GlobalSession, session *apis.BranchSession) error { | |||
_, err := driver.engine.Exec(fmt.Sprintf(DeleteBranchTransaction, driver.branchTable), | |||
session.BranchID) | |||
return err | |||
} | |||
// AcquireLock Acquire lock boolean. | |||
// AcquireLock acquires row locks. | |||
func (driver *driver) AcquireLock(rowLocks []*apis.RowLock) bool { | |||
locks, rowKeyArgs := distinctByKey(rowLocks) | |||
var existedRowLocks []*apis.RowLock | |||
@@ -439,31 +474,7 @@ func (driver *driver) AcquireLock(rowLocks []*apis.RowLock) bool { | |||
return true | |||
} | |||
func distinctByKey(locks []*apis.RowLock) ([]*apis.RowLock, []interface{}) { | |||
result := make([]*apis.RowLock, 0) | |||
rowKeys := make([]interface{}, 0) | |||
lockMap := make(map[string]byte) | |||
for _, lockDO := range locks { | |||
l := len(lockMap) | |||
lockMap[lockDO.RowKey] = 0 | |||
if len(lockMap) != l { | |||
result = append(result, lockDO) | |||
rowKeys = append(rowKeys, lockDO.RowKey) | |||
} | |||
} | |||
return result, rowKeys | |||
} | |||
func contains(s []string, e string) bool { | |||
for _, a := range s { | |||
if a == e { | |||
return true | |||
} | |||
} | |||
return false | |||
} | |||
// ReleaseLock Unlock boolean. | |||
// ReleaseLock releases locked rows. | |||
func (driver *driver) ReleaseLock(rowLocks []*apis.RowLock) bool { | |||
if rowLocks != nil && len(rowLocks) == 0 { | |||
return true | |||
@@ -485,7 +496,7 @@ func (driver *driver) ReleaseLock(rowLocks []*apis.RowLock) bool { | |||
return true | |||
} | |||
// IsLockable Is lockable boolean. | |||
// IsLockable checks if a global transaction is lockable by xid, resourceID, lockKey. | |||
func (driver *driver) IsLockable(xid string, resourceID string, lockKey string) bool { | |||
locks := storage.CollectRowLocks(lockKey, resourceID, xid) | |||
var existedRowLocks []*apis.RowLock | |||
@@ -507,3 +518,27 @@ func (driver *driver) IsLockable(xid string, resourceID string, lockKey string) | |||
} | |||
return true | |||
} | |||
func distinctByKey(locks []*apis.RowLock) ([]*apis.RowLock, []interface{}) { | |||
result := make([]*apis.RowLock, 0) | |||
rowKeys := make([]interface{}, 0) | |||
lockMap := make(map[string]byte) | |||
for _, lockDO := range locks { | |||
l := len(lockMap) | |||
lockMap[lockDO.RowKey] = 0 | |||
if len(lockMap) != l { | |||
result = append(result, lockDO) | |||
rowKeys = append(rowKeys, lockDO.RowKey) | |||
} | |||
} | |||
return result, rowKeys | |||
} | |||
func contains(s []string, e string) bool { | |||
for _, a := range s { | |||
if a == e { | |||
return true | |||
} | |||
} | |||
return false | |||
} |
@@ -31,13 +31,13 @@ const ( | |||
DeleteGlobalTransaction = "delete from %s where xid = $1" | |||
InsertBranchTransaction = `insert into %s (addressing, xid, branch_id, transaction_id, resource_id, lock_key, branch_type, | |||
status, application_data, gmt_create, gmt_modified) values($1, $2, $3, $4, $5, $6, $7, $8, $9, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)` | |||
status, application_data, async_commit, gmt_create, gmt_modified) values($1, $2, $3, $4, $5, $6, $7, $8, $9, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)` | |||
QueryBranchTransaction = `select addressing, xid, branch_id, transaction_id, resource_id, lock_key, branch_type, status, | |||
application_data, gmt_create, gmt_modified from %s where %s order by gmt_create asc` | |||
application_data, async_commit, gmt_create, gmt_modified from %s where %s order by gmt_create asc` | |||
QueryBranchTransactionByXid = `select addressing, xid, branch_id, transaction_id, resource_id, lock_key, branch_type, status, | |||
application_data, gmt_create, gmt_modified from %s where xid = $1 order by gmt_create asc` | |||
application_data, async_commit, gmt_create, gmt_modified from %s where xid = $1 order by gmt_create asc` | |||
UpdateBranchTransaction = "update %s set status = $1, gmt_modified = CURRENT_TIMESTAMP where branch_id = $2" | |||
@@ -52,17 +52,17 @@ const ( | |||
CreateGlobalTable = ` | |||
CREATE TABLE IF NOT EXISTS %s | |||
( | |||
addressing varchar(128) NOT NULL, | |||
xid varchar(128) NOT NULL, | |||
transaction_id bigint DEFAULT NULL, | |||
transaction_name varchar(128) DEFAULT NULL, | |||
timeout int DEFAULT NULL, | |||
begin_time bigint DEFAULT NULL, | |||
status int NOT NULL, | |||
active bool NOT NULL, | |||
gmt_create timestamp DEFAULT NULL, | |||
gmt_modified timestamp DEFAULT NULL, | |||
PRIMARY KEY (xid) | |||
addressing varchar(128) NOT NULL, | |||
xid varchar(128) NOT NULL, | |||
transaction_id bigint DEFAULT NULL, | |||
transaction_name varchar(128) DEFAULT NULL, | |||
timeout int DEFAULT NULL, | |||
begin_time bigint DEFAULT NULL, | |||
status int NOT NULL, | |||
active bool NOT NULL, | |||
gmt_create timestamp DEFAULT NULL, | |||
gmt_modified timestamp DEFAULT NULL, | |||
PRIMARY KEY (xid) | |||
); | |||
CREATE INDEX IF NOT EXISTS idx_gmt_modified_status ON %s(gmt_modified, status); | |||
CREATE INDEX IF NOT EXISTS idx_transaction_id ON %s(transaction_id);` | |||
@@ -70,18 +70,19 @@ const ( | |||
CreateBranchTable = ` | |||
CREATE TABLE IF NOT EXISTS %s | |||
( | |||
addressing varchar(128) NOT NULL, | |||
xid varchar(128) NOT NULL, | |||
branch_id bigint NOT NULL, | |||
transaction_id bigint DEFAULT NULL, | |||
resource_id varchar(256) DEFAULT NULL, | |||
lock_key VARCHAR(1000), | |||
branch_type varchar(8) DEFAULT NULL, | |||
status int DEFAULT NULL, | |||
application_data varchar(2000) DEFAULT NULL, | |||
gmt_create timestamp DEFAULT NULL, | |||
gmt_modified timestamp DEFAULT NULL, | |||
PRIMARY KEY (branch_id) | |||
addressing varchar(128) NOT NULL, | |||
xid varchar(128) NOT NULL, | |||
branch_id bigint NOT NULL, | |||
transaction_id bigint DEFAULT NULL, | |||
resource_id varchar(256) DEFAULT NULL, | |||
lock_key VARCHAR(1000), | |||
branch_type varchar(8) DEFAULT NULL, | |||
status int DEFAULT NULL, | |||
application_data varchar(2000) DEFAULT NULL, | |||
async_commit tinyint NOT NULL DEFAULT 0, | |||
gmt_create timestamp DEFAULT NULL, | |||
gmt_modified timestamp DEFAULT NULL, | |||
PRIMARY KEY (branch_id) | |||
); | |||
CREATE INDEX IF NOT EXISTS idx_xid ON %s(xid);` | |||
@@ -235,7 +236,7 @@ func FromParameters(parameters map[string]interface{}) (storage.Driver, error) { | |||
return New(driverParameters) | |||
} | |||
// New constructs a new Driver | |||
// New constructs a new Driver. | |||
func New(params DriverParameters) (storage.Driver, error) { | |||
if params.DSN == "" { | |||
return nil, fmt.Errorf("the dsn parameter should not be empty") | |||
@@ -270,7 +271,7 @@ func New(params DriverParameters) (storage.Driver, error) { | |||
}, nil | |||
} | |||
// Add global session. | |||
// AddGlobalSession adds a global session. | |||
func (driver *driver) AddGlobalSession(session *apis.GlobalSession) error { | |||
_, err := driver.engine.Exec(fmt.Sprintf(InsertGlobalTransaction, driver.globalTable), | |||
session.Addressing, session.XID, session.TransactionID, session.TransactionName, | |||
@@ -278,7 +279,7 @@ func (driver *driver) AddGlobalSession(session *apis.GlobalSession) error { | |||
return err | |||
} | |||
// Find global session. | |||
// FindGlobalSession finds a global session by xid. | |||
func (driver *driver) FindGlobalSession(xid string) *apis.GlobalSession { | |||
var globalTransaction apis.GlobalSession | |||
result, err := driver.engine.SQL(fmt.Sprintf(QueryGlobalTransactionByXid, driver.globalTable), xid). | |||
@@ -292,7 +293,7 @@ func (driver *driver) FindGlobalSession(xid string) *apis.GlobalSession { | |||
return nil | |||
} | |||
// Find global sessions list. | |||
// FindGlobalSessions finds global sessions list by statuses list | |||
func (driver *driver) FindGlobalSessions(statuses []apis.GlobalSession_GlobalStatus) []*apis.GlobalSession { | |||
var globalSessions []*apis.GlobalSession | |||
err := driver.engine.Table(driver.globalTable). | |||
@@ -307,9 +308,8 @@ func (driver *driver) FindGlobalSessions(statuses []apis.GlobalSession_GlobalSta | |||
return globalSessions | |||
} | |||
// Find global sessions list with addressing identities | |||
func (driver *driver) FindGlobalSessionsWithAddressingIdentities(statuses []apis.GlobalSession_GlobalStatus, | |||
addressingIdentities []string) []*apis.GlobalSession { | |||
// FindGlobalSessionsWithAddressingIdentities finds global sessions list by addressing identities and statuses list | |||
func (driver *driver) FindGlobalSessionsWithAddressingIdentities(statuses []apis.GlobalSession_GlobalStatus, addressingIdentities []string) []*apis.GlobalSession { | |||
var globalSessions []*apis.GlobalSession | |||
err := driver.engine.Table(driver.globalTable). | |||
Where(builder. | |||
@@ -325,7 +325,7 @@ func (driver *driver) FindGlobalSessionsWithAddressingIdentities(statuses []apis | |||
return globalSessions | |||
} | |||
// All sessions collection. | |||
// AllSessions returns all sessions collection. | |||
func (driver *driver) AllSessions() []*apis.GlobalSession { | |||
var globalSessions []*apis.GlobalSession | |||
err := driver.engine.Table(driver.globalTable). | |||
@@ -338,33 +338,33 @@ func (driver *driver) AllSessions() []*apis.GlobalSession { | |||
return globalSessions | |||
} | |||
// Update global session status. | |||
// UpdateGlobalSessionStatus updates status of global session. | |||
func (driver *driver) UpdateGlobalSessionStatus(session *apis.GlobalSession, status apis.GlobalSession_GlobalStatus) error { | |||
_, err := driver.engine.Exec(fmt.Sprintf(UpdateGlobalTransaction, driver.globalTable), status, session.XID) | |||
return err | |||
} | |||
// Inactive global session. | |||
// InactiveGlobalSession inactivates a global session. | |||
func (driver *driver) InactiveGlobalSession(session *apis.GlobalSession) error { | |||
_, err := driver.engine.Exec(fmt.Sprintf(InactiveGlobalTransaction, driver.globalTable), session.XID) | |||
return err | |||
} | |||
// Remove global session. | |||
// RemoveGlobalSession removes a global session. | |||
func (driver *driver) RemoveGlobalSession(session *apis.GlobalSession) error { | |||
_, err := driver.engine.Exec(fmt.Sprintf(DeleteGlobalTransaction, driver.globalTable), session.XID) | |||
return err | |||
} | |||
// Add branch session. | |||
// AddBranchSession adds a branch session. | |||
func (driver *driver) AddBranchSession(globalSession *apis.GlobalSession, session *apis.BranchSession) error { | |||
_, err := driver.engine.Exec(fmt.Sprintf(InsertBranchTransaction, driver.branchTable), | |||
session.Addressing, session.XID, session.BranchID, session.TransactionID, session.ResourceID, session.LockKey, | |||
session.Type, session.Status, session.ApplicationData) | |||
session.Type, session.Status, session.ApplicationData, session.AsyncCommit) | |||
return err | |||
} | |||
// Find branch session. | |||
// FindBranchSessions finds branch sessions list by xid. | |||
func (driver *driver) FindBranchSessions(xid string) []*apis.BranchSession { | |||
var branchTransactions []*apis.BranchSession | |||
err := driver.engine.SQL(fmt.Sprintf(QueryBranchTransactionByXid, driver.branchTable), xid).Find(&branchTransactions) | |||
@@ -374,7 +374,7 @@ func (driver *driver) FindBranchSessions(xid string) []*apis.BranchSession { | |||
return branchTransactions | |||
} | |||
// Find branch session. | |||
// FindBatchBranchSessions finds branch sessions list by xids list. | |||
func (driver *driver) FindBatchBranchSessions(xids []string) []*apis.BranchSession { | |||
var ( | |||
branchTransactions []*apis.BranchSession | |||
@@ -392,7 +392,7 @@ func (driver *driver) FindBatchBranchSessions(xids []string) []*apis.BranchSessi | |||
return branchTransactions | |||
} | |||
// Update branch session status. | |||
// UpdateBranchSessionStatus updates status of branch session. | |||
func (driver *driver) UpdateBranchSessionStatus(session *apis.BranchSession, status apis.BranchSession_BranchStatus) error { | |||
_, err := driver.engine.Exec(fmt.Sprintf(UpdateBranchTransaction, driver.branchTable), | |||
status, | |||
@@ -400,14 +400,14 @@ func (driver *driver) UpdateBranchSessionStatus(session *apis.BranchSession, sta | |||
return err | |||
} | |||
// Remove branch session. | |||
// RemoveBranchSession removes branch session. | |||
func (driver *driver) RemoveBranchSession(globalSession *apis.GlobalSession, session *apis.BranchSession) error { | |||
_, err := driver.engine.Exec(fmt.Sprintf(DeleteBranchTransaction, driver.branchTable), | |||
session.BranchID) | |||
return err | |||
} | |||
// AcquireLock Acquire lock boolean. | |||
// AcquireLock acquires row locks. | |||
func (driver *driver) AcquireLock(rowLocks []*apis.RowLock) bool { | |||
locks, rowKeyArgs := distinctByKey(rowLocks) | |||
var existedRowLocks []*apis.RowLock | |||
@@ -473,31 +473,7 @@ func (driver *driver) AcquireLock(rowLocks []*apis.RowLock) bool { | |||
return true | |||
} | |||
func distinctByKey(locks []*apis.RowLock) ([]*apis.RowLock, []interface{}) { | |||
result := make([]*apis.RowLock, 0) | |||
rowKeys := make([]interface{}, 0) | |||
lockMap := make(map[string]byte) | |||
for _, lockDO := range locks { | |||
l := len(lockMap) | |||
lockMap[lockDO.RowKey] = 0 | |||
if len(lockMap) != l { | |||
result = append(result, lockDO) | |||
rowKeys = append(rowKeys, lockDO.RowKey) | |||
} | |||
} | |||
return result, rowKeys | |||
} | |||
func contains(s []string, e string) bool { | |||
for _, a := range s { | |||
if a == e { | |||
return true | |||
} | |||
} | |||
return false | |||
} | |||
// ReleaseLock Unlock boolean. | |||
// ReleaseLock releases locked rows. | |||
func (driver *driver) ReleaseLock(rowLocks []*apis.RowLock) bool { | |||
if rowLocks != nil && len(rowLocks) == 0 { | |||
return true | |||
@@ -519,7 +495,7 @@ func (driver *driver) ReleaseLock(rowLocks []*apis.RowLock) bool { | |||
return true | |||
} | |||
// IsLockable Is lockable boolean. | |||
// IsLockable checks if a global transaction is lockable by xid, resourceID, lockKey. | |||
func (driver *driver) IsLockable(xid string, resourceID string, lockKey string) bool { | |||
locks := storage.CollectRowLocks(lockKey, resourceID, xid) | |||
var existedRowLocks []*apis.RowLock | |||
@@ -541,3 +517,27 @@ func (driver *driver) IsLockable(xid string, resourceID string, lockKey string) | |||
} | |||
return true | |||
} | |||
func distinctByKey(locks []*apis.RowLock) ([]*apis.RowLock, []interface{}) { | |||
result := make([]*apis.RowLock, 0) | |||
rowKeys := make([]interface{}, 0) | |||
lockMap := make(map[string]byte) | |||
for _, lockDO := range locks { | |||
l := len(lockMap) | |||
lockMap[lockDO.RowKey] = 0 | |||
if len(lockMap) != l { | |||
result = append(result, lockDO) | |||
rowKeys = append(rowKeys, lockDO.RowKey) | |||
} | |||
} | |||
return result, rowKeys | |||
} | |||
func contains(s []string, e string) bool { | |||
for _, a := range s { | |||
if a == e { | |||
return true | |||
} | |||
} | |||
return false | |||
} |
@@ -36,6 +36,7 @@ CREATE TABLE IF NOT EXISTS `branch_table` | |||
`branch_type` varchar(8) DEFAULT NULL, | |||
`status` tinyint DEFAULT NULL, | |||
`application_data` varchar(2000) DEFAULT NULL, | |||
`async_commit` tinyint NOT NULL DEFAULT 1, | |||
`gmt_create` datetime(6) DEFAULT NULL, | |||
`gmt_modified` datetime(6) DEFAULT NULL, | |||
PRIMARY KEY (`branch_id`), | |||
@@ -33,6 +33,7 @@ CREATE TABLE IF NOT EXISTS branch_table | |||
branch_type varchar(8) DEFAULT NULL, | |||
status int DEFAULT NULL, | |||
application_data varchar(2000) DEFAULT NULL, | |||
async_commit tinyint NOT NULL DEFAULT 1, | |||
gmt_create timestamp DEFAULT NULL, | |||
gmt_modified timestamp DEFAULT NULL, | |||
PRIMARY KEY (branch_id) | |||