*: split separated region for newly created table. (#4592)

This commit is contained in:
disksing
2017-09-25 15:59:22 +08:00
committed by GitHub
parent 38cabb10d3
commit bc84be8df2
17 changed files with 876 additions and 240 deletions

View File

@ -53,6 +53,8 @@
MvccGetByKeyResponse
MvccGetByStartTsRequest
MvccGetByStartTsResponse
SplitRegionRequest
SplitRegionResponse
*/
package kvrpcpb
@ -230,6 +232,7 @@ type Context struct {
Term uint64 `protobuf:"varint,5,opt,name=term,proto3" json:"term,omitempty"`
Priority CommandPri `protobuf:"varint,6,opt,name=priority,proto3,enum=kvrpcpb.CommandPri" json:"priority,omitempty"`
IsolationLevel IsolationLevel `protobuf:"varint,7,opt,name=isolation_level,json=isolationLevel,proto3,enum=kvrpcpb.IsolationLevel" json:"isolation_level,omitempty"`
NotFillCache bool `protobuf:"varint,8,opt,name=not_fill_cache,json=notFillCache,proto3" json:"not_fill_cache,omitempty"`
}
func (m *Context) Reset() { *m = Context{} }
@ -279,6 +282,13 @@ func (m *Context) GetIsolationLevel() IsolationLevel {
return IsolationLevel_SI
}
func (m *Context) GetNotFillCache() bool {
if m != nil {
return m.NotFillCache
}
return false
}
type GetRequest struct {
Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"`
Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
@ -1497,6 +1507,62 @@ func (m *MvccGetByStartTsResponse) GetInfo() *MvccInfo {
return nil
}
type SplitRegionRequest struct {
Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"`
SplitKey []byte `protobuf:"bytes,2,opt,name=split_key,json=splitKey,proto3" json:"split_key,omitempty"`
}
func (m *SplitRegionRequest) Reset() { *m = SplitRegionRequest{} }
func (m *SplitRegionRequest) String() string { return proto.CompactTextString(m) }
func (*SplitRegionRequest) ProtoMessage() {}
func (*SplitRegionRequest) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{44} }
func (m *SplitRegionRequest) GetContext() *Context {
if m != nil {
return m.Context
}
return nil
}
func (m *SplitRegionRequest) GetSplitKey() []byte {
if m != nil {
return m.SplitKey
}
return nil
}
type SplitRegionResponse struct {
RegionError *errorpb.Error `protobuf:"bytes,1,opt,name=region_error,json=regionError" json:"region_error,omitempty"`
Left *metapb.Region `protobuf:"bytes,2,opt,name=left" json:"left,omitempty"`
Right *metapb.Region `protobuf:"bytes,3,opt,name=right" json:"right,omitempty"`
}
func (m *SplitRegionResponse) Reset() { *m = SplitRegionResponse{} }
func (m *SplitRegionResponse) String() string { return proto.CompactTextString(m) }
func (*SplitRegionResponse) ProtoMessage() {}
func (*SplitRegionResponse) Descriptor() ([]byte, []int) { return fileDescriptorKvrpcpb, []int{45} }
func (m *SplitRegionResponse) GetRegionError() *errorpb.Error {
if m != nil {
return m.RegionError
}
return nil
}
func (m *SplitRegionResponse) GetLeft() *metapb.Region {
if m != nil {
return m.Left
}
return nil
}
func (m *SplitRegionResponse) GetRight() *metapb.Region {
if m != nil {
return m.Right
}
return nil
}
func init() {
proto.RegisterType((*LockInfo)(nil), "kvrpcpb.LockInfo")
proto.RegisterType((*KeyError)(nil), "kvrpcpb.KeyError")
@ -1542,6 +1608,8 @@ func init() {
proto.RegisterType((*MvccGetByKeyResponse)(nil), "kvrpcpb.MvccGetByKeyResponse")
proto.RegisterType((*MvccGetByStartTsRequest)(nil), "kvrpcpb.MvccGetByStartTsRequest")
proto.RegisterType((*MvccGetByStartTsResponse)(nil), "kvrpcpb.MvccGetByStartTsResponse")
proto.RegisterType((*SplitRegionRequest)(nil), "kvrpcpb.SplitRegionRequest")
proto.RegisterType((*SplitRegionResponse)(nil), "kvrpcpb.SplitRegionResponse")
proto.RegisterEnum("kvrpcpb.CommandPri", CommandPri_name, CommandPri_value)
proto.RegisterEnum("kvrpcpb.IsolationLevel", IsolationLevel_name, IsolationLevel_value)
proto.RegisterEnum("kvrpcpb.Op", Op_name, Op_value)
@ -1681,6 +1749,16 @@ func (m *Context) MarshalTo(dAtA []byte) (int, error) {
i++
i = encodeVarintKvrpcpb(dAtA, i, uint64(m.IsolationLevel))
}
if m.NotFillCache {
dAtA[i] = 0x40
i++
if m.NotFillCache {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i++
}
return i, nil
}
@ -3321,6 +3399,88 @@ func (m *MvccGetByStartTsResponse) MarshalTo(dAtA []byte) (int, error) {
return i, nil
}
func (m *SplitRegionRequest) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalTo(dAtA)
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *SplitRegionRequest) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if m.Context != nil {
dAtA[i] = 0xa
i++
i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Context.Size()))
n50, err := m.Context.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n50
}
if len(m.SplitKey) > 0 {
dAtA[i] = 0x12
i++
i = encodeVarintKvrpcpb(dAtA, i, uint64(len(m.SplitKey)))
i += copy(dAtA[i:], m.SplitKey)
}
return i, nil
}
func (m *SplitRegionResponse) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalTo(dAtA)
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *SplitRegionResponse) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if m.RegionError != nil {
dAtA[i] = 0xa
i++
i = encodeVarintKvrpcpb(dAtA, i, uint64(m.RegionError.Size()))
n51, err := m.RegionError.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n51
}
if m.Left != nil {
dAtA[i] = 0x12
i++
i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Left.Size()))
n52, err := m.Left.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n52
}
if m.Right != nil {
dAtA[i] = 0x1a
i++
i = encodeVarintKvrpcpb(dAtA, i, uint64(m.Right.Size()))
n53, err := m.Right.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n53
}
return i, nil
}
func encodeFixed64Kvrpcpb(dAtA []byte, offset int, v uint64) int {
dAtA[offset] = uint8(v)
dAtA[offset+1] = uint8(v >> 8)
@ -3409,6 +3569,9 @@ func (m *Context) Size() (n int) {
if m.IsolationLevel != 0 {
n += 1 + sovKvrpcpb(uint64(m.IsolationLevel))
}
if m.NotFillCache {
n += 2
}
return n
}
@ -4100,6 +4263,38 @@ func (m *MvccGetByStartTsResponse) Size() (n int) {
return n
}
func (m *SplitRegionRequest) Size() (n int) {
var l int
_ = l
if m.Context != nil {
l = m.Context.Size()
n += 1 + l + sovKvrpcpb(uint64(l))
}
l = len(m.SplitKey)
if l > 0 {
n += 1 + l + sovKvrpcpb(uint64(l))
}
return n
}
func (m *SplitRegionResponse) Size() (n int) {
var l int
_ = l
if m.RegionError != nil {
l = m.RegionError.Size()
n += 1 + l + sovKvrpcpb(uint64(l))
}
if m.Left != nil {
l = m.Left.Size()
n += 1 + l + sovKvrpcpb(uint64(l))
}
if m.Right != nil {
l = m.Right.Size()
n += 1 + l + sovKvrpcpb(uint64(l))
}
return n
}
func sovKvrpcpb(x uint64) (n int) {
for {
n++
@ -4575,6 +4770,26 @@ func (m *Context) Unmarshal(dAtA []byte) error {
break
}
}
case 8:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field NotFillCache", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowKvrpcpb
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.NotFillCache = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipKvrpcpb(dAtA[iNdEx:])
@ -9850,6 +10065,269 @@ func (m *MvccGetByStartTsResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *SplitRegionRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowKvrpcpb
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: SplitRegionRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: SplitRegionRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowKvrpcpb
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthKvrpcpb
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.Context == nil {
m.Context = &Context{}
}
if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field SplitKey", wireType)
}
var byteLen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowKvrpcpb
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
byteLen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if byteLen < 0 {
return ErrInvalidLengthKvrpcpb
}
postIndex := iNdEx + byteLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.SplitKey = append(m.SplitKey[:0], dAtA[iNdEx:postIndex]...)
if m.SplitKey == nil {
m.SplitKey = []byte{}
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipKvrpcpb(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthKvrpcpb
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *SplitRegionResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowKvrpcpb
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: SplitRegionResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: SplitRegionResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field RegionError", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowKvrpcpb
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthKvrpcpb
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.RegionError == nil {
m.RegionError = &errorpb.Error{}
}
if err := m.RegionError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Left", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowKvrpcpb
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthKvrpcpb
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.Left == nil {
m.Left = &metapb.Region{}
}
if err := m.Left.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Right", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowKvrpcpb
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthKvrpcpb
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.Right == nil {
m.Right = &metapb.Region{}
}
if err := m.Right.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipKvrpcpb(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthKvrpcpb
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func skipKvrpcpb(dAtA []byte) (n int, err error) {
l := len(dAtA)
iNdEx := 0
@ -9958,96 +10436,101 @@ var (
func init() { proto.RegisterFile("kvrpcpb.proto", fileDescriptorKvrpcpb) }
var fileDescriptorKvrpcpb = []byte{
// 1445 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x5f, 0x8f, 0xdb, 0x44,
0x10, 0xaf, 0x1d, 0x27, 0x71, 0x26, 0xff, 0xdc, 0xbd, 0xab, 0x9a, 0xb6, 0x70, 0x4d, 0x0d, 0xa7,
0x5e, 0x0f, 0x29, 0x15, 0x41, 0xe2, 0x19, 0x35, 0xad, 0xca, 0xf5, 0x5a, 0x2e, 0xda, 0xab, 0xae,
0xaa, 0x84, 0x1a, 0x7c, 0xce, 0x36, 0xb1, 0xec, 0x78, 0x5d, 0x7b, 0x93, 0xab, 0x85, 0x10, 0x4f,
0x20, 0x21, 0xf1, 0x88, 0x04, 0x42, 0xbc, 0xf0, 0xc8, 0x37, 0xe1, 0x91, 0x8f, 0x80, 0xca, 0x17,
0x41, 0xbb, 0xfe, 0x97, 0x5c, 0x52, 0x38, 0x59, 0x69, 0x9e, 0x92, 0x9d, 0x99, 0xdd, 0x99, 0xdf,
0xcc, 0x6f, 0x67, 0xbd, 0x0b, 0x75, 0x7b, 0xe6, 0x7b, 0xa6, 0x77, 0xda, 0xf1, 0x7c, 0xca, 0x28,
0x2a, 0xc7, 0xc3, 0xeb, 0xb5, 0x09, 0x61, 0x46, 0x22, 0xbe, 0x5e, 0x27, 0xbe, 0x4f, 0xfd, 0x74,
0xb8, 0x3d, 0xa2, 0x23, 0x2a, 0xfe, 0xde, 0xe5, 0xff, 0x22, 0xa9, 0xfe, 0x0d, 0xa8, 0x8f, 0xa9,
0x69, 0x1f, 0xb8, 0x2f, 0x29, 0xba, 0x05, 0x35, 0xcf, 0xb7, 0x26, 0x86, 0x1f, 0x0e, 0x1c, 0x6a,
0xda, 0x2d, 0xa9, 0x2d, 0xed, 0xd5, 0x70, 0x35, 0x96, 0x71, 0x33, 0x6e, 0xc2, 0x55, 0x83, 0x19,
0xf1, 0x03, 0x8b, 0xba, 0x2d, 0xb9, 0x2d, 0xed, 0x29, 0xb8, 0xca, 0x65, 0x27, 0x91, 0x08, 0x69,
0x50, 0xb0, 0x49, 0xd8, 0x2a, 0x88, 0xc9, 0xfc, 0x2f, 0xba, 0x06, 0xaa, 0x98, 0xc4, 0x98, 0xd3,
0x52, 0xc4, 0x84, 0x32, 0x1f, 0x3f, 0x65, 0x8e, 0x6e, 0x81, 0x7a, 0x48, 0xc2, 0x07, 0x3c, 0x50,
0x74, 0x07, 0x4a, 0x5c, 0x4c, 0x86, 0xc2, 0x71, 0xb5, 0x7b, 0xb9, 0x93, 0xc0, 0x4c, 0x22, 0xc4,
0xb1, 0x01, 0x7a, 0x0f, 0x2a, 0x3e, 0x61, 0x7e, 0x68, 0x9c, 0x3a, 0x44, 0xc4, 0x50, 0xc1, 0x99,
0x00, 0x6d, 0x43, 0xd1, 0x38, 0xa5, 0x3e, 0x13, 0x31, 0x54, 0x70, 0x34, 0xd0, 0x7f, 0x95, 0xa1,
0xdc, 0xa3, 0x2e, 0x23, 0xaf, 0x19, 0xba, 0xc1, 0xe7, 0x8f, 0x2c, 0xea, 0x0e, 0xac, 0xc8, 0x9b,
0x82, 0xd5, 0x48, 0x70, 0x30, 0x44, 0x9f, 0x42, 0x2d, 0x56, 0x12, 0x8f, 0x9a, 0x63, 0xb1, 0x7e,
0xb5, 0xbb, 0xd5, 0x89, 0x93, 0x8b, 0x85, 0xee, 0x01, 0x57, 0xe1, 0xaa, 0x9f, 0x0d, 0x50, 0x1b,
0x14, 0x8f, 0x10, 0x5f, 0x78, 0xad, 0x76, 0x6b, 0x89, 0x7d, 0x9f, 0x10, 0x1f, 0x0b, 0x0d, 0x42,
0xa0, 0x30, 0xe2, 0x4f, 0x5a, 0x45, 0xe1, 0x51, 0xfc, 0x47, 0x77, 0x41, 0xf5, 0x7c, 0x8b, 0xfa,
0x16, 0x0b, 0x5b, 0xa5, 0xb6, 0xb4, 0xd7, 0xe8, 0x6e, 0xa5, 0xb8, 0x7b, 0x74, 0x32, 0x31, 0xdc,
0x61, 0xdf, 0xb7, 0x70, 0x6a, 0x84, 0x3e, 0x83, 0xa6, 0x15, 0x50, 0xc7, 0x60, 0x3c, 0x42, 0x87,
0xcc, 0x88, 0xd3, 0x2a, 0x8b, 0x79, 0x57, 0xd3, 0x79, 0x07, 0x89, 0xfe, 0x31, 0x57, 0xe3, 0x86,
0xb5, 0x30, 0x7e, 0xa4, 0xa8, 0x8a, 0x56, 0xe4, 0xb1, 0x1b, 0xc3, 0xc1, 0xab, 0x29, 0xf5, 0xa7,
0x13, 0x7d, 0x08, 0xf0, 0x90, 0x30, 0x4c, 0x5e, 0x4d, 0x49, 0xc0, 0xd0, 0x3e, 0x94, 0xcd, 0x28,
0x53, 0x71, 0x29, 0xb4, 0xb9, 0x90, 0x84, 0x1c, 0x27, 0x06, 0x49, 0xb9, 0xe5, 0xac, 0xdc, 0x2d,
0x28, 0x27, 0xf4, 0x28, 0x44, 0xd5, 0x8e, 0x87, 0xfa, 0xb7, 0x50, 0x15, 0x5e, 0x02, 0x8f, 0xba,
0x01, 0x41, 0x1f, 0x67, 0x89, 0xe6, 0x04, 0x88, 0x7d, 0x35, 0x3a, 0x09, 0x6f, 0x05, 0x2d, 0xd2,
0x1c, 0x0b, 0x8e, 0xdc, 0x86, 0x62, 0x64, 0x2b, 0x9f, 0xa3, 0x48, 0xc2, 0x22, 0x1c, 0xe9, 0x39,
0x07, 0x66, 0x86, 0x33, 0x25, 0x31, 0x0f, 0xa3, 0x81, 0xfe, 0xbb, 0x04, 0xd5, 0x63, 0xd3, 0x70,
0xf3, 0x00, 0xbd, 0x01, 0x95, 0x80, 0x19, 0x3e, 0x1b, 0x64, 0x70, 0x55, 0x21, 0x38, 0x24, 0x21,
0x77, 0xe7, 0x58, 0x13, 0x2b, 0xa2, 0x5c, 0x1d, 0x47, 0x83, 0xf9, 0x4c, 0x28, 0x0b, 0x99, 0xe0,
0x5b, 0xc2, 0x26, 0xe1, 0x80, 0xba, 0x4e, 0x28, 0xd8, 0xa0, 0xe2, 0xb2, 0x4d, 0xc2, 0x23, 0xd7,
0x09, 0xf5, 0xe7, 0x50, 0x3a, 0x9c, 0xf5, 0x0d, 0x6b, 0x0e, 0xac, 0xf4, 0x3f, 0x60, 0x97, 0x6b,
0xb0, 0x1a, 0xfe, 0x18, 0x6a, 0x11, 0xfa, 0xfc, 0x05, 0xd8, 0x85, 0xa2, 0x67, 0x58, 0x7e, 0xd0,
0x92, 0xdb, 0x85, 0xbd, 0x6a, 0xb7, 0x99, 0xc5, 0x24, 0x62, 0xc6, 0x91, 0x56, 0x3f, 0x02, 0xf5,
0xc9, 0x94, 0x09, 0xce, 0xa1, 0x1b, 0x20, 0x53, 0x4f, 0xac, 0xdd, 0xe8, 0x56, 0x53, 0xfb, 0x23,
0x0f, 0xcb, 0xd4, 0xbb, 0x70, 0xe8, 0xdf, 0xc9, 0xd0, 0xec, 0xfb, 0xe4, 0xcc, 0xb7, 0x18, 0xc9,
0x53, 0xbd, 0xbb, 0x50, 0x99, 0xc4, 0x01, 0x25, 0xb1, 0x67, 0xf9, 0x4c, 0x42, 0xc5, 0x99, 0xcd,
0x52, 0x33, 0x2c, 0x2c, 0x37, 0xc3, 0x0f, 0xa0, 0x1e, 0x31, 0x62, 0xb1, 0xc8, 0x35, 0x21, 0x3c,
0xc9, 0x2a, 0x9d, 0x36, 0xbf, 0xe2, 0x42, 0xf3, 0x43, 0x5d, 0xb8, 0x12, 0xd8, 0x96, 0x37, 0x30,
0xa9, 0x1b, 0x30, 0xdf, 0xb0, 0x5c, 0x36, 0x30, 0xc7, 0xc4, 0xb4, 0x45, 0x1f, 0x50, 0xf1, 0x16,
0x57, 0xf6, 0x52, 0x5d, 0x8f, 0xab, 0x74, 0x0f, 0xb4, 0x2c, 0x0d, 0xf9, 0xcb, 0x78, 0x07, 0x4a,
0x42, 0xbb, 0x9c, 0x8b, 0x94, 0x5b, 0xb1, 0x81, 0xfe, 0x87, 0x04, 0x75, 0xde, 0x88, 0xac, 0x5c,
0xed, 0x61, 0x29, 0x47, 0xf2, 0x8a, 0x1c, 0x21, 0x50, 0x6c, 0x12, 0x06, 0xad, 0x42, 0xbb, 0xb0,
0x57, 0xc3, 0xe2, 0x3f, 0xda, 0x85, 0x86, 0x29, 0xbc, 0x9e, 0xcb, 0x6e, 0x3d, 0x92, 0xc6, 0x53,
0x1f, 0x29, 0x6a, 0x51, 0x2b, 0xe1, 0xd2, 0xa9, 0xe5, 0x3a, 0x74, 0xa4, 0x3b, 0xd0, 0x48, 0x42,
0x7d, 0xf7, 0x3d, 0x46, 0x1f, 0x41, 0xfd, 0x60, 0xe2, 0x51, 0x3f, 0x4d, 0xcc, 0x02, 0xc9, 0xa4,
0x0b, 0x90, 0x6c, 0x19, 0xa4, 0xbc, 0x02, 0xa4, 0xfe, 0x1c, 0x1a, 0x89, 0xa3, 0xfc, 0xb0, 0xb6,
0xe7, 0x61, 0x55, 0x12, 0x0c, 0x5f, 0xc3, 0xf6, 0x3d, 0x83, 0x99, 0x63, 0x4c, 0x1d, 0xe7, 0xd4,
0x30, 0xed, 0x4d, 0xd6, 0x58, 0x0f, 0xe0, 0xca, 0x39, 0xe7, 0x1b, 0xa8, 0x5a, 0x00, 0x8d, 0x9e,
0x43, 0x0c, 0x77, 0xea, 0xad, 0xe7, 0xb8, 0x5b, 0x42, 0x5f, 0x58, 0x46, 0xaf, 0xff, 0x24, 0x41,
0x33, 0xf5, 0xba, 0x81, 0xe3, 0x6f, 0x99, 0x58, 0x85, 0x55, 0xc4, 0xb2, 0xa1, 0x29, 0x0a, 0x90,
0xf3, 0xec, 0x4f, 0x6a, 0x2a, 0xcf, 0xed, 0xdb, 0xb7, 0x9f, 0xfe, 0x0e, 0x68, 0x99, 0xb3, 0x77,
0x7e, 0x02, 0xbd, 0x80, 0x26, 0x3f, 0xeb, 0x78, 0xa3, 0xce, 0x03, 0xed, 0x26, 0x54, 0x27, 0xc6,
0xeb, 0x73, 0x8c, 0x86, 0x89, 0xf1, 0x3a, 0x49, 0xdd, 0xcf, 0x12, 0x68, 0x99, 0x83, 0x0d, 0x94,
0xf4, 0x36, 0x14, 0xf9, 0xc1, 0x11, 0xed, 0xa0, 0x95, 0x5f, 0xc7, 0x91, 0x5e, 0xff, 0x51, 0x02,
0x84, 0x49, 0x40, 0x9d, 0x19, 0xc9, 0x8b, 0xfe, 0x42, 0x3b, 0xfa, 0x82, 0x1c, 0x7b, 0x05, 0x5b,
0x0b, 0xd1, 0x6c, 0x60, 0x8b, 0x9f, 0x40, 0xe5, 0x61, 0x2f, 0x0f, 0xee, 0xf7, 0x01, 0x02, 0xe3,
0x25, 0x19, 0x78, 0xd4, 0x72, 0x59, 0x0c, 0xba, 0xc2, 0x25, 0x7d, 0x2e, 0xd0, 0xc7, 0x00, 0x7c,
0xdd, 0x0d, 0x20, 0x78, 0x02, 0x75, 0x6c, 0x9c, 0xad, 0xeb, 0x93, 0x5c, 0xa7, 0xd0, 0x48, 0x96,
0x5b, 0xf3, 0x01, 0xf2, 0x96, 0xcf, 0x35, 0x53, 0xc4, 0xdf, 0x9f, 0xae, 0xe9, 0x4a, 0xb1, 0xda,
0xc9, 0x73, 0x81, 0x4a, 0x38, 0x59, 0xf7, 0xb1, 0xd8, 0x07, 0x0d, 0x1b, 0x67, 0xf7, 0x89, 0x43,
0xf2, 0x7d, 0x6e, 0x2e, 0x97, 0xe0, 0x4b, 0xb8, 0x3c, 0xb7, 0xe2, 0xba, 0xe3, 0x9d, 0x01, 0x8a,
0x97, 0x36, 0xdc, 0x11, 0x59, 0xfb, 0xf5, 0xe6, 0x2a, 0x94, 0x89, 0x3b, 0x1c, 0x64, 0xf7, 0xfa,
0x12, 0x71, 0x87, 0x87, 0x24, 0xd4, 0x5f, 0xc0, 0xd6, 0x82, 0xdf, 0x75, 0xe3, 0x8a, 0x88, 0xbb,
0xb9, 0x2b, 0x9b, 0x3e, 0x82, 0x66, 0xea, 0x30, 0x3f, 0x98, 0x5b, 0x50, 0xb0, 0x67, 0x6f, 0x3d,
0xa1, 0xb8, 0x4e, 0x1f, 0x42, 0xe5, 0x19, 0xff, 0x8a, 0x17, 0x2f, 0x2f, 0xd7, 0x20, 0x8a, 0x6b,
0xc0, 0x82, 0xf8, 0x39, 0xa2, 0x2c, 0xc6, 0x4f, 0x03, 0x74, 0x13, 0x14, 0x16, 0x7a, 0xd1, 0x2b,
0xc7, 0xb9, 0xfb, 0x93, 0x50, 0x70, 0x90, 0x71, 0x1b, 0x66, 0x41, 0xdc, 0x81, 0xd5, 0x48, 0xf0,
0x34, 0xd0, 0x9f, 0x41, 0xe5, 0x84, 0xef, 0x15, 0xe1, 0x25, 0xdd, 0x45, 0xd2, 0xdc, 0x2e, 0x42,
0x0d, 0x90, 0x59, 0x10, 0xf7, 0x3a, 0x99, 0x05, 0xe8, 0x43, 0x68, 0x58, 0xc1, 0x20, 0x18, 0x53,
0xde, 0xfe, 0xd3, 0x4d, 0xa7, 0xe2, 0x9a, 0x15, 0x1c, 0x73, 0xa1, 0x58, 0x4f, 0xff, 0x41, 0x02,
0xf5, 0xc9, 0xcc, 0x34, 0xc5, 0xc2, 0xbb, 0xa0, 0xa4, 0x0f, 0x46, 0x2b, 0x4f, 0x26, 0xa1, 0x46,
0xfb, 0x50, 0x12, 0x17, 0x97, 0x24, 0x31, 0x28, 0x35, 0x4c, 0x33, 0x81, 0x63, 0x0b, 0x6e, 0x2b,
0x9c, 0x27, 0xc7, 0x5d, 0x66, 0x9b, 0xe2, 0xc1, 0xb1, 0x85, 0x7e, 0x0c, 0x5b, 0x3c, 0x94, 0x87,
0x84, 0xdd, 0x0b, 0x0f, 0x49, 0xb8, 0x9e, 0xfd, 0xfa, 0xbd, 0x04, 0xdb, 0x8b, 0xab, 0xae, 0xbb,
0x73, 0xee, 0x82, 0x62, 0xb9, 0x2f, 0x69, 0xfc, 0x5e, 0x34, 0x77, 0x51, 0x88, 0xd3, 0x8a, 0x85,
0x5a, 0xff, 0x0a, 0xae, 0xa6, 0x71, 0x1c, 0x47, 0xa4, 0xc8, 0x83, 0x70, 0x9e, 0x62, 0xf2, 0x02,
0xc5, 0xf4, 0xdf, 0x24, 0x68, 0x2d, 0xbb, 0x58, 0x37, 0xdc, 0xe5, 0x77, 0xc1, 0x24, 0x01, 0xca,
0x7f, 0x26, 0x60, 0xff, 0x23, 0x80, 0xec, 0x21, 0x0c, 0x01, 0x94, 0xbe, 0xa0, 0xfe, 0xc4, 0x70,
0xb4, 0x4b, 0xa8, 0x0c, 0x85, 0xc7, 0xf4, 0x4c, 0x93, 0x90, 0x0a, 0xca, 0xe7, 0xd6, 0x68, 0xac,
0xc9, 0xfb, 0x6d, 0x68, 0x2c, 0xbe, 0x7e, 0xa1, 0x12, 0xc8, 0xc7, 0x07, 0xda, 0x25, 0xfe, 0x8b,
0x7b, 0x9a, 0xb4, 0xdf, 0x01, 0xf9, 0xc8, 0xe3, 0x53, 0xfb, 0x53, 0x16, 0xad, 0x71, 0x9f, 0x38,
0xd1, 0x1a, 0x9c, 0xaf, 0x9a, 0x8c, 0x6a, 0xa0, 0x26, 0x37, 0x12, 0xad, 0x70, 0x6f, 0xff, 0xcf,
0x37, 0x3b, 0xd2, 0x5f, 0x6f, 0x76, 0xa4, 0xbf, 0xdf, 0xec, 0x48, 0xbf, 0xfc, 0xb3, 0x73, 0x09,
0x5a, 0x26, 0x9d, 0x74, 0x3c, 0xcb, 0x1d, 0x99, 0x86, 0xd7, 0x61, 0x96, 0x3d, 0xeb, 0xd8, 0x33,
0xf1, 0x9a, 0x7a, 0x5a, 0x12, 0x3f, 0x9f, 0xfc, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x76, 0x89,
0x7e, 0xa1, 0x15, 0x00, 0x00,
// 1534 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4f, 0x6f, 0xdb, 0xc6,
0x12, 0x0f, 0x29, 0x4a, 0xa2, 0x46, 0x7f, 0xcc, 0xac, 0x1d, 0x44, 0x49, 0xde, 0x73, 0x14, 0xbe,
0x18, 0x71, 0xfc, 0x00, 0x05, 0x75, 0x81, 0x9e, 0x8b, 0x28, 0x69, 0xea, 0x38, 0xa9, 0x85, 0x75,
0xe0, 0x20, 0x40, 0x1b, 0x95, 0xa6, 0xd6, 0xd2, 0x42, 0x14, 0x97, 0x21, 0x57, 0x72, 0x88, 0xa2,
0xe8, 0xa9, 0x05, 0x0a, 0xf4, 0x54, 0x14, 0x68, 0x0f, 0xbd, 0xf4, 0xd8, 0x6f, 0xd1, 0x63, 0x8f,
0xfd, 0x08, 0x45, 0xfa, 0x45, 0x8a, 0x5d, 0xfe, 0x93, 0x2c, 0xa7, 0x35, 0x08, 0x45, 0x27, 0x69,
0x67, 0x66, 0x77, 0xe6, 0x37, 0xf3, 0xdb, 0x59, 0xee, 0x42, 0x7d, 0x34, 0xf5, 0x3d, 0xdb, 0x3b,
0x6e, 0x7b, 0x3e, 0xe3, 0x0c, 0x95, 0xe3, 0xe1, 0xf5, 0xda, 0x98, 0x70, 0x2b, 0x11, 0x5f, 0xaf,
0x13, 0xdf, 0x67, 0x7e, 0x3a, 0xdc, 0x18, 0xb0, 0x01, 0x93, 0x7f, 0xef, 0x89, 0x7f, 0x91, 0xd4,
0xfc, 0x12, 0xf4, 0x27, 0xcc, 0x1e, 0xed, 0xb9, 0x27, 0x0c, 0xdd, 0x82, 0x9a, 0xe7, 0xd3, 0xb1,
0xe5, 0x87, 0x3d, 0x87, 0xd9, 0xa3, 0xa6, 0xd2, 0x52, 0xb6, 0x6b, 0xb8, 0x1a, 0xcb, 0x84, 0x99,
0x30, 0x11, 0xaa, 0xde, 0x94, 0xf8, 0x01, 0x65, 0x6e, 0x53, 0x6d, 0x29, 0xdb, 0x1a, 0xae, 0x0a,
0xd9, 0x51, 0x24, 0x42, 0x06, 0x14, 0x46, 0x24, 0x6c, 0x16, 0xe4, 0x64, 0xf1, 0x17, 0x5d, 0x03,
0x5d, 0x4e, 0xe2, 0xdc, 0x69, 0x6a, 0x72, 0x42, 0x59, 0x8c, 0x9f, 0x71, 0xc7, 0xa4, 0xa0, 0xef,
0x93, 0xf0, 0xa1, 0x08, 0x14, 0xdd, 0x85, 0x92, 0x10, 0x93, 0xbe, 0x74, 0x5c, 0xdd, 0xbd, 0xdc,
0x4e, 0x60, 0x26, 0x11, 0xe2, 0xd8, 0x00, 0xfd, 0x07, 0x2a, 0x3e, 0xe1, 0x7e, 0x68, 0x1d, 0x3b,
0x44, 0xc6, 0x50, 0xc1, 0x99, 0x00, 0x6d, 0x40, 0xd1, 0x3a, 0x66, 0x3e, 0x97, 0x31, 0x54, 0x70,
0x34, 0x30, 0x7f, 0x53, 0xa1, 0xdc, 0x61, 0x2e, 0x27, 0xaf, 0x39, 0xba, 0x21, 0xe6, 0x0f, 0x28,
0x73, 0x7b, 0x34, 0xf2, 0xa6, 0x61, 0x3d, 0x12, 0xec, 0xf5, 0xd1, 0x07, 0x50, 0x8b, 0x95, 0xc4,
0x63, 0xf6, 0x50, 0xae, 0x5f, 0xdd, 0x5d, 0x6f, 0xc7, 0xc9, 0xc5, 0x52, 0xf7, 0x50, 0xa8, 0x70,
0xd5, 0xcf, 0x06, 0xa8, 0x05, 0x9a, 0x47, 0x88, 0x2f, 0xbd, 0x56, 0x77, 0x6b, 0x89, 0x7d, 0x97,
0x10, 0x1f, 0x4b, 0x0d, 0x42, 0xa0, 0x71, 0xe2, 0x8f, 0x9b, 0x45, 0xe9, 0x51, 0xfe, 0x47, 0xf7,
0x40, 0xf7, 0x7c, 0xca, 0x7c, 0xca, 0xc3, 0x66, 0xa9, 0xa5, 0x6c, 0x37, 0x76, 0xd7, 0x53, 0xdc,
0x1d, 0x36, 0x1e, 0x5b, 0x6e, 0xbf, 0xeb, 0x53, 0x9c, 0x1a, 0xa1, 0x0f, 0x61, 0x8d, 0x06, 0xcc,
0xb1, 0xb8, 0x88, 0xd0, 0x21, 0x53, 0xe2, 0x34, 0xcb, 0x72, 0xde, 0xd5, 0x74, 0xde, 0x5e, 0xa2,
0x7f, 0x22, 0xd4, 0xb8, 0x41, 0xe7, 0xc6, 0xe8, 0x36, 0x34, 0x5c, 0xc6, 0x7b, 0x27, 0xd4, 0x71,
0x7a, 0xb6, 0x65, 0x0f, 0x49, 0x53, 0x6f, 0x29, 0xdb, 0x3a, 0xae, 0xb9, 0x8c, 0x7f, 0x44, 0x1d,
0xa7, 0x23, 0x64, 0x8f, 0x35, 0x5d, 0x33, 0x8a, 0x02, 0xa1, 0xd5, 0xef, 0xbd, 0x9a, 0x30, 0x7f,
0x32, 0x36, 0xfb, 0x00, 0x8f, 0x08, 0xc7, 0xe4, 0xd5, 0x84, 0x04, 0x1c, 0xed, 0x40, 0xd9, 0x8e,
0xf2, 0x19, 0x17, 0xcc, 0x98, 0x09, 0x5c, 0xca, 0x71, 0x62, 0x90, 0x90, 0x42, 0xcd, 0x48, 0xd1,
0x84, 0x72, 0x42, 0xa2, 0x42, 0xc4, 0x89, 0x78, 0x68, 0x7e, 0x05, 0x55, 0xe9, 0x25, 0xf0, 0x98,
0x1b, 0x10, 0xf4, 0x5e, 0x56, 0x0e, 0x41, 0x93, 0xd8, 0x57, 0xa3, 0x9d, 0xb0, 0x5b, 0x92, 0x27,
0xad, 0x84, 0x64, 0xd2, 0x1d, 0x28, 0x46, 0xb6, 0xea, 0x19, 0x22, 0x25, 0x5c, 0xc3, 0x91, 0x5e,
0x30, 0x65, 0x6a, 0x39, 0x13, 0x12, 0xb3, 0x35, 0x1a, 0x98, 0xbf, 0x28, 0x50, 0x3d, 0xb4, 0x2d,
0x37, 0x0f, 0xd0, 0x1b, 0x50, 0x09, 0xb8, 0xe5, 0xf3, 0x5e, 0x06, 0x57, 0x97, 0x82, 0x7d, 0x12,
0x0a, 0x77, 0x0e, 0x1d, 0xd3, 0x88, 0x98, 0x75, 0x1c, 0x0d, 0x66, 0x33, 0xa1, 0xcd, 0x65, 0x42,
0x6c, 0x9c, 0x11, 0x09, 0x7b, 0xcc, 0x75, 0x42, 0xc9, 0x19, 0x1d, 0x97, 0x47, 0x24, 0x3c, 0x70,
0x9d, 0xd0, 0x7c, 0x01, 0xa5, 0xfd, 0x69, 0xd7, 0xa2, 0x33, 0x60, 0x95, 0x7f, 0x01, 0xbb, 0x58,
0x83, 0xf3, 0xe1, 0x0f, 0xa1, 0x16, 0xa1, 0xcf, 0x5f, 0x80, 0x2d, 0x28, 0x7a, 0x16, 0xf5, 0x83,
0xa6, 0xda, 0x2a, 0x6c, 0x57, 0x77, 0xd7, 0xb2, 0x98, 0x64, 0xcc, 0x38, 0xd2, 0x9a, 0x07, 0xa0,
0x3f, 0x9d, 0x70, 0xc9, 0x4c, 0x74, 0x03, 0x54, 0xe6, 0xc9, 0xb5, 0x1b, 0xbb, 0xd5, 0xd4, 0xfe,
0xc0, 0xc3, 0x2a, 0xf3, 0x2e, 0x1c, 0xfa, 0xd7, 0x2a, 0xac, 0x75, 0x7d, 0x72, 0xea, 0x53, 0x4e,
0xf2, 0x54, 0xef, 0x1e, 0x54, 0xc6, 0x71, 0x40, 0x49, 0xec, 0x59, 0x3e, 0x93, 0x50, 0x71, 0x66,
0xb3, 0xd0, 0x32, 0x0b, 0x8b, 0x2d, 0xf3, 0x7f, 0x50, 0x8f, 0x18, 0x31, 0x5f, 0xe4, 0x9a, 0x14,
0x1e, 0x65, 0x95, 0x4e, 0x5b, 0x64, 0x71, 0xae, 0x45, 0xa2, 0x5d, 0xb8, 0x12, 0x8c, 0xa8, 0xd7,
0xb3, 0x99, 0x1b, 0x70, 0xdf, 0xa2, 0x2e, 0xef, 0xd9, 0x43, 0x62, 0x8f, 0x64, 0xb7, 0xd0, 0xf1,
0xba, 0x50, 0x76, 0x52, 0x5d, 0x47, 0xa8, 0x4c, 0x0f, 0x8c, 0x2c, 0x0d, 0xf9, 0xcb, 0x78, 0x17,
0x4a, 0x52, 0xbb, 0x98, 0x8b, 0x94, 0x5b, 0xb1, 0x81, 0xf9, 0xab, 0x02, 0x75, 0xd1, 0xae, 0x68,
0xae, 0xf6, 0xb0, 0x90, 0x23, 0xf5, 0x9c, 0x1c, 0x21, 0xd0, 0x46, 0x24, 0x0c, 0x9a, 0x85, 0x56,
0x61, 0xbb, 0x86, 0xe5, 0x7f, 0xb4, 0x05, 0x0d, 0x5b, 0x7a, 0x3d, 0x93, 0xdd, 0x7a, 0x24, 0x8d,
0xa7, 0x3e, 0xd6, 0xf4, 0xa2, 0x51, 0xc2, 0xa5, 0x63, 0xea, 0x3a, 0x6c, 0x60, 0x3a, 0xd0, 0x48,
0x42, 0x7d, 0xf7, 0x3d, 0xc6, 0x1c, 0x40, 0x7d, 0x6f, 0xec, 0x31, 0x3f, 0x4d, 0xcc, 0x1c, 0xc9,
0x94, 0x0b, 0x90, 0x6c, 0x11, 0xa4, 0x7a, 0x0e, 0x48, 0xf3, 0x05, 0x34, 0x12, 0x47, 0xf9, 0x61,
0x6d, 0xcc, 0xc2, 0xaa, 0x24, 0x18, 0xbe, 0x80, 0x8d, 0xfb, 0x16, 0xb7, 0x87, 0x98, 0x39, 0xce,
0xb1, 0x65, 0x8f, 0x56, 0x59, 0x63, 0x33, 0x80, 0x2b, 0x67, 0x9c, 0xaf, 0xa0, 0x6a, 0x01, 0x34,
0x3a, 0x0e, 0xb1, 0xdc, 0x89, 0xb7, 0x9c, 0xe3, 0x6e, 0x01, 0x7d, 0x61, 0x11, 0xbd, 0xf9, 0x83,
0x02, 0x6b, 0xa9, 0xd7, 0x15, 0x1c, 0x7f, 0x8b, 0xc4, 0x2a, 0x9c, 0x47, 0xac, 0x11, 0xac, 0xc9,
0x02, 0xe4, 0x3c, 0xfb, 0x93, 0x9a, 0xaa, 0x33, 0xfb, 0xf6, 0xed, 0xa7, 0xbf, 0x03, 0x46, 0xe6,
0xec, 0x9d, 0x9f, 0x40, 0x2f, 0x61, 0x4d, 0x9c, 0x75, 0xa2, 0x51, 0xe7, 0x81, 0x76, 0x13, 0xaa,
0x63, 0xeb, 0xf5, 0x19, 0x46, 0xc3, 0xd8, 0x7a, 0x9d, 0xa4, 0xee, 0x47, 0x05, 0x8c, 0xcc, 0xc1,
0x0a, 0x4a, 0x7a, 0x07, 0x8a, 0xe2, 0xe0, 0x88, 0x76, 0xd0, 0xb9, 0xdf, 0xd0, 0x91, 0xde, 0xfc,
0x4e, 0x01, 0x84, 0x49, 0xc0, 0x9c, 0x29, 0xc9, 0x8b, 0xfe, 0x42, 0x3b, 0xfa, 0x82, 0x1c, 0x7b,
0x05, 0xeb, 0x73, 0xd1, 0xac, 0x60, 0x8b, 0x1f, 0x41, 0xe5, 0x51, 0x27, 0x0f, 0xee, 0xff, 0x02,
0x04, 0xd6, 0x09, 0xe9, 0x79, 0x8c, 0xba, 0x3c, 0x06, 0x5d, 0x11, 0x92, 0xae, 0x10, 0x98, 0x43,
0x00, 0xb1, 0xee, 0x0a, 0x10, 0x3c, 0x85, 0x3a, 0xb6, 0x4e, 0x97, 0xf5, 0x49, 0x6e, 0x32, 0x68,
0x24, 0xcb, 0x2d, 0xf9, 0x00, 0x79, 0xcb, 0xe7, 0x9a, 0x2d, 0xe3, 0xef, 0x4e, 0x96, 0x74, 0xa5,
0x38, 0xdf, 0xc9, 0x0b, 0x89, 0x4a, 0x3a, 0x59, 0xf6, 0xb1, 0xd8, 0x05, 0x03, 0x5b, 0xa7, 0x0f,
0x88, 0x43, 0xf2, 0x7d, 0x6e, 0x2e, 0x96, 0xe0, 0x53, 0xb8, 0x3c, 0xb3, 0xe2, 0xb2, 0xe3, 0x9d,
0x02, 0x8a, 0x97, 0xb6, 0xdc, 0x01, 0x59, 0xfa, 0xf5, 0xe6, 0x2a, 0x94, 0x89, 0xdb, 0xef, 0x65,
0xb7, 0xff, 0x12, 0x71, 0xfb, 0xfb, 0x24, 0x34, 0x5f, 0xc2, 0xfa, 0x9c, 0xdf, 0x65, 0xe3, 0x8a,
0x88, 0xbb, 0xba, 0x2b, 0x9b, 0x39, 0x80, 0xb5, 0xd4, 0x61, 0x7e, 0x30, 0xb7, 0xa0, 0x30, 0x9a,
0xbe, 0xf5, 0x84, 0x12, 0x3a, 0xb3, 0x0f, 0x95, 0xe7, 0xe2, 0x2b, 0x5e, 0xbe, 0xcf, 0x5c, 0x83,
0x28, 0xae, 0x1e, 0x0f, 0xe2, 0x47, 0x8b, 0xb2, 0x1c, 0x3f, 0x0b, 0xd0, 0x4d, 0xd0, 0x78, 0xe8,
0x45, 0x6f, 0x21, 0x67, 0xee, 0x4f, 0x52, 0x21, 0x40, 0xc6, 0x6d, 0x98, 0x07, 0x71, 0x07, 0xd6,
0x23, 0xc1, 0xb3, 0xc0, 0x7c, 0x0e, 0x95, 0x23, 0xb1, 0x57, 0xa4, 0x97, 0x74, 0x17, 0x29, 0x33,
0xbb, 0x08, 0x35, 0x40, 0xe5, 0x41, 0xdc, 0xeb, 0x54, 0x1e, 0xa0, 0xdb, 0xd0, 0xa0, 0x41, 0x2f,
0x18, 0x32, 0xd1, 0xfe, 0xd3, 0x4d, 0xa7, 0xe3, 0x1a, 0x0d, 0x0e, 0x85, 0x50, 0xae, 0x67, 0x7e,
0xab, 0x80, 0xfe, 0x74, 0x6a, 0xdb, 0x72, 0xe1, 0x2d, 0xd0, 0xd2, 0x67, 0xa5, 0x73, 0x4f, 0x26,
0xa9, 0x46, 0x3b, 0x50, 0x92, 0x17, 0x97, 0x24, 0x31, 0x28, 0x35, 0x4c, 0x33, 0x81, 0x63, 0x0b,
0x61, 0x2b, 0x9d, 0x27, 0xc7, 0x5d, 0x66, 0x9b, 0xe2, 0xc1, 0xb1, 0x85, 0x79, 0x08, 0xeb, 0x22,
0x94, 0x47, 0x84, 0xdf, 0x0f, 0xf7, 0x49, 0xb8, 0x9c, 0xfd, 0xfa, 0x8d, 0x02, 0x1b, 0xf3, 0xab,
0x2e, 0xbb, 0x73, 0x6e, 0x81, 0x46, 0xdd, 0x13, 0x16, 0xbf, 0x2a, 0xcd, 0x5c, 0x14, 0xe2, 0xb4,
0x62, 0xa9, 0x36, 0x3f, 0x87, 0xab, 0x69, 0x1c, 0x87, 0x11, 0x29, 0xf2, 0x20, 0x9c, 0xa5, 0x98,
0x3a, 0x47, 0x31, 0xf3, 0x67, 0x05, 0x9a, 0x8b, 0x2e, 0x96, 0x0d, 0x77, 0xf1, 0xf5, 0x30, 0x49,
0x80, 0xf6, 0xcf, 0x09, 0xf8, 0x0c, 0xd0, 0xa1, 0xe7, 0x88, 0x3b, 0x9d, 0x70, 0x91, 0xb7, 0x0f,
0x88, 0x15, 0xe6, 0xfa, 0x80, 0x10, 0x88, 0x16, 0xf6, 0xbd, 0x02, 0xeb, 0x73, 0xeb, 0xe7, 0x07,
0x6e, 0x82, 0xe6, 0x90, 0x13, 0x1e, 0x9f, 0xee, 0x8d, 0xf9, 0x77, 0x45, 0x2c, 0x75, 0xe8, 0x36,
0x14, 0x7d, 0x3a, 0x18, 0xf2, 0xb8, 0xec, 0x67, 0x8d, 0x22, 0xe5, 0xce, 0xff, 0x01, 0xb2, 0x27,
0x42, 0x04, 0x50, 0xfa, 0x84, 0xf9, 0x63, 0xcb, 0x31, 0x2e, 0xa1, 0x32, 0x14, 0x9e, 0xb0, 0x53,
0x43, 0x41, 0x3a, 0x68, 0x1f, 0xd3, 0xc1, 0xd0, 0x50, 0x77, 0x5a, 0xd0, 0x98, 0x7f, 0x17, 0x44,
0x25, 0x50, 0x0f, 0xf7, 0x8c, 0x4b, 0xe2, 0x17, 0x77, 0x0c, 0x65, 0xa7, 0x0d, 0xea, 0x81, 0x27,
0xa6, 0x76, 0x27, 0x3c, 0x5a, 0xe3, 0x01, 0x71, 0xa2, 0x35, 0xc4, 0x1e, 0x35, 0x54, 0x54, 0x03,
0x3d, 0xb9, 0x85, 0x19, 0x85, 0xfb, 0x3b, 0xbf, 0xbf, 0xd9, 0x54, 0xfe, 0x78, 0xb3, 0xa9, 0xfc,
0xf9, 0x66, 0x53, 0xf9, 0xe9, 0xaf, 0xcd, 0x4b, 0xd0, 0xb4, 0xd9, 0xb8, 0xed, 0x51, 0x77, 0x60,
0x5b, 0x5e, 0x9b, 0xd3, 0xd1, 0xb4, 0x3d, 0x9a, 0xca, 0x77, 0xe6, 0xe3, 0x92, 0xfc, 0x79, 0xff,
0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5b, 0x32, 0xfb, 0xfb, 0xbb, 0x16, 0x00, 0x00,
}

View File

@ -74,6 +74,8 @@ type TikvClient interface {
// Raft commands (tikv <-> tikv).
Raft(ctx context.Context, opts ...grpc.CallOption) (Tikv_RaftClient, error)
Snapshot(ctx context.Context, opts ...grpc.CallOption) (Tikv_SnapshotClient, error)
// Region commands.
SplitRegion(ctx context.Context, in *kvrpcpb.SplitRegionRequest, opts ...grpc.CallOption) (*kvrpcpb.SplitRegionResponse, error)
// transaction debugger commands.
MvccGetByKey(ctx context.Context, in *kvrpcpb.MvccGetByKeyRequest, opts ...grpc.CallOption) (*kvrpcpb.MvccGetByKeyResponse, error)
MvccGetByStartTs(ctx context.Context, in *kvrpcpb.MvccGetByStartTsRequest, opts ...grpc.CallOption) (*kvrpcpb.MvccGetByStartTsResponse, error)
@ -308,6 +310,15 @@ func (x *tikvSnapshotClient) CloseAndRecv() (*raft_serverpb.Done, error) {
return m, nil
}
func (c *tikvClient) SplitRegion(ctx context.Context, in *kvrpcpb.SplitRegionRequest, opts ...grpc.CallOption) (*kvrpcpb.SplitRegionResponse, error) {
out := new(kvrpcpb.SplitRegionResponse)
err := grpc.Invoke(ctx, "/tikvpb.Tikv/SplitRegion", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *tikvClient) MvccGetByKey(ctx context.Context, in *kvrpcpb.MvccGetByKeyRequest, opts ...grpc.CallOption) (*kvrpcpb.MvccGetByKeyResponse, error) {
out := new(kvrpcpb.MvccGetByKeyResponse)
err := grpc.Invoke(ctx, "/tikvpb.Tikv/MvccGetByKey", in, out, c.cc, opts...)
@ -352,6 +363,8 @@ type TikvServer interface {
// Raft commands (tikv <-> tikv).
Raft(Tikv_RaftServer) error
Snapshot(Tikv_SnapshotServer) error
// Region commands.
SplitRegion(context.Context, *kvrpcpb.SplitRegionRequest) (*kvrpcpb.SplitRegionResponse, error)
// transaction debugger commands.
MvccGetByKey(context.Context, *kvrpcpb.MvccGetByKeyRequest) (*kvrpcpb.MvccGetByKeyResponse, error)
MvccGetByStartTs(context.Context, *kvrpcpb.MvccGetByStartTsRequest) (*kvrpcpb.MvccGetByStartTsResponse, error)
@ -719,6 +732,24 @@ func (x *tikvSnapshotServer) Recv() (*raft_serverpb.SnapshotChunk, error) {
return m, nil
}
func _Tikv_SplitRegion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(kvrpcpb.SplitRegionRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(TikvServer).SplitRegion(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/tikvpb.Tikv/SplitRegion",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TikvServer).SplitRegion(ctx, req.(*kvrpcpb.SplitRegionRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Tikv_MvccGetByKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(kvrpcpb.MvccGetByKeyRequest)
if err := dec(in); err != nil {
@ -827,6 +858,10 @@ var _Tikv_serviceDesc = grpc.ServiceDesc{
MethodName: "Coprocessor",
Handler: _Tikv_Coprocessor_Handler,
},
{
MethodName: "SplitRegion",
Handler: _Tikv_SplitRegion_Handler,
},
{
MethodName: "MvccGetByKey",
Handler: _Tikv_MvccGetByKey_Handler,
@ -854,42 +889,43 @@ var _Tikv_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("tikvpb.proto", fileDescriptorTikvpb) }
var fileDescriptorTikvpb = []byte{
// 579 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x95, 0xdd, 0x8e, 0xd2, 0x4e,
0x18, 0xc6, 0x97, 0x84, 0x3f, 0xff, 0xdd, 0xd9, 0xdd, 0xa8, 0x03, 0x2a, 0x5b, 0x77, 0x89, 0xee,
0x91, 0xf1, 0xa0, 0xc6, 0x8f, 0xc4, 0x03, 0x3f, 0xa2, 0x94, 0x84, 0x98, 0x2e, 0x09, 0x29, 0x7b,
0xe2, 0x91, 0x19, 0x26, 0xef, 0x02, 0x29, 0x74, 0xea, 0xcc, 0x30, 0x64, 0xaf, 0xc2, 0x53, 0x2f,
0xc9, 0x43, 0x2f, 0xc1, 0xe0, 0x8d, 0x98, 0xb6, 0xcc, 0x74, 0x86, 0x82, 0x47, 0xb4, 0xbf, 0xe7,
0x7d, 0x9e, 0xbe, 0xf3, 0x09, 0x3a, 0x91, 0xb3, 0x58, 0xa5, 0x63, 0x3f, 0xe5, 0x4c, 0x32, 0xdc,
0x28, 0xde, 0xbc, 0x7b, 0x94, 0xa5, 0x9c, 0x51, 0x10, 0x82, 0xf1, 0x42, 0xf2, 0x4e, 0x63, 0xc5,
0x53, 0xaa, 0x2b, 0xbd, 0x26, 0x27, 0x37, 0xf2, 0xab, 0x00, 0xae, 0x80, 0x1b, 0xd8, 0x9a, 0xb0,
0x09, 0xcb, 0x1f, 0x9f, 0x67, 0x4f, 0x05, 0x7d, 0xf9, 0xfd, 0x18, 0xd5, 0xaf, 0x67, 0xb1, 0xc2,
0xaf, 0xd1, 0x7f, 0xa1, 0xea, 0x83, 0xc4, 0x4d, 0x5f, 0x87, 0xf5, 0x41, 0x46, 0xf0, 0x6d, 0x09,
0x42, 0x7a, 0x2d, 0x17, 0x8a, 0x94, 0x25, 0x02, 0x2e, 0x0f, 0xf0, 0x1b, 0xd4, 0x08, 0xd5, 0x88,
0x92, 0x04, 0x97, 0x15, 0xd9, 0xab, 0xf6, 0xdd, 0xdf, 0xa2, 0xc6, 0x18, 0x20, 0x14, 0xaa, 0x21,
0x87, 0x15, 0x9f, 0x49, 0xc0, 0x6d, 0x53, 0xa6, 0x91, 0x0e, 0x38, 0xdb, 0xa1, 0x98, 0x90, 0xf7,
0xe8, 0x30, 0x54, 0x01, 0x5b, 0x2c, 0x66, 0x12, 0x3f, 0x30, 0x85, 0x05, 0xd0, 0x01, 0x0f, 0x2b,
0xdc, 0xb5, 0x7f, 0x5e, 0xa4, 0x8c, 0xdb, 0xf6, 0x02, 0x54, 0xed, 0x9a, 0x1b, 0xfb, 0x47, 0x74,
0x14, 0xaa, 0x60, 0x0e, 0x24, 0x59, 0xa6, 0xd8, 0xfa, 0x4c, 0x41, 0x74, 0x40, 0xbb, 0x2a, 0xb8,
0x93, 0xd0, 0x25, 0x92, 0x4e, 0xb3, 0x89, 0x2f, 0x2b, 0x35, 0xaa, 0x4e, 0x42, 0xa9, 0x98, 0x90,
0x08, 0xdd, 0xd9, 0x84, 0x44, 0x6c, 0x3e, 0x1f, 0x13, 0x1a, 0xe3, 0x0b, 0xb7, 0x5e, 0x73, 0x1d,
0xd7, 0xd9, 0x27, 0xbb, 0x8d, 0x65, 0x2b, 0x76, 0xc5, 0x68, 0x6c, 0x35, 0xa6, 0x51, 0xb5, 0xb1,
0x52, 0x31, 0x21, 0x57, 0xe8, 0x34, 0x54, 0x11, 0x08, 0x36, 0x57, 0x90, 0xe7, 0x3c, 0x32, 0xd5,
0x16, 0xd5, 0x51, 0xe7, 0xbb, 0x45, 0x93, 0xf6, 0x02, 0xd5, 0x43, 0xd5, 0x0f, 0x30, 0x2e, 0x77,
0x62, 0xa0, 0xbd, 0x4d, 0x87, 0xb9, 0x0d, 0xf4, 0x60, 0x0e, 0x12, 0x22, 0x92, 0x4c, 0xc0, 0x6a,
0xc0, 0xa2, 0xd5, 0x06, 0x1c, 0xd1, 0xa4, 0xbd, 0x45, 0x8d, 0x88, 0xac, 0xb2, 0x85, 0x2a, 0xf7,
0x4a, 0x01, 0xaa, 0x7b, 0x45, 0xf3, 0x2d, 0xf3, 0x70, 0xb9, 0x65, 0x1e, 0x2e, 0x77, 0x9b, 0x73,
0x6e, 0xcc, 0x3d, 0x74, 0x14, 0x91, 0x55, 0xd1, 0x15, 0x3e, 0xb3, 0xeb, 0x36, 0x9d, 0x6e, 0x22,
0xbc, 0x5d, 0x92, 0x49, 0xf9, 0x80, 0xfe, 0x8f, 0xc8, 0x2a, 0x3f, 0xab, 0xce, 0xb7, 0xec, 0xe3,
0xda, 0xae, 0x0a, 0xc6, 0xff, 0x0e, 0x1d, 0x07, 0xe5, 0xc5, 0x83, 0x5b, 0xbe, 0x7d, 0x0d, 0x95,
0xe7, 0xdd, 0xa5, 0xd6, 0x04, 0xd4, 0x23, 0x72, 0x23, 0xb1, 0xe7, 0xbb, 0x77, 0x53, 0x06, 0x07,
0x20, 0x04, 0x99, 0x80, 0xd7, 0xdc, 0xd2, 0x7a, 0x2c, 0x81, 0xcb, 0x83, 0xa7, 0x35, 0xfc, 0x09,
0x1d, 0x8e, 0x12, 0x92, 0x8a, 0x29, 0x93, 0xf8, 0x7c, 0xab, 0x48, 0x0b, 0xc1, 0x74, 0x99, 0xc4,
0xfb, 0x23, 0x06, 0xe8, 0x64, 0xa0, 0x28, 0xed, 0x83, 0xec, 0xde, 0x86, 0x70, 0x8b, 0xcb, 0xd5,
0xb6, 0xb1, 0x1e, 0xc6, 0xc5, 0x1e, 0xd5, 0x0c, 0xe7, 0x0b, 0xba, 0x6b, 0x94, 0x91, 0x24, 0x5c,
0x5e, 0x0b, 0xfc, 0xb8, 0x6a, 0xda, 0x48, 0x3a, 0xf6, 0xc9, 0x3f, 0x2a, 0x74, 0x74, 0xf7, 0xd9,
0xcf, 0x75, 0xa7, 0xf6, 0x6b, 0xdd, 0xa9, 0xfd, 0x5e, 0x77, 0x6a, 0x3f, 0xfe, 0x74, 0x0e, 0x50,
0x9b, 0xb2, 0x85, 0x9f, 0xce, 0x92, 0x09, 0x25, 0xa9, 0x9f, 0xfd, 0x09, 0xf8, 0xb1, 0xca, 0x6f,
0xef, 0x71, 0x23, 0xff, 0x79, 0xf5, 0x37, 0x00, 0x00, 0xff, 0xff, 0x04, 0xb8, 0x87, 0xcd, 0x29,
0x06, 0x00, 0x00,
// 597 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x95, 0x4f, 0x6f, 0xd3, 0x30,
0x18, 0xc6, 0x57, 0xa9, 0x94, 0xcd, 0xdd, 0x04, 0xb8, 0x05, 0xba, 0xb0, 0x55, 0xb0, 0x13, 0xe2,
0x10, 0xc4, 0x1f, 0x89, 0x03, 0x7f, 0x04, 0x4d, 0xa5, 0x0a, 0xb2, 0x4a, 0x55, 0xba, 0x0b, 0x27,
0xe4, 0x46, 0xef, 0xd2, 0x28, 0x69, 0x1c, 0x62, 0xd7, 0xd5, 0xbe, 0x09, 0x1f, 0x89, 0x23, 0x77,
0x2e, 0xa8, 0x7c, 0x11, 0x94, 0xa4, 0x76, 0xec, 0xa6, 0xe5, 0xd4, 0xe4, 0xf7, 0xbc, 0xcf, 0x93,
0xb7, 0xce, 0x6b, 0x07, 0x1d, 0xf3, 0x30, 0x12, 0xe9, 0xcc, 0x4e, 0x33, 0xca, 0x29, 0x6e, 0x95,
0x77, 0xd6, 0x3d, 0x9f, 0xa6, 0x19, 0xf5, 0x81, 0x31, 0x9a, 0x95, 0x92, 0x75, 0x12, 0x89, 0x2c,
0xf5, 0x65, 0xa5, 0xd5, 0xc9, 0xc8, 0x35, 0xff, 0xc6, 0x20, 0x13, 0x90, 0x29, 0xd8, 0x0d, 0x68,
0x40, 0x8b, 0xcb, 0xe7, 0xf9, 0x55, 0x49, 0x5f, 0xfe, 0x6e, 0xa3, 0xe6, 0x55, 0x18, 0x09, 0xfc,
0x1a, 0xdd, 0x72, 0xc5, 0x08, 0x38, 0xee, 0xd8, 0x32, 0x6c, 0x04, 0xdc, 0x83, 0xef, 0x4b, 0x60,
0xdc, 0xea, 0x9a, 0x90, 0xa5, 0x34, 0x61, 0x70, 0x71, 0x80, 0xdf, 0xa0, 0x96, 0x2b, 0xa6, 0x3e,
0x49, 0x70, 0x55, 0x91, 0xdf, 0x4a, 0xdf, 0xfd, 0x2d, 0xaa, 0x8c, 0x0e, 0x42, 0xae, 0x98, 0x64,
0xb0, 0xca, 0x42, 0x0e, 0xb8, 0xa7, 0xca, 0x24, 0x92, 0x01, 0xa7, 0x3b, 0x14, 0x15, 0xf2, 0x1e,
0x1d, 0xba, 0xc2, 0xa1, 0x8b, 0x45, 0xc8, 0xf1, 0x03, 0x55, 0x58, 0x02, 0x19, 0xf0, 0xb0, 0xc6,
0x4d, 0xfb, 0xe7, 0x45, 0x4a, 0x33, 0xdd, 0x5e, 0x82, 0xba, 0x5d, 0x72, 0x65, 0xff, 0x88, 0x8e,
0x5c, 0xe1, 0xc4, 0x40, 0x92, 0x65, 0x8a, 0xb5, 0xc7, 0x94, 0x44, 0x06, 0xf4, 0xea, 0x82, 0xb9,
0x08, 0x03, 0xc2, 0xfd, 0x79, 0xbe, 0xf0, 0x55, 0xa5, 0x44, 0xf5, 0x45, 0xa8, 0x14, 0x15, 0xe2,
0xa1, 0x3b, 0x9b, 0x10, 0x8f, 0xc6, 0xf1, 0x8c, 0xf8, 0x11, 0x3e, 0x37, 0xeb, 0x25, 0x97, 0x71,
0xfd, 0x7d, 0xb2, 0xd9, 0x58, 0xfe, 0xc6, 0x2e, 0xa9, 0x1f, 0x69, 0x8d, 0x49, 0x54, 0x6f, 0xac,
0x52, 0x54, 0xc8, 0x25, 0x3a, 0x71, 0x85, 0x07, 0x8c, 0xc6, 0x02, 0x8a, 0x9c, 0x47, 0xaa, 0x5a,
0xa3, 0x32, 0xea, 0x6c, 0xb7, 0xa8, 0xd2, 0x5e, 0xa0, 0xa6, 0x2b, 0x46, 0x0e, 0xc6, 0xd5, 0x24,
0x3a, 0xd2, 0xdb, 0x31, 0x98, 0xd9, 0xc0, 0x10, 0x62, 0xe0, 0xe0, 0x91, 0x24, 0x00, 0xad, 0x01,
0x8d, 0xd6, 0x1b, 0x30, 0x44, 0x95, 0xf6, 0x16, 0xb5, 0x3c, 0xb2, 0xca, 0x5f, 0x54, 0x35, 0x2b,
0x25, 0xa8, 0xcf, 0x8a, 0xe4, 0x5b, 0xe6, 0xc9, 0x72, 0xcb, 0x3c, 0x59, 0xee, 0x36, 0x17, 0x5c,
0x99, 0x87, 0xe8, 0xc8, 0x23, 0xab, 0xb2, 0x2b, 0x7c, 0xaa, 0xd7, 0x6d, 0x3a, 0xdd, 0x44, 0x58,
0xbb, 0x24, 0x95, 0xf2, 0x01, 0xdd, 0xf6, 0xc8, 0xaa, 0xd8, 0xab, 0xc6, 0xb3, 0xf4, 0xed, 0xda,
0xab, 0x0b, 0xca, 0xff, 0x0e, 0xb5, 0x9d, 0xea, 0xe0, 0xc1, 0x5d, 0x5b, 0x3f, 0x86, 0xaa, 0xfd,
0x6e, 0x52, 0x6d, 0x01, 0x9a, 0x1e, 0xb9, 0xe6, 0xd8, 0xb2, 0xcd, 0xb3, 0x29, 0x87, 0x63, 0x60,
0x8c, 0x04, 0x60, 0x75, 0xb6, 0xb4, 0x21, 0x4d, 0xe0, 0xe2, 0xe0, 0x69, 0x03, 0x7f, 0x42, 0x87,
0xd3, 0x84, 0xa4, 0x6c, 0x4e, 0x39, 0x3e, 0xdb, 0x2a, 0x92, 0x82, 0x33, 0x5f, 0x26, 0xd1, 0xfe,
0x88, 0x2f, 0xa8, 0x3d, 0x4d, 0xe3, 0x7c, 0xfb, 0x07, 0x21, 0x4d, 0xb4, 0x49, 0xd0, 0x68, 0x7d,
0x12, 0x0c, 0x51, 0xfd, 0x97, 0x31, 0x3a, 0x1e, 0x0b, 0xdf, 0x1f, 0x01, 0x1f, 0xdc, 0xb8, 0x70,
0x83, 0xab, 0x7a, 0x1d, 0xcb, 0xb4, 0xf3, 0x3d, 0xaa, 0x8a, 0xfb, 0x8a, 0xee, 0x2a, 0x65, 0xca,
0x49, 0xc6, 0xaf, 0x18, 0x7e, 0x5c, 0x37, 0x6d, 0x24, 0x19, 0xfb, 0xe4, 0x3f, 0x15, 0x32, 0x7a,
0xf0, 0xec, 0xe7, 0xba, 0xdf, 0xf8, 0xb5, 0xee, 0x37, 0xfe, 0xac, 0xfb, 0x8d, 0x1f, 0x7f, 0xfb,
0x07, 0xa8, 0xe7, 0xd3, 0x85, 0x9d, 0x86, 0x49, 0xe0, 0x93, 0xd4, 0xce, 0x3f, 0x28, 0x76, 0x24,
0x8a, 0x2f, 0xc1, 0xac, 0x55, 0xfc, 0xbc, 0xfa, 0x17, 0x00, 0x00, 0xff, 0xff, 0x0e, 0x4a, 0xad,
0x04, 0x75, 0x06, 0x00, 0x00,
}

View File

@ -29,6 +29,7 @@ type Config struct {
BinlogSocket string `toml:"binlog-socket" json:"binlog-socket"`
Lease string `toml:"lease" json:"lease"`
RunDDL bool `toml:"run-ddl" json:"run-ddl"`
SplitTable bool `toml:"split-table" json:"split-table"`
Log Log `toml:"log" json:"log"`
Security Security `toml:"security" json:"security"`

View File

@ -24,6 +24,9 @@ run-ddl = true
# Schema lease duration, very dangerous to change only if you know what you do.
lease = "10s"
# When create table, split a separated region for it.
# split-table = false
[log]
# Log level: info, debug, warn, error, fatal.
level = "info"

View File

@ -53,6 +53,10 @@ var (
// TableColumnCountLimit is limit of the number of columns in a table.
// It's exported for testing.
TableColumnCountLimit = 512
// EnableSplitTableRegion is a flag to decide whether to split a new region for
// a newly created table. It takes effect only if the Storage supports split
// region.
EnableSplitTableRegion = false
)
var (

View File

@ -18,6 +18,7 @@ import (
"github.com/juju/errors"
"github.com/pingcap/tidb/infoschema"
"github.com/pingcap/tidb/kv"
"github.com/pingcap/tidb/meta"
"github.com/pingcap/tidb/meta/autoid"
"github.com/pingcap/tidb/model"
@ -54,6 +55,12 @@ func (d *ddl) onCreateTable(t *meta.Meta, job *model.Job) (ver int64, _ error) {
if err != nil {
return ver, errors.Trace(err)
}
if EnableSplitTableRegion {
err = d.splitTableRegion(tbInfo.ID)
if err != nil {
return ver, errors.Trace(err)
}
}
// Finish this job.
job.State = model.JobDone
job.BinlogInfo.AddTableInfo(ver, tbInfo)
@ -124,6 +131,25 @@ func (d *ddl) onDropTable(t *meta.Meta, job *model.Job) (ver int64, _ error) {
return ver, errors.Trace(err)
}
func (d *ddl) splitTableRegion(tableID int64) error {
type splitableStore interface {
SplitRegion(splitKey kv.Key) error
}
store, ok := d.store.(splitableStore)
if !ok {
return nil
}
tableStartKey := tablecodec.GenTablePrefix(tableID)
if err := store.SplitRegion(tableStartKey); err != nil {
return errors.Trace(err)
}
nextTableStartKey := tablecodec.GenTablePrefix(tableID + 1)
if err := store.SplitRegion(nextTableStartKey); err != nil {
return errors.Trace(err)
}
return nil
}
// Maximum number of keys to delete for each reorg table job run.
var reorgTableDeleteLimit = 65536

54
ddl/table_split_test.go Normal file
View File

@ -0,0 +1,54 @@
// Copyright 2017 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package ddl_test
import (
. "github.com/pingcap/check"
"github.com/pingcap/tidb"
"github.com/pingcap/tidb/ddl"
"github.com/pingcap/tidb/model"
"github.com/pingcap/tidb/store/tikv"
"github.com/pingcap/tidb/tablecodec"
"golang.org/x/net/context"
)
type testDDLTableSplitSuite struct{}
var _ = Suite(&testDDLTableSplitSuite{})
func (s *testDDLTableSplitSuite) TestTableSplit(c *C) {
store, err := tikv.NewMockTikvStore()
c.Assert(err, IsNil)
tidb.SetSchemaLease(0)
tidb.SetStatsLease(0)
ddl.EnableSplitTableRegion = true
dom, err := tidb.BootstrapSession(store)
c.Assert(err, IsNil)
ddl.EnableSplitTableRegion = false
infoSchema := dom.InfoSchema()
c.Assert(infoSchema, NotNil)
t, err := infoSchema.TableByName(model.NewCIStr("mysql"), model.NewCIStr("tidb"))
c.Assert(err, IsNil)
regionStartKey := tablecodec.EncodeTablePrefix(t.Meta().ID)
regionEndKey := tablecodec.EncodeTablePrefix(t.Meta().ID + 1)
type kvStore interface {
GetRegionCache() *tikv.RegionCache
}
cache := store.(kvStore).GetRegionCache()
loc, err := cache.LocateKey(tikv.NewBackoffer(5000, context.Background()), regionStartKey)
c.Assert(err, IsNil)
c.Assert(loc.StartKey, BytesEquals, []byte(regionStartKey))
c.Assert(loc.EndKey, BytesEquals, []byte(regionEndKey))
}

2
glide.lock generated
View File

@ -121,7 +121,7 @@ imports:
- leveldb/table
- leveldb/util
- name: github.com/pingcap/kvproto
version: bef5d90e19c200dff99effb226a5bc336ee6b258
version: ef910f10e3ee568b62a12aa881f430acad2acba9
subpackages:
- pkg/coprocessor
- pkg/eraftpb

View File

@ -158,7 +158,7 @@ import:
- go-tipb
- sharedbytes
- package: github.com/pingcap/kvproto
version: bef5d90e19c200dff99effb226a5bc336ee6b258
version: ef910f10e3ee568b62a12aa881f430acad2acba9
- package: github.com/gogo/protobuf
version: ^0.3.0
subpackages:

View File

@ -128,6 +128,7 @@ const (
gcResolveLockMaxBackoff = 100000
gcDeleteRangeMaxBackoff = 100000
rawkvMaxBackoff = 20000
splitRegionBackoff = 20000
)
var commitMaxBackoff = 20000

View File

@ -186,136 +186,53 @@ func (c *rpcClient) SendReq(ctx goctx.Context, addr string, req *tikvrpc.Request
func (c *rpcClient) callRPC(ctx goctx.Context, client tikvpb.TikvClient, req *tikvrpc.Request) (*tikvrpc.Response, error) {
resp := &tikvrpc.Response{}
resp.Type = req.Type
var err error
switch req.Type {
case tikvrpc.CmdGet:
r, err := client.KvGet(ctx, req.Get)
if err != nil {
return nil, errors.Trace(err)
}
resp.Get = r
return resp, nil
resp.Get, err = client.KvGet(ctx, req.Get)
case tikvrpc.CmdScan:
r, err := client.KvScan(ctx, req.Scan)
if err != nil {
return nil, errors.Trace(err)
}
resp.Scan = r
return resp, nil
resp.Scan, err = client.KvScan(ctx, req.Scan)
case tikvrpc.CmdPrewrite:
r, err := client.KvPrewrite(ctx, req.Prewrite)
if err != nil {
return nil, errors.Trace(err)
}
resp.Prewrite = r
return resp, nil
resp.Prewrite, err = client.KvPrewrite(ctx, req.Prewrite)
case tikvrpc.CmdCommit:
r, err := client.KvCommit(ctx, req.Commit)
if err != nil {
return nil, errors.Trace(err)
}
resp.Commit = r
return resp, nil
resp.Commit, err = client.KvCommit(ctx, req.Commit)
case tikvrpc.CmdCleanup:
r, err := client.KvCleanup(ctx, req.Cleanup)
if err != nil {
return nil, errors.Trace(err)
}
resp.Cleanup = r
return resp, nil
resp.Cleanup, err = client.KvCleanup(ctx, req.Cleanup)
case tikvrpc.CmdBatchGet:
r, err := client.KvBatchGet(ctx, req.BatchGet)
if err != nil {
return nil, errors.Trace(err)
}
resp.BatchGet = r
return resp, nil
resp.BatchGet, err = client.KvBatchGet(ctx, req.BatchGet)
case tikvrpc.CmdBatchRollback:
r, err := client.KvBatchRollback(ctx, req.BatchRollback)
if err != nil {
return nil, errors.Trace(err)
}
resp.BatchRollback = r
return resp, nil
resp.BatchRollback, err = client.KvBatchRollback(ctx, req.BatchRollback)
case tikvrpc.CmdScanLock:
r, err := client.KvScanLock(ctx, req.ScanLock)
if err != nil {
return nil, errors.Trace(err)
}
resp.ScanLock = r
return resp, nil
resp.ScanLock, err = client.KvScanLock(ctx, req.ScanLock)
case tikvrpc.CmdResolveLock:
r, err := client.KvResolveLock(ctx, req.ResolveLock)
if err != nil {
return nil, errors.Trace(err)
}
resp.ResolveLock = r
return resp, nil
resp.ResolveLock, err = client.KvResolveLock(ctx, req.ResolveLock)
case tikvrpc.CmdGC:
r, err := client.KvGC(ctx, req.GC)
if err != nil {
return nil, errors.Trace(err)
}
resp.GC = r
return resp, nil
resp.GC, err = client.KvGC(ctx, req.GC)
case tikvrpc.CmdDeleteRange:
r, err := client.KvDeleteRange(ctx, req.DeleteRange)
if err != nil {
return nil, errors.Trace(err)
}
resp.DeleteRange = r
return resp, nil
resp.DeleteRange, err = client.KvDeleteRange(ctx, req.DeleteRange)
case tikvrpc.CmdRawGet:
r, err := client.RawGet(ctx, req.RawGet)
if err != nil {
return nil, errors.Trace(err)
}
resp.RawGet = r
return resp, nil
resp.RawGet, err = client.RawGet(ctx, req.RawGet)
case tikvrpc.CmdRawPut:
r, err := client.RawPut(ctx, req.RawPut)
if err != nil {
return nil, errors.Trace(err)
}
resp.RawPut = r
return resp, nil
resp.RawPut, err = client.RawPut(ctx, req.RawPut)
case tikvrpc.CmdRawDelete:
r, err := client.RawDelete(ctx, req.RawDelete)
if err != nil {
return nil, errors.Trace(err)
}
resp.RawDelete = r
return resp, nil
resp.RawDelete, err = client.RawDelete(ctx, req.RawDelete)
case tikvrpc.CmdRawScan:
r, err := client.RawScan(ctx, req.RawScan)
if err != nil {
return nil, errors.Trace(err)
}
resp.RawScan = r
return resp, nil
resp.RawScan, err = client.RawScan(ctx, req.RawScan)
case tikvrpc.CmdCop:
r, err := client.Coprocessor(ctx, req.Cop)
if err != nil {
return nil, errors.Trace(err)
}
resp.Cop = r
return resp, nil
resp.Cop, err = client.Coprocessor(ctx, req.Cop)
case tikvrpc.CmdMvccGetByKey:
r, err := client.MvccGetByKey(ctx, req.MvccGetByKey)
if err != nil {
return nil, errors.Trace(err)
}
resp.MvccGetByKey = r
return resp, nil
resp.MvccGetByKey, err = client.MvccGetByKey(ctx, req.MvccGetByKey)
case tikvrpc.CmdMvccGetByStartTs:
r, err := client.MvccGetByStartTs(ctx, req.MvccGetByStartTs)
if err != nil {
return nil, errors.Trace(err)
}
resp.MvccGetByStartTS = r
return resp, nil
resp.MvccGetByStartTS, err = client.MvccGetByStartTs(ctx, req.MvccGetByStartTs)
case tikvrpc.CmdSplitRegion:
resp.SplitRegion, err = client.SplitRegion(ctx, req.SplitRegion)
default:
return nil, errors.Errorf("invalid request type: %v", req.Type)
}
if err != nil {
return nil, errors.Trace(err)
}
return resp, nil
}
func (c *rpcClient) Close() error {

View File

@ -14,6 +14,7 @@
package mocktikv
import (
"bytes"
"io"
"github.com/golang/protobuf/proto"
@ -396,6 +397,17 @@ func (h *rpcHandler) handleKvRawScan(req *kvrpcpb.RawScanRequest) *kvrpcpb.RawSc
}
}
func (h *rpcHandler) handleSplitRegion(req *kvrpcpb.SplitRegionRequest) *kvrpcpb.SplitRegionResponse {
key := NewMvccKey(req.GetSplitKey())
region, _ := h.cluster.GetRegionByKey(key)
if bytes.Equal(region.GetStartKey(), key) {
return &kvrpcpb.SplitRegionResponse{}
}
newRegionID, newPeerIDs := h.cluster.AllocID(), h.cluster.AllocIDs(len(region.Peers))
h.cluster.SplitRaw(region.GetId(), newRegionID, key, newPeerIDs, newPeerIDs[0])
return &kvrpcpb.SplitRegionResponse{}
}
// RPCClient sends kv RPC calls to mock cluster.
type RPCClient struct {
Cluster *Cluster
@ -596,6 +608,13 @@ func (c *RPCClient) SendReq(ctx goctx.Context, addr string, req *tikvrpc.Request
return resp, nil
}
resp.MvccGetByStartTS = handler.handleMvccGetByStartTS(r)
case tikvrpc.CmdSplitRegion:
r := req.SplitRegion
if err := handler.checkRequest(reqCtx, r.Size()); err != nil {
resp.SplitRegion = &kvrpcpb.SplitRegionResponse{RegionError: err}
return resp, nil
}
resp.SplitRegion = handler.handleSplitRegion(r)
default:
return nil, errors.Errorf("unsupport this request type %v", req.Type)
}

View File

@ -223,6 +223,9 @@ func (s *mockTikvGrpcServer) MvccGetByKey(goctx.Context, *kvrpcpb.MvccGetByKeyRe
func (s *mockTikvGrpcServer) MvccGetByStartTs(goctx.Context, *kvrpcpb.MvccGetByStartTsRequest) (*kvrpcpb.MvccGetByStartTsResponse, error) {
return nil, errors.New("unreachable")
}
func (s *mockTikvGrpcServer) SplitRegion(goctx.Context, *kvrpcpb.SplitRegionRequest) (*kvrpcpb.SplitRegionResponse, error) {
return nil, errors.New("unreachable")
}
func (s *testRegionRequestSuite) TestNoReloadRegionForGrpcWhenCtxCanceled(c *C) {
// prepare a mock tikv grpc server

View File

@ -0,0 +1,67 @@
// Copyright 2017 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package tikv
import (
"bytes"
log "github.com/Sirupsen/logrus"
"github.com/juju/errors"
"github.com/pingcap/kvproto/pkg/kvrpcpb"
"github.com/pingcap/tidb/kv"
"github.com/pingcap/tidb/store/tikv/tikvrpc"
goctx "golang.org/x/net/context"
)
// SplitRegion splits the region contains splitKey into 2 regions: [start,
// splitKey) and [splitKey, end).
func (s *tikvStore) SplitRegion(splitKey kv.Key) error {
log.Infof("start split_region at %q", splitKey)
bo := NewBackoffer(splitRegionBackoff, goctx.Background())
sender := NewRegionRequestSender(s.regionCache, s.client, kvrpcpb.IsolationLevel_SI)
req := &tikvrpc.Request{
Type: tikvrpc.CmdSplitRegion,
Priority: kvrpcpb.CommandPri_Normal,
SplitRegion: &kvrpcpb.SplitRegionRequest{
SplitKey: splitKey,
},
}
for {
loc, err := s.regionCache.LocateKey(bo, splitKey)
if err != nil {
return errors.Trace(err)
}
if bytes.Equal(splitKey, loc.StartKey) {
log.Infof("skip split_region region at %q", splitKey)
return nil
}
res, err := sender.SendReq(bo, req, loc.Region, readTimeoutShort)
if err != nil {
return errors.Trace(err)
}
regionErr, err := res.GetRegionError()
if err != nil {
return errors.Trace(err)
}
if regionErr != nil {
err := bo.Backoff(boRegionMiss, errors.New(regionErr.String()))
if err != nil {
return errors.Trace(err)
}
continue
}
log.Infof("split_region at %q complete, new regions: %v, %v", splitKey, res.SplitRegion.GetLeft(), res.SplitRegion.GetRight())
return nil
}
}

View File

@ -47,6 +47,7 @@ const (
CmdMvccGetByKey CmdType = 1024 + iota
CmdMvccGetByStartTs
CmdSplitRegion
)
// Request wraps all kv/coprocessor requests.
@ -71,6 +72,7 @@ type Request struct {
Cop *coprocessor.Request
MvccGetByKey *kvrpcpb.MvccGetByKeyRequest
MvccGetByStartTs *kvrpcpb.MvccGetByStartTsRequest
SplitRegion *kvrpcpb.SplitRegionRequest
}
// GetContext returns the rpc context for the underlying concrete request.
@ -113,6 +115,8 @@ func (req *Request) GetContext() (*kvrpcpb.Context, error) {
c = req.MvccGetByKey.GetContext()
case CmdMvccGetByStartTs:
c = req.MvccGetByStartTs.GetContext()
case CmdSplitRegion:
c = req.SplitRegion.GetContext()
default:
return nil, fmt.Errorf("invalid request type %v", req.Type)
}
@ -140,6 +144,7 @@ type Response struct {
Cop *coprocessor.Response
MvccGetByKey *kvrpcpb.MvccGetByKeyResponse
MvccGetByStartTS *kvrpcpb.MvccGetByStartTsResponse
SplitRegion *kvrpcpb.SplitRegionResponse
}
// SetContext set the Context field for the given req to the specified ctx.
@ -182,6 +187,8 @@ func SetContext(req *Request, ctx *kvrpcpb.Context) error {
req.MvccGetByKey.Context = ctx
case CmdMvccGetByStartTs:
req.MvccGetByStartTs.Context = ctx
case CmdSplitRegion:
req.SplitRegion.Context = ctx
default:
return fmt.Errorf("invalid request type %v", req.Type)
}
@ -266,6 +273,10 @@ func GenRegionErrorResp(req *Request, e *errorpb.Error) (*Response, error) {
resp.MvccGetByStartTS = &kvrpcpb.MvccGetByStartTsResponse{
RegionError: e,
}
case CmdSplitRegion:
resp.SplitRegion = &kvrpcpb.SplitRegionResponse{
RegionError: e,
}
default:
return nil, fmt.Errorf("invalid request type %v", req.Type)
}
@ -312,6 +323,8 @@ func (resp *Response) GetRegionError() (*errorpb.Error, error) {
e = resp.MvccGetByKey.GetRegionError()
case CmdMvccGetByStartTs:
e = resp.MvccGetByStartTS.GetRegionError()
case CmdSplitRegion:
e = resp.SplitRegion.GetRegionError()
default:
return nil, fmt.Errorf("invalid response type %v", resp.Type)
}

View File

@ -513,6 +513,14 @@ func GenTableIndexPrefix(tableID int64) kv.Key {
return appendTableIndexPrefix(buf, tableID)
}
// GenTablePrefix composes table record and index prefix: "t[tableID]".
func GenTablePrefix(tableID int64) kv.Key {
buf := make([]byte, 0, len(tablePrefix)+8)
buf = append(buf, tablePrefix...)
buf = codec.EncodeInt(buf, tableID)
return buf
}
// TruncateToRowKeyLen truncates the key to row key length if the key is longer than row key.
func TruncateToRowKeyLen(key kv.Key) kv.Key {
if len(key) > recordRowKeyLen {

View File

@ -318,6 +318,7 @@ func setGlobalVars() {
statsLeaseDuration := parseLease(cfg.Performance.StatsLease)
tidb.SetStatsLease(statsLeaseDuration)
ddl.RunWorker = cfg.RunDDL
ddl.EnableSplitTableRegion = cfg.SplitTable
tidb.SetCommitRetryLimit(cfg.Performance.RetryLimit)
plan.JoinConcurrency = cfg.Performance.JoinConcurrency
plan.AllowCartesianProduct = cfg.Performance.CrossJoin