diff --git a/_vendor/src/github.com/pingcap/kvproto/pkg/eraftpb/eraftpb.pb.go b/_vendor/src/github.com/pingcap/kvproto/pkg/eraftpb/eraftpb.pb.go index 552a9050222..a312ad02eea 100644 --- a/_vendor/src/github.com/pingcap/kvproto/pkg/eraftpb/eraftpb.pb.go +++ b/_vendor/src/github.com/pingcap/kvproto/pkg/eraftpb/eraftpb.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: eraftpb.proto -// DO NOT EDIT! /* Package eraftpb is a generated protocol buffer package. @@ -812,24 +811,6 @@ func (m *ConfChange) MarshalTo(dAtA []byte) (int, error) { return i, nil } -func encodeFixed64Eraftpb(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Eraftpb(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintEraftpb(dAtA []byte, offset int, v uint64) int { for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) @@ -1852,7 +1833,24 @@ func (m *ConfState) Unmarshal(dAtA []byte) error { } switch fieldNum { case 1: - if wireType == 2 { + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEraftpb + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Nodes = append(m.Nodes, v) + } else if wireType == 2 { var packedLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { @@ -1893,7 +1891,11 @@ func (m *ConfState) Unmarshal(dAtA []byte) error { } m.Nodes = append(m.Nodes, v) } - } else if wireType == 0 { + } else { + return fmt.Errorf("proto: wrong wireType = %d for field Nodes", wireType) + } + case 2: + if wireType == 0 { var v uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { @@ -1909,12 +1911,8 @@ func (m *ConfState) Unmarshal(dAtA []byte) error { break } } - m.Nodes = append(m.Nodes, v) - } else { - return fmt.Errorf("proto: wrong wireType = %d for field Nodes", wireType) - } - case 2: - if wireType == 2 { + m.Learners = append(m.Learners, v) + } else if wireType == 2 { var packedLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { @@ -1955,23 +1953,6 @@ func (m *ConfState) Unmarshal(dAtA []byte) error { } m.Learners = append(m.Learners, v) } - } else if wireType == 0 { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEraftpb - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Learners = append(m.Learners, v) } else { return fmt.Errorf("proto: wrong wireType = %d for field Learners", wireType) } diff --git a/_vendor/src/github.com/pingcap/kvproto/pkg/metapb/metapb.pb.go b/_vendor/src/github.com/pingcap/kvproto/pkg/metapb/metapb.pb.go index 3da13857558..62687c68721 100644 --- a/_vendor/src/github.com/pingcap/kvproto/pkg/metapb/metapb.pb.go +++ b/_vendor/src/github.com/pingcap/kvproto/pkg/metapb/metapb.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: metapb.proto -// DO NOT EDIT! /* Package metapb is a generated protocol buffer package. @@ -477,24 +476,6 @@ func (m *Peer) MarshalTo(dAtA []byte) (int, error) { return i, nil } -func encodeFixed64Metapb(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Metapb(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintMetapb(dAtA []byte, offset int, v uint64) int { for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) diff --git a/_vendor/src/github.com/pingcap/kvproto/pkg/pdpb/pdpb.pb.go b/_vendor/src/github.com/pingcap/kvproto/pkg/pdpb/pdpb.pb.go index b64335a8380..7d51a66c15e 100644 --- a/_vendor/src/github.com/pingcap/kvproto/pkg/pdpb/pdpb.pb.go +++ b/_vendor/src/github.com/pingcap/kvproto/pkg/pdpb/pdpb.pb.go @@ -47,6 +47,8 @@ StoreStats StoreHeartbeatRequest StoreHeartbeatResponse + ScatterRegionRequest + ScatterRegionResponse */ package pdpb @@ -1232,6 +1234,64 @@ func (m *StoreHeartbeatResponse) GetHeader() *ResponseHeader { return nil } +type ScatterRegionRequest struct { + Header *RequestHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + RegionId uint64 `protobuf:"varint,2,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` + // PD will use these region information if it can't find the region. + // For example, the region is just split and hasn't report to PD yet. + Region *metapb.Region `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + Leader *metapb.Peer `protobuf:"bytes,4,opt,name=leader" json:"leader,omitempty"` +} + +func (m *ScatterRegionRequest) Reset() { *m = ScatterRegionRequest{} } +func (m *ScatterRegionRequest) String() string { return proto.CompactTextString(m) } +func (*ScatterRegionRequest) ProtoMessage() {} +func (*ScatterRegionRequest) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{38} } + +func (m *ScatterRegionRequest) GetHeader() *RequestHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *ScatterRegionRequest) GetRegionId() uint64 { + if m != nil { + return m.RegionId + } + return 0 +} + +func (m *ScatterRegionRequest) GetRegion() *metapb.Region { + if m != nil { + return m.Region + } + return nil +} + +func (m *ScatterRegionRequest) GetLeader() *metapb.Peer { + if m != nil { + return m.Leader + } + return nil +} + +type ScatterRegionResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *ScatterRegionResponse) Reset() { *m = ScatterRegionResponse{} } +func (m *ScatterRegionResponse) String() string { return proto.CompactTextString(m) } +func (*ScatterRegionResponse) ProtoMessage() {} +func (*ScatterRegionResponse) Descriptor() ([]byte, []int) { return fileDescriptorPdpb, []int{39} } + +func (m *ScatterRegionResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + func init() { proto.RegisterType((*RequestHeader)(nil), "pdpb.RequestHeader") proto.RegisterType((*ResponseHeader)(nil), "pdpb.ResponseHeader") @@ -1271,6 +1331,8 @@ func init() { proto.RegisterType((*StoreStats)(nil), "pdpb.StoreStats") proto.RegisterType((*StoreHeartbeatRequest)(nil), "pdpb.StoreHeartbeatRequest") proto.RegisterType((*StoreHeartbeatResponse)(nil), "pdpb.StoreHeartbeatResponse") + proto.RegisterType((*ScatterRegionRequest)(nil), "pdpb.ScatterRegionRequest") + proto.RegisterType((*ScatterRegionResponse)(nil), "pdpb.ScatterRegionResponse") proto.RegisterEnum("pdpb.ErrorType", ErrorType_name, ErrorType_value) } @@ -1302,6 +1364,7 @@ type PDClient interface { ReportSplit(ctx context.Context, in *ReportSplitRequest, opts ...grpc.CallOption) (*ReportSplitResponse, error) GetClusterConfig(ctx context.Context, in *GetClusterConfigRequest, opts ...grpc.CallOption) (*GetClusterConfigResponse, error) PutClusterConfig(ctx context.Context, in *PutClusterConfigRequest, opts ...grpc.CallOption) (*PutClusterConfigResponse, error) + ScatterRegion(ctx context.Context, in *ScatterRegionRequest, opts ...grpc.CallOption) (*ScatterRegionResponse, error) } type pDClient struct { @@ -1491,6 +1554,15 @@ func (c *pDClient) PutClusterConfig(ctx context.Context, in *PutClusterConfigReq return out, nil } +func (c *pDClient) ScatterRegion(ctx context.Context, in *ScatterRegionRequest, opts ...grpc.CallOption) (*ScatterRegionResponse, error) { + out := new(ScatterRegionResponse) + err := grpc.Invoke(ctx, "/pdpb.PD/ScatterRegion", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for PD service type PDServer interface { @@ -1511,6 +1583,7 @@ type PDServer interface { ReportSplit(context.Context, *ReportSplitRequest) (*ReportSplitResponse, error) GetClusterConfig(context.Context, *GetClusterConfigRequest) (*GetClusterConfigResponse, error) PutClusterConfig(context.Context, *PutClusterConfigRequest) (*PutClusterConfigResponse, error) + ScatterRegion(context.Context, *ScatterRegionRequest) (*ScatterRegionResponse, error) } func RegisterPDServer(s *grpc.Server, srv PDServer) { @@ -1803,6 +1876,24 @@ func _PD_PutClusterConfig_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } +func _PD_ScatterRegion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ScatterRegionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PDServer).ScatterRegion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pdpb.PD/ScatterRegion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PDServer).ScatterRegion(ctx, req.(*ScatterRegionRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _PD_serviceDesc = grpc.ServiceDesc{ ServiceName: "pdpb.PD", HandlerType: (*PDServer)(nil), @@ -1859,6 +1950,10 @@ var _PD_serviceDesc = grpc.ServiceDesc{ MethodName: "PutClusterConfig", Handler: _PD_PutClusterConfig_Handler, }, + { + MethodName: "ScatterRegion", + Handler: _PD_ScatterRegion_Handler, + }, }, Streams: []grpc.StreamDesc{ { @@ -3377,6 +3472,87 @@ func (m *StoreHeartbeatResponse) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *ScatterRegionRequest) 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 *ScatterRegionRequest) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) + n56, err := m.Header.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n56 + } + if m.RegionId != 0 { + dAtA[i] = 0x10 + i++ + i = encodeVarintPdpb(dAtA, i, uint64(m.RegionId)) + } + if m.Region != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintPdpb(dAtA, i, uint64(m.Region.Size())) + n57, err := m.Region.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n57 + } + if m.Leader != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintPdpb(dAtA, i, uint64(m.Leader.Size())) + n58, err := m.Leader.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n58 + } + return i, nil +} + +func (m *ScatterRegionResponse) 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 *ScatterRegionResponse) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintPdpb(dAtA, i, uint64(m.Header.Size())) + n59, err := m.Header.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n59 + } + return i, nil +} + func encodeFixed64Pdpb(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) dAtA[offset+1] = uint8(v >> 8) @@ -3998,6 +4174,37 @@ func (m *StoreHeartbeatResponse) Size() (n int) { return n } +func (m *ScatterRegionRequest) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovPdpb(uint64(l)) + } + if m.RegionId != 0 { + n += 1 + sovPdpb(uint64(m.RegionId)) + } + if m.Region != nil { + l = m.Region.Size() + n += 1 + l + sovPdpb(uint64(l)) + } + if m.Leader != nil { + l = m.Leader.Size() + n += 1 + l + sovPdpb(uint64(l)) + } + return n +} + +func (m *ScatterRegionResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovPdpb(uint64(l)) + } + return n +} + func sovPdpb(x uint64) (n int) { for { n++ @@ -8629,6 +8836,257 @@ func (m *StoreHeartbeatResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *ScatterRegionRequest) 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 ErrIntOverflowPdpb + } + 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: ScatterRegionRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ScatterRegionRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPdpb + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPdpb + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &RequestHeader{} + } + if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RegionId", wireType) + } + m.RegionId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPdpb + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.RegionId |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Region", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPdpb + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPdpb + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Region == nil { + m.Region = &metapb.Region{} + } + if err := m.Region.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Leader", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPdpb + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPdpb + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Leader == nil { + m.Leader = &metapb.Peer{} + } + if err := m.Leader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipPdpb(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthPdpb + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ScatterRegionResponse) 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 ErrIntOverflowPdpb + } + 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: ScatterRegionResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ScatterRegionResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPdpb + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPdpb + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipPdpb(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthPdpb + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipPdpb(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 @@ -8737,114 +9195,117 @@ var ( func init() { proto.RegisterFile("pdpb.proto", fileDescriptorPdpb) } var fileDescriptorPdpb = []byte{ - // 1741 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0xcd, 0x6e, 0x23, 0xc7, - 0x11, 0xd6, 0xf0, 0x4f, 0x64, 0xf1, 0x77, 0x7b, 0xb5, 0xd2, 0x98, 0xbb, 0x52, 0xe4, 0x5e, 0x23, - 0x58, 0x3b, 0x36, 0xb3, 0x56, 0x80, 0xc0, 0x80, 0xe1, 0xc0, 0xfa, 0x5b, 0xaf, 0xb0, 0x5e, 0x51, - 0x68, 0xd2, 0x30, 0x7c, 0x09, 0x33, 0xe4, 0xb4, 0xa8, 0x89, 0xc8, 0x99, 0xf1, 0x74, 0x73, 0x15, - 0xee, 0x29, 0xa7, 0x5c, 0x12, 0x20, 0x39, 0x05, 0x79, 0x81, 0x3c, 0x46, 0xee, 0x39, 0xe6, 0x11, - 0x82, 0xcd, 0x39, 0xef, 0x10, 0x74, 0xf7, 0xf4, 0xfc, 0x91, 0xda, 0x28, 0xb3, 0xf1, 0x89, 0xec, - 0xaa, 0xea, 0xaf, 0xbf, 0xae, 0xae, 0xaa, 0xee, 0x1a, 0x00, 0xdf, 0xf6, 0xc7, 0x3d, 0x3f, 0xf0, - 0xb8, 0x87, 0x4a, 0xe2, 0x7f, 0xb7, 0x31, 0xa7, 0xdc, 0xd2, 0xb2, 0x6e, 0x93, 0x06, 0xd6, 0x25, - 0x8f, 0x86, 0x5b, 0x53, 0x6f, 0xea, 0xc9, 0xbf, 0x3f, 0x15, 0xff, 0x94, 0x14, 0xf7, 0xa0, 0x49, - 0xe8, 0xf7, 0x0b, 0xca, 0xf8, 0x73, 0x6a, 0xd9, 0x34, 0x40, 0xbb, 0x00, 0x93, 0xd9, 0x82, 0x71, - 0x1a, 0x8c, 0x1c, 0xdb, 0x34, 0xf6, 0x8d, 0x27, 0x25, 0x52, 0x0b, 0x25, 0x67, 0x36, 0x26, 0xd0, - 0x22, 0x94, 0xf9, 0x9e, 0xcb, 0xe8, 0x9d, 0x26, 0xa0, 0xf7, 0xa1, 0x4c, 0x83, 0xc0, 0x0b, 0xcc, - 0xc2, 0xbe, 0xf1, 0xa4, 0x7e, 0x50, 0xef, 0x49, 0xd6, 0xa7, 0x42, 0x44, 0x94, 0x06, 0x3f, 0x83, - 0xb2, 0x1c, 0xa3, 0xc7, 0x50, 0xe2, 0x4b, 0x9f, 0x4a, 0x90, 0xd6, 0x41, 0x3b, 0x61, 0x3a, 0x5c, - 0xfa, 0x94, 0x48, 0x25, 0x32, 0x61, 0x73, 0x4e, 0x19, 0xb3, 0xa6, 0x54, 0x42, 0xd6, 0x88, 0x1e, - 0xe2, 0x3e, 0xc0, 0x90, 0x79, 0xe1, 0x76, 0xd0, 0x4f, 0xa0, 0x72, 0x25, 0x19, 0x4a, 0xb8, 0xfa, - 0xc1, 0x7d, 0x05, 0x97, 0xda, 0x2d, 0x09, 0x4d, 0xd0, 0x16, 0x94, 0x27, 0xde, 0xc2, 0xe5, 0x12, - 0xb2, 0x49, 0xd4, 0x00, 0x1f, 0x42, 0x6d, 0xe8, 0xcc, 0x29, 0xe3, 0xd6, 0xdc, 0x47, 0x5d, 0xa8, - 0xfa, 0x57, 0x4b, 0xe6, 0x4c, 0xac, 0x99, 0x44, 0x2c, 0x92, 0x68, 0x2c, 0x38, 0xcd, 0xbc, 0xa9, - 0x54, 0x15, 0xa4, 0x4a, 0x0f, 0xf1, 0x6f, 0x0d, 0xa8, 0x4b, 0x52, 0xca, 0x67, 0xe8, 0xe3, 0x0c, - 0xab, 0x2d, 0xcd, 0x2a, 0xe9, 0xd3, 0xb7, 0xd3, 0x42, 0x9f, 0x40, 0x8d, 0x6b, 0x5a, 0x66, 0x51, - 0xc2, 0x84, 0xbe, 0x8a, 0xd8, 0x92, 0xd8, 0x02, 0xff, 0xc1, 0x80, 0xce, 0x91, 0xe7, 0x71, 0xc6, - 0x03, 0xcb, 0xcf, 0xe5, 0x9d, 0xc7, 0x50, 0x66, 0xdc, 0x0b, 0x68, 0x78, 0x86, 0xcd, 0x5e, 0x18, - 0x67, 0x03, 0x21, 0x24, 0x4a, 0x87, 0x7e, 0x0c, 0x95, 0x80, 0x4e, 0x1d, 0xcf, 0x0d, 0x29, 0xb5, - 0xb4, 0x15, 0x91, 0x52, 0x12, 0x6a, 0xf1, 0x21, 0xdc, 0x4b, 0xb0, 0xc9, 0xe3, 0x16, 0x7c, 0x02, - 0x0f, 0xce, 0x58, 0x04, 0xe2, 0x53, 0x3b, 0xcf, 0xae, 0xf0, 0xaf, 0x61, 0x3b, 0x8b, 0x92, 0xeb, - 0x90, 0x30, 0x34, 0xc6, 0x09, 0x14, 0xe9, 0xa4, 0x2a, 0x49, 0xc9, 0xf0, 0x17, 0xd0, 0x3a, 0x9c, - 0xcd, 0xbc, 0xc9, 0xd9, 0x49, 0x2e, 0xaa, 0x7d, 0x68, 0x47, 0xd3, 0x73, 0x71, 0x6c, 0x41, 0xc1, - 0x51, 0xcc, 0x4a, 0xa4, 0xe0, 0xd8, 0xf8, 0x3b, 0x68, 0x7f, 0x45, 0xb9, 0x3a, 0xbf, 0x3c, 0x11, - 0xf1, 0x1e, 0x54, 0xe5, 0xa9, 0x8f, 0x22, 0xd4, 0x4d, 0x39, 0x3e, 0xb3, 0x31, 0x85, 0x4e, 0x0c, - 0x9d, 0x8b, 0xec, 0x5d, 0xc2, 0x0d, 0x4f, 0xa0, 0x7d, 0xb1, 0x78, 0x87, 0x1d, 0xdc, 0x69, 0x91, - 0x2f, 0xa1, 0x13, 0x2f, 0x92, 0x2b, 0x54, 0x7f, 0x29, 0xbd, 0x11, 0xa6, 0x40, 0x1e, 0x9e, 0xbb, - 0x00, 0x2a, 0x71, 0x46, 0xd7, 0x74, 0x29, 0xc9, 0x36, 0x48, 0x4d, 0x49, 0x5e, 0xd0, 0x25, 0xfe, - 0xa3, 0x01, 0xf7, 0x12, 0x0b, 0xe4, 0xf2, 0x77, 0x9c, 0xb9, 0x85, 0xb7, 0x65, 0x2e, 0xfa, 0x00, - 0x2a, 0x33, 0x85, 0xaa, 0x32, 0xbc, 0xa1, 0xed, 0x2e, 0xa8, 0x40, 0x53, 0x3a, 0xfc, 0x2b, 0xd8, - 0x8a, 0x08, 0x1d, 0x2d, 0xf3, 0x05, 0x3c, 0x7a, 0x08, 0xe1, 0x1e, 0xe3, 0x00, 0xab, 0x2a, 0xc1, - 0x99, 0x8d, 0x9f, 0xc1, 0xce, 0x57, 0x94, 0x1f, 0xab, 0x2b, 0xe6, 0xd8, 0x73, 0x2f, 0x9d, 0x69, - 0xae, 0xac, 0x62, 0x60, 0xae, 0xe2, 0xe4, 0xf2, 0xe0, 0x87, 0xb0, 0x19, 0xde, 0x78, 0xa1, 0x0b, - 0xdb, 0xda, 0x35, 0x21, 0x3a, 0xd1, 0x7a, 0xfc, 0x3d, 0xec, 0x5c, 0x2c, 0xde, 0x9d, 0xfc, 0xff, - 0xb2, 0xe4, 0x73, 0x30, 0x57, 0x97, 0xcc, 0x15, 0xcd, 0x37, 0x50, 0x79, 0x49, 0xe7, 0x63, 0x1a, - 0x20, 0x04, 0x25, 0xd7, 0x9a, 0xab, 0xab, 0xba, 0x46, 0xe4, 0x7f, 0x71, 0x68, 0x73, 0xa9, 0x4d, - 0x1c, 0x9a, 0x12, 0x9c, 0xd9, 0x42, 0xe9, 0x53, 0x1a, 0x8c, 0x16, 0xc1, 0x8c, 0x99, 0xc5, 0xfd, - 0xe2, 0x93, 0x1a, 0xa9, 0x0a, 0xc1, 0x37, 0xc1, 0x8c, 0xa1, 0x1f, 0x41, 0x7d, 0x32, 0x73, 0xa8, - 0xcb, 0x95, 0xba, 0x24, 0xd5, 0xa0, 0x44, 0xc2, 0x00, 0x7f, 0x29, 0xa3, 0x5c, 0xad, 0xcd, 0x72, - 0x1d, 0xf6, 0x9f, 0x0c, 0x40, 0x49, 0x88, 0x9c, 0x99, 0xb2, 0xa9, 0x36, 0xc4, 0xcc, 0xc2, 0x7e, - 0x51, 0xa6, 0x80, 0x34, 0x57, 0xa8, 0x44, 0x2b, 0xd7, 0x64, 0x4a, 0xd2, 0x4c, 0x67, 0xca, 0x05, - 0xd4, 0x44, 0xe6, 0x0c, 0xb8, 0xc5, 0x19, 0xda, 0x87, 0x92, 0x70, 0x47, 0x48, 0x23, 0x9d, 0x5a, - 0x52, 0x83, 0xde, 0x87, 0x86, 0xed, 0xdd, 0xb8, 0x23, 0x46, 0x27, 0x9e, 0x6b, 0xb3, 0xd0, 0xc3, - 0x75, 0x21, 0x1b, 0x28, 0x11, 0xfe, 0x6b, 0x11, 0xb6, 0x55, 0xe6, 0x3d, 0xa7, 0x56, 0xc0, 0xc7, - 0xd4, 0xe2, 0xb9, 0x82, 0xeb, 0xff, 0x5a, 0x11, 0x50, 0x0f, 0x40, 0x12, 0x17, 0xbb, 0x50, 0x87, - 0x1b, 0x3d, 0x58, 0xa2, 0xfd, 0x93, 0x9a, 0x30, 0x11, 0x43, 0x86, 0x3e, 0x85, 0xa6, 0x4f, 0x5d, - 0xdb, 0x71, 0xa7, 0xe1, 0x94, 0x72, 0xe8, 0xeb, 0x24, 0x78, 0x23, 0x34, 0x51, 0x53, 0x1e, 0x43, - 0x73, 0xbc, 0xe4, 0x94, 0x8d, 0x6e, 0x02, 0x87, 0x73, 0xea, 0x9a, 0x15, 0xe9, 0x9c, 0x86, 0x14, - 0x7e, 0xab, 0x64, 0xa2, 0x94, 0x2a, 0xa3, 0x80, 0x5a, 0xb6, 0xb9, 0xa9, 0x5e, 0xaa, 0x52, 0x42, - 0xa8, 0x25, 0x5e, 0xaa, 0x8d, 0x6b, 0xba, 0x8c, 0x21, 0xaa, 0xca, 0xbf, 0x42, 0xa6, 0x11, 0x1e, - 0x42, 0x4d, 0x9a, 0x48, 0x80, 0x9a, 0x8a, 0x70, 0x21, 0x90, 0xf3, 0x3f, 0x84, 0x8e, 0xe5, 0xfb, - 0x81, 0xf7, 0x1b, 0x67, 0x6e, 0x71, 0x3a, 0x62, 0xce, 0x6b, 0x6a, 0x82, 0xb4, 0x69, 0x27, 0xe4, - 0x03, 0xe7, 0x35, 0xc5, 0x57, 0x00, 0xc7, 0x57, 0x96, 0x3b, 0xa5, 0x82, 0xfd, 0x1d, 0x8e, 0xfe, - 0x33, 0xa8, 0x4f, 0xa4, 0xfd, 0x48, 0xbe, 0x8f, 0x0b, 0xf2, 0x7d, 0xbc, 0xd3, 0xd3, 0x0f, 0x7c, - 0x91, 0xd3, 0x0a, 0x4f, 0xbe, 0x93, 0x61, 0x12, 0xfd, 0xc7, 0x07, 0xd0, 0x1a, 0x06, 0x96, 0xcb, - 0x2e, 0x69, 0xf0, 0xb5, 0x3a, 0x8d, 0xff, 0xba, 0x1a, 0xfe, 0x5b, 0x01, 0x76, 0x56, 0xa2, 0x28, - 0x57, 0xbe, 0x7c, 0x1a, 0xf1, 0x96, 0x4b, 0xaa, 0x60, 0xea, 0xa8, 0x29, 0xb1, 0x03, 0x34, 0x61, - 0xe9, 0x8c, 0x2f, 0xa0, 0xcd, 0x43, 0xc2, 0xa3, 0x54, 0x6c, 0x85, 0x2b, 0xa5, 0x77, 0x43, 0x5a, - 0x3c, 0xbd, 0xbb, 0xd4, 0xc5, 0x51, 0x4a, 0x5f, 0x1c, 0xe8, 0xe7, 0xd0, 0x08, 0x95, 0xd4, 0xf7, - 0x26, 0x57, 0x66, 0x39, 0xcc, 0x84, 0x54, 0x70, 0x9f, 0x0a, 0x15, 0xa9, 0x07, 0xf1, 0x00, 0x7d, - 0x02, 0x75, 0x6e, 0x05, 0x53, 0xca, 0xd5, 0x36, 0x2a, 0x6b, 0x3c, 0x07, 0xca, 0x40, 0xfc, 0xc7, - 0x97, 0xd0, 0x3e, 0x64, 0xd7, 0x03, 0x7f, 0xe6, 0xfc, 0xa0, 0xd9, 0x87, 0x7f, 0x67, 0x40, 0x27, - 0x5e, 0x28, 0xe7, 0xdb, 0xb5, 0xe9, 0xd2, 0x9b, 0x51, 0xf6, 0xae, 0xad, 0xbb, 0xf4, 0x86, 0x68, - 0xaf, 0xed, 0x43, 0x43, 0xd8, 0xc8, 0xea, 0xed, 0xd8, 0xaa, 0x78, 0x97, 0x08, 0xb8, 0xf4, 0x46, - 0xec, 0xf6, 0xcc, 0x66, 0xf8, 0xf7, 0x06, 0x20, 0x42, 0x7d, 0x2f, 0xe0, 0xf9, 0x37, 0x8d, 0xa1, - 0x34, 0xa3, 0x97, 0xfc, 0x96, 0x2d, 0x4b, 0x1d, 0xfa, 0x00, 0xca, 0x81, 0x33, 0xbd, 0xe2, 0xb7, - 0x74, 0x18, 0x4a, 0x89, 0x8f, 0xe1, 0x7e, 0x8a, 0x4c, 0xae, 0x9b, 0xee, 0xdf, 0x45, 0x00, 0xf9, - 0xee, 0x53, 0xd5, 0x39, 0xf9, 0xde, 0x35, 0x52, 0xef, 0x5d, 0xd1, 0x17, 0x4e, 0x2c, 0xdf, 0x9a, - 0x38, 0x7c, 0xa9, 0x2f, 0x3d, 0x3d, 0x46, 0x8f, 0xa0, 0x66, 0xbd, 0xb2, 0x9c, 0x99, 0x35, 0x9e, - 0x51, 0x49, 0xba, 0x44, 0x62, 0x81, 0x28, 0x38, 0xa1, 0xe3, 0x55, 0x93, 0x57, 0x92, 0x4d, 0x5e, - 0x18, 0x79, 0xc7, 0xb2, 0xd5, 0xfb, 0x18, 0x10, 0x0b, 0x4b, 0x21, 0x73, 0x2d, 0x3f, 0x34, 0x2c, - 0x4b, 0xc3, 0x4e, 0xa8, 0x19, 0xb8, 0x96, 0xaf, 0xac, 0x9f, 0xc2, 0x56, 0x40, 0x27, 0xd4, 0x79, - 0x95, 0xb1, 0xaf, 0x48, 0x7b, 0x14, 0xe9, 0xe2, 0x19, 0xbb, 0x00, 0x8c, 0x5b, 0x01, 0x1f, 0x89, - 0x76, 0x51, 0x96, 0xc4, 0x26, 0xa9, 0x49, 0x89, 0x68, 0x25, 0x51, 0x0f, 0xee, 0x5b, 0xbe, 0x3f, - 0x5b, 0x66, 0xf0, 0xaa, 0xd2, 0xee, 0x9e, 0x56, 0xc5, 0x70, 0x3b, 0xb0, 0xe9, 0xb0, 0xd1, 0x78, - 0xc1, 0x96, 0xb2, 0x3a, 0x56, 0x49, 0xc5, 0x61, 0x47, 0x0b, 0xb6, 0x14, 0x69, 0xb9, 0x60, 0xd4, - 0x4e, 0x16, 0xc5, 0xaa, 0x10, 0x88, 0x6a, 0xb8, 0x5a, 0xbc, 0xeb, 0x6b, 0x8a, 0x77, 0xb6, 0x3a, - 0x37, 0x56, 0xab, 0x73, 0xba, 0xbe, 0x37, 0xb3, 0xf5, 0x3d, 0x55, 0xbc, 0x5b, 0xe9, 0xe2, 0x8d, - 0x67, 0xf0, 0x40, 0x1e, 0xf7, 0xbb, 0xde, 0x9b, 0x65, 0x26, 0xe2, 0x25, 0x5d, 0xe9, 0xe2, 0x38, - 0x22, 0x4a, 0x8d, 0x9f, 0xc1, 0x76, 0x76, 0xb5, 0x3c, 0x51, 0xfa, 0x11, 0x85, 0x5a, 0xf4, 0x79, - 0x04, 0x55, 0xa0, 0xd0, 0x7f, 0xd1, 0xd9, 0x40, 0x75, 0xd8, 0xfc, 0xe6, 0xfc, 0xc5, 0x79, 0xff, - 0xdb, 0xf3, 0x8e, 0x81, 0xb6, 0xa0, 0x73, 0xde, 0x1f, 0x8e, 0x8e, 0xfa, 0xfd, 0xe1, 0x60, 0x48, - 0x0e, 0x2f, 0x2e, 0x4e, 0x4f, 0x3a, 0x05, 0x74, 0x1f, 0xda, 0x83, 0x61, 0x9f, 0x9c, 0x8e, 0x86, - 0xfd, 0x97, 0x47, 0x83, 0x61, 0xff, 0xfc, 0xb4, 0x53, 0x44, 0x26, 0x6c, 0x1d, 0x7e, 0x4d, 0x4e, - 0x0f, 0x4f, 0xbe, 0x4b, 0x9b, 0x97, 0x0e, 0xfe, 0x5c, 0x85, 0xc2, 0xc5, 0x09, 0x3a, 0x04, 0x88, - 0x5f, 0x50, 0x68, 0x47, 0x31, 0x5b, 0x79, 0x96, 0x75, 0xcd, 0x55, 0x85, 0x22, 0x8f, 0x37, 0xd0, - 0x53, 0x28, 0x0e, 0x99, 0x87, 0x42, 0xc7, 0xc4, 0x5f, 0x6b, 0xba, 0xf7, 0x12, 0x12, 0x6d, 0xfd, - 0xc4, 0x78, 0x6a, 0xa0, 0x5f, 0x40, 0x2d, 0xea, 0xd1, 0xd1, 0xb6, 0xb2, 0xca, 0x7e, 0xcd, 0xe8, - 0xee, 0xac, 0xc8, 0xa3, 0x15, 0x5f, 0x42, 0x2b, 0xdd, 0xe5, 0xa3, 0x87, 0xca, 0x78, 0xed, 0x17, - 0x84, 0xee, 0xa3, 0xf5, 0xca, 0x08, 0xee, 0x33, 0xd8, 0x0c, 0x3b, 0x71, 0x14, 0x1e, 0x4d, 0xba, - 0xaf, 0xef, 0x3e, 0xc8, 0x48, 0xa3, 0x99, 0x9f, 0x43, 0x55, 0xf7, 0xc5, 0xe8, 0x41, 0xe4, 0xa2, - 0x64, 0x03, 0xdb, 0xdd, 0xce, 0x8a, 0x93, 0x93, 0x75, 0x23, 0xaa, 0x27, 0x67, 0xba, 0x5f, 0x3d, - 0x39, 0xdb, 0xaf, 0x2a, 0x17, 0xa4, 0xa3, 0x4d, 0xbb, 0x60, 0x6d, 0xc4, 0x6b, 0x17, 0xac, 0x0f, - 0x50, 0xbc, 0x81, 0x86, 0xd0, 0xce, 0xbc, 0x0e, 0xd0, 0x23, 0x1d, 0xa5, 0xeb, 0x9e, 0x9e, 0xdd, - 0xdd, 0x5b, 0xb4, 0xd9, 0x73, 0x8e, 0xda, 0x46, 0x14, 0x3b, 0x22, 0xd5, 0x39, 0x77, 0x77, 0x56, - 0xe4, 0x11, 0xab, 0x67, 0xd0, 0x4c, 0xb5, 0x9d, 0xa8, 0x9b, 0xb1, 0x4d, 0xf4, 0xa2, 0x6f, 0xc3, - 0xf9, 0x1c, 0xaa, 0xfa, 0x4e, 0xd5, 0x9e, 0xce, 0x5c, 0xe6, 0xda, 0xd3, 0xd9, 0xab, 0x17, 0x6f, - 0xa0, 0x13, 0xa8, 0x27, 0xae, 0x1e, 0x64, 0xea, 0x8d, 0x67, 0xaf, 0xc6, 0xee, 0x7b, 0x6b, 0x34, - 0x11, 0xca, 0x40, 0x7e, 0x33, 0x48, 0xf5, 0x6b, 0x68, 0x37, 0x62, 0xbc, 0xae, 0x75, 0xec, 0xee, - 0xdd, 0xa6, 0x4e, 0x82, 0x66, 0x9b, 0x40, 0x0d, 0x7a, 0x4b, 0x3f, 0xaa, 0x41, 0x6f, 0xeb, 0x1d, - 0xf1, 0xc6, 0xd1, 0x47, 0x7f, 0x7f, 0xb3, 0x67, 0xfc, 0xe3, 0xcd, 0x9e, 0xf1, 0xcf, 0x37, 0x7b, - 0xc6, 0x5f, 0xfe, 0xb5, 0xb7, 0x01, 0xe6, 0xc4, 0x9b, 0xf7, 0x7c, 0xc7, 0x9d, 0x4e, 0x2c, 0xbf, - 0xc7, 0x9d, 0xeb, 0x57, 0xbd, 0xeb, 0x57, 0xf2, 0x4b, 0xf3, 0xb8, 0x22, 0x7f, 0x7e, 0xf6, 0x9f, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xc6, 0xc3, 0x58, 0x2b, 0xb7, 0x16, 0x00, 0x00, + // 1790 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x4b, 0x73, 0x23, 0xb7, + 0x11, 0xd6, 0xf0, 0x25, 0xb2, 0xf9, 0x5c, 0xac, 0x1e, 0x34, 0x77, 0xa5, 0xc8, 0x58, 0x57, 0x6a, + 0xed, 0xd8, 0xcc, 0x5a, 0xa9, 0x4a, 0xb9, 0xca, 0xe5, 0x94, 0xf5, 0x5a, 0xaf, 0xb2, 0x5e, 0x51, + 0x05, 0xd2, 0xe5, 0xf2, 0x25, 0xcc, 0x68, 0x06, 0xa2, 0x26, 0x22, 0x67, 0xc6, 0x03, 0x70, 0x15, + 0xee, 0x29, 0xa7, 0x5c, 0x92, 0xaa, 0xe4, 0x98, 0x3f, 0x90, 0x6b, 0xfe, 0x41, 0xee, 0x39, 0xe6, + 0x27, 0xa4, 0x36, 0xe7, 0xfc, 0x87, 0x14, 0x80, 0xc1, 0xbc, 0x48, 0x29, 0xca, 0x6c, 0x72, 0x9a, + 0x41, 0x77, 0xa3, 0xf1, 0xa1, 0xd1, 0xdd, 0xe8, 0x06, 0x80, 0x6f, 0xfb, 0x17, 0x7d, 0x3f, 0xf0, + 0xb8, 0x87, 0x4a, 0xe2, 0xbf, 0xd7, 0x98, 0x51, 0x6e, 0x6a, 0x5a, 0xaf, 0x49, 0x03, 0xf3, 0x92, + 0x47, 0xc3, 0x8d, 0x89, 0x37, 0xf1, 0xe4, 0xef, 0x8f, 0xc5, 0x9f, 0xa2, 0xe2, 0x3e, 0x34, 0x09, + 0xfd, 0x7e, 0x4e, 0x19, 0x7f, 0x41, 0x4d, 0x9b, 0x06, 0x68, 0x07, 0xc0, 0x9a, 0xce, 0x19, 0xa7, + 0xc1, 0xd8, 0xb1, 0xbb, 0xc6, 0x9e, 0xf1, 0xb4, 0x44, 0x6a, 0x21, 0xe5, 0xd4, 0xc6, 0x04, 0x5a, + 0x84, 0x32, 0xdf, 0x73, 0x19, 0xbd, 0xd7, 0x04, 0xf4, 0x3e, 0x94, 0x69, 0x10, 0x78, 0x41, 0xb7, + 0xb0, 0x67, 0x3c, 0xad, 0xef, 0xd7, 0xfb, 0x12, 0xf5, 0x89, 0x20, 0x11, 0xc5, 0xc1, 0xcf, 0xa1, + 0x2c, 0xc7, 0xe8, 0x09, 0x94, 0xf8, 0xc2, 0xa7, 0x52, 0x49, 0x6b, 0xbf, 0x9d, 0x10, 0x1d, 0x2d, + 0x7c, 0x4a, 0x24, 0x13, 0x75, 0x61, 0x7d, 0x46, 0x19, 0x33, 0x27, 0x54, 0xaa, 0xac, 0x11, 0x3d, + 0xc4, 0x03, 0x80, 0x11, 0xf3, 0xc2, 0xed, 0xa0, 0x1f, 0x41, 0xe5, 0x4a, 0x22, 0x94, 0xea, 0xea, + 0xfb, 0x0f, 0x95, 0xba, 0xd4, 0x6e, 0x49, 0x28, 0x82, 0x36, 0xa0, 0x6c, 0x79, 0x73, 0x97, 0x4b, + 0x95, 0x4d, 0xa2, 0x06, 0xf8, 0x00, 0x6a, 0x23, 0x67, 0x46, 0x19, 0x37, 0x67, 0x3e, 0xea, 0x41, + 0xd5, 0xbf, 0x5a, 0x30, 0xc7, 0x32, 0xa7, 0x52, 0x63, 0x91, 0x44, 0x63, 0x81, 0x69, 0xea, 0x4d, + 0x24, 0xab, 0x20, 0x59, 0x7a, 0x88, 0x7f, 0x63, 0x40, 0x5d, 0x82, 0x52, 0x36, 0x43, 0x1f, 0x67, + 0x50, 0x6d, 0x68, 0x54, 0x49, 0x9b, 0xde, 0x0d, 0x0b, 0x7d, 0x02, 0x35, 0xae, 0x61, 0x75, 0x8b, + 0x52, 0x4d, 0x68, 0xab, 0x08, 0x2d, 0x89, 0x25, 0xf0, 0xef, 0x0d, 0xe8, 0x1c, 0x7a, 0x1e, 0x67, + 0x3c, 0x30, 0xfd, 0x5c, 0xd6, 0x79, 0x02, 0x65, 0xc6, 0xbd, 0x80, 0x86, 0x67, 0xd8, 0xec, 0x87, + 0x7e, 0x36, 0x14, 0x44, 0xa2, 0x78, 0xe8, 0x87, 0x50, 0x09, 0xe8, 0xc4, 0xf1, 0xdc, 0x10, 0x52, + 0x4b, 0x4b, 0x11, 0x49, 0x25, 0x21, 0x17, 0x1f, 0xc0, 0x83, 0x04, 0x9a, 0x3c, 0x66, 0xc1, 0xc7, + 0xb0, 0x79, 0xca, 0x22, 0x25, 0x3e, 0xb5, 0xf3, 0xec, 0x0a, 0xff, 0x0a, 0xb6, 0xb2, 0x5a, 0x72, + 0x1d, 0x12, 0x86, 0xc6, 0x45, 0x42, 0x8b, 0x34, 0x52, 0x95, 0xa4, 0x68, 0xf8, 0x0b, 0x68, 0x1d, + 0x4c, 0xa7, 0x9e, 0x75, 0x7a, 0x9c, 0x0b, 0xea, 0x00, 0xda, 0xd1, 0xf4, 0x5c, 0x18, 0x5b, 0x50, + 0x70, 0x14, 0xb2, 0x12, 0x29, 0x38, 0x36, 0xfe, 0x0e, 0xda, 0x5f, 0x51, 0xae, 0xce, 0x2f, 0x8f, + 0x47, 0xbc, 0x07, 0x55, 0x79, 0xea, 0xe3, 0x48, 0xeb, 0xba, 0x1c, 0x9f, 0xda, 0x98, 0x42, 0x27, + 0x56, 0x9d, 0x0b, 0xec, 0x7d, 0xdc, 0x0d, 0x5b, 0xd0, 0x3e, 0x9f, 0xbf, 0xc3, 0x0e, 0xee, 0xb5, + 0xc8, 0x97, 0xd0, 0x89, 0x17, 0xc9, 0xe5, 0xaa, 0xbf, 0x90, 0xd6, 0x08, 0x43, 0x20, 0x0f, 0xce, + 0x1d, 0x00, 0x15, 0x38, 0xe3, 0x6b, 0xba, 0x90, 0x60, 0x1b, 0xa4, 0xa6, 0x28, 0x2f, 0xe9, 0x02, + 0xff, 0xc1, 0x80, 0x07, 0x89, 0x05, 0x72, 0xd9, 0x3b, 0x8e, 0xdc, 0xc2, 0x5d, 0x91, 0x8b, 0x3e, + 0x80, 0xca, 0x54, 0x69, 0x55, 0x11, 0xde, 0xd0, 0x72, 0xe7, 0x54, 0x68, 0x53, 0x3c, 0xfc, 0x4b, + 0xd8, 0x88, 0x00, 0x1d, 0x2e, 0xf2, 0x39, 0x3c, 0x7a, 0x04, 0xe1, 0x1e, 0x63, 0x07, 0xab, 0x2a, + 0xc2, 0xa9, 0x8d, 0x9f, 0xc3, 0xf6, 0x57, 0x94, 0x1f, 0xa9, 0x2b, 0xe6, 0xc8, 0x73, 0x2f, 0x9d, + 0x49, 0xae, 0xa8, 0x62, 0xd0, 0x5d, 0xd6, 0x93, 0xcb, 0x82, 0x1f, 0xc2, 0x7a, 0x78, 0xe3, 0x85, + 0x26, 0x6c, 0x6b, 0xd3, 0x84, 0xda, 0x89, 0xe6, 0xe3, 0xef, 0x61, 0xfb, 0x7c, 0xfe, 0xee, 0xe0, + 0xff, 0x9b, 0x25, 0x5f, 0x40, 0x77, 0x79, 0xc9, 0x5c, 0xde, 0x7c, 0x03, 0x95, 0x57, 0x74, 0x76, + 0x41, 0x03, 0x84, 0xa0, 0xe4, 0x9a, 0x33, 0x75, 0x55, 0xd7, 0x88, 0xfc, 0x17, 0x87, 0x36, 0x93, + 0xdc, 0xc4, 0xa1, 0x29, 0xc2, 0xa9, 0x2d, 0x98, 0x3e, 0xa5, 0xc1, 0x78, 0x1e, 0x4c, 0x59, 0xb7, + 0xb8, 0x57, 0x7c, 0x5a, 0x23, 0x55, 0x41, 0xf8, 0x26, 0x98, 0x32, 0xf4, 0x03, 0xa8, 0x5b, 0x53, + 0x87, 0xba, 0x5c, 0xb1, 0x4b, 0x92, 0x0d, 0x8a, 0x24, 0x04, 0xf0, 0x97, 0xd2, 0xcb, 0xd5, 0xda, + 0x2c, 0xd7, 0x61, 0xff, 0xd1, 0x00, 0x94, 0x54, 0x91, 0x33, 0x52, 0xd6, 0xd5, 0x86, 0x58, 0xb7, + 0xb0, 0x57, 0x94, 0x21, 0x20, 0xc5, 0x95, 0x56, 0xa2, 0x99, 0x2b, 0x22, 0x25, 0x29, 0xa6, 0x23, + 0xe5, 0x1c, 0x6a, 0x22, 0x72, 0x86, 0xdc, 0xe4, 0x0c, 0xed, 0x41, 0x49, 0x98, 0x23, 0x84, 0x91, + 0x0e, 0x2d, 0xc9, 0x41, 0xef, 0x43, 0xc3, 0xf6, 0x6e, 0xdc, 0x31, 0xa3, 0x96, 0xe7, 0xda, 0x2c, + 0xb4, 0x70, 0x5d, 0xd0, 0x86, 0x8a, 0x84, 0xff, 0x5c, 0x84, 0x2d, 0x15, 0x79, 0x2f, 0xa8, 0x19, + 0xf0, 0x0b, 0x6a, 0xf2, 0x5c, 0xce, 0xf5, 0x3f, 0xcd, 0x08, 0xa8, 0x0f, 0x20, 0x81, 0x8b, 0x5d, + 0xa8, 0xc3, 0x8d, 0x0a, 0x96, 0x68, 0xff, 0xa4, 0x26, 0x44, 0xc4, 0x90, 0xa1, 0x4f, 0xa1, 0xe9, + 0x53, 0xd7, 0x76, 0xdc, 0x49, 0x38, 0xa5, 0x1c, 0xda, 0x3a, 0xa9, 0xbc, 0x11, 0x8a, 0xa8, 0x29, + 0x4f, 0xa0, 0x79, 0xb1, 0xe0, 0x94, 0x8d, 0x6f, 0x02, 0x87, 0x73, 0xea, 0x76, 0x2b, 0xd2, 0x38, + 0x0d, 0x49, 0xfc, 0x56, 0xd1, 0x44, 0x2a, 0x55, 0x42, 0x01, 0x35, 0xed, 0xee, 0xba, 0xaa, 0x54, + 0x25, 0x85, 0x50, 0x53, 0x54, 0xaa, 0x8d, 0x6b, 0xba, 0x88, 0x55, 0x54, 0x95, 0x7d, 0x05, 0x4d, + 0x6b, 0x78, 0x04, 0x35, 0x29, 0x22, 0x15, 0xd4, 0x94, 0x87, 0x0b, 0x82, 0x9c, 0xff, 0x21, 0x74, + 0x4c, 0xdf, 0x0f, 0xbc, 0x5f, 0x3b, 0x33, 0x93, 0xd3, 0x31, 0x73, 0xde, 0xd0, 0x2e, 0x48, 0x99, + 0x76, 0x82, 0x3e, 0x74, 0xde, 0x50, 0x7c, 0x05, 0x70, 0x74, 0x65, 0xba, 0x13, 0x2a, 0xd0, 0xdf, + 0xe3, 0xe8, 0x3f, 0x83, 0xba, 0x25, 0xe5, 0xc7, 0xb2, 0x3e, 0x2e, 0xc8, 0xfa, 0x78, 0xbb, 0xaf, + 0x0b, 0x7c, 0x11, 0xd3, 0x4a, 0x9f, 0xac, 0x93, 0xc1, 0x8a, 0xfe, 0xf1, 0x3e, 0xb4, 0x46, 0x81, + 0xe9, 0xb2, 0x4b, 0x1a, 0x7c, 0xad, 0x4e, 0xe3, 0x3f, 0xae, 0x86, 0xff, 0x5a, 0x80, 0xed, 0x25, + 0x2f, 0xca, 0x15, 0x2f, 0x9f, 0x46, 0xb8, 0xe5, 0x92, 0xca, 0x99, 0x3a, 0x6a, 0x4a, 0x6c, 0x00, + 0x0d, 0x58, 0x1a, 0xe3, 0x0b, 0x68, 0xf3, 0x10, 0xf0, 0x38, 0xe5, 0x5b, 0xe1, 0x4a, 0xe9, 0xdd, + 0x90, 0x16, 0x4f, 0xef, 0x2e, 0x75, 0x71, 0x94, 0xd2, 0x17, 0x07, 0xfa, 0x29, 0x34, 0x42, 0x26, + 0xf5, 0x3d, 0xeb, 0xaa, 0x5b, 0x0e, 0x23, 0x21, 0xe5, 0xdc, 0x27, 0x82, 0x45, 0xea, 0x41, 0x3c, + 0x40, 0x9f, 0x40, 0x9d, 0x9b, 0xc1, 0x84, 0x72, 0xb5, 0x8d, 0xca, 0x0a, 0xcb, 0x81, 0x12, 0x10, + 0xff, 0xf8, 0x12, 0xda, 0x07, 0xec, 0x7a, 0xe8, 0x4f, 0x9d, 0xff, 0x6b, 0xf4, 0xe1, 0xdf, 0x1a, + 0xd0, 0x89, 0x17, 0xca, 0x59, 0xbb, 0x36, 0x5d, 0x7a, 0x33, 0xce, 0xde, 0xb5, 0x75, 0x97, 0xde, + 0x10, 0x6d, 0xb5, 0x3d, 0x68, 0x08, 0x19, 0x99, 0xbd, 0x1d, 0x5b, 0x25, 0xef, 0x12, 0x01, 0x97, + 0xde, 0x88, 0xdd, 0x9e, 0xda, 0x0c, 0xff, 0xce, 0x00, 0x44, 0xa8, 0xef, 0x05, 0x3c, 0xff, 0xa6, + 0x31, 0x94, 0xa6, 0xf4, 0x92, 0xdf, 0xb2, 0x65, 0xc9, 0x43, 0x1f, 0x40, 0x39, 0x70, 0x26, 0x57, + 0xfc, 0x96, 0x0e, 0x43, 0x31, 0xf1, 0x11, 0x3c, 0x4c, 0x81, 0xc9, 0x75, 0xd3, 0xfd, 0xab, 0x08, + 0x20, 0xeb, 0x3e, 0x95, 0x9d, 0x93, 0xf5, 0xae, 0x91, 0xaa, 0x77, 0x45, 0x5f, 0x68, 0x99, 0xbe, + 0x69, 0x39, 0x7c, 0xa1, 0x2f, 0x3d, 0x3d, 0x46, 0x8f, 0xa1, 0x66, 0xbe, 0x36, 0x9d, 0xa9, 0x79, + 0x31, 0xa5, 0x12, 0x74, 0x89, 0xc4, 0x04, 0x91, 0x70, 0x42, 0xc3, 0xab, 0x26, 0xaf, 0x24, 0x9b, + 0xbc, 0xd0, 0xf3, 0x8e, 0x64, 0xab, 0xf7, 0x31, 0x20, 0x16, 0xa6, 0x42, 0xe6, 0x9a, 0x7e, 0x28, + 0x58, 0x96, 0x82, 0x9d, 0x90, 0x33, 0x74, 0x4d, 0x5f, 0x49, 0x3f, 0x83, 0x8d, 0x80, 0x5a, 0xd4, + 0x79, 0x9d, 0x91, 0xaf, 0x48, 0x79, 0x14, 0xf1, 0xe2, 0x19, 0x3b, 0x00, 0x8c, 0x9b, 0x01, 0x1f, + 0x8b, 0x76, 0x51, 0xa6, 0xc4, 0x26, 0xa9, 0x49, 0x8a, 0x68, 0x25, 0x51, 0x1f, 0x1e, 0x9a, 0xbe, + 0x3f, 0x5d, 0x64, 0xf4, 0x55, 0xa5, 0xdc, 0x03, 0xcd, 0x8a, 0xd5, 0x6d, 0xc3, 0xba, 0xc3, 0xc6, + 0x17, 0x73, 0xb6, 0x90, 0xd9, 0xb1, 0x4a, 0x2a, 0x0e, 0x3b, 0x9c, 0xb3, 0x85, 0x08, 0xcb, 0x39, + 0xa3, 0x76, 0x32, 0x29, 0x56, 0x05, 0x41, 0x64, 0xc3, 0xe5, 0xe4, 0x5d, 0x5f, 0x91, 0xbc, 0xb3, + 0xd9, 0xb9, 0xb1, 0x9c, 0x9d, 0xd3, 0xf9, 0xbd, 0x99, 0xcd, 0xef, 0xa9, 0xe4, 0xdd, 0x4a, 0x27, + 0x6f, 0x3c, 0x85, 0x4d, 0x79, 0xdc, 0xef, 0x7a, 0x6f, 0x96, 0x99, 0xf0, 0x97, 0x74, 0xa6, 0x8b, + 0xfd, 0x88, 0x28, 0x36, 0x7e, 0x0e, 0x5b, 0xd9, 0xd5, 0x72, 0x79, 0xe9, 0x5f, 0x0c, 0xd8, 0x18, + 0x5a, 0x26, 0x17, 0xe5, 0x5e, 0xfe, 0x16, 0xe3, 0xae, 0x62, 0xfb, 0xbe, 0x6d, 0x7d, 0xa2, 0x14, + 0x28, 0xdd, 0xd1, 0x1c, 0x9c, 0xc0, 0x66, 0x06, 0x6f, 0x9e, 0x7d, 0x7f, 0x44, 0xa1, 0x16, 0x3d, + 0x0b, 0xa1, 0x0a, 0x14, 0x06, 0x2f, 0x3b, 0x6b, 0xa8, 0x0e, 0xeb, 0xdf, 0x9c, 0xbd, 0x3c, 0x1b, + 0x7c, 0x7b, 0xd6, 0x31, 0xd0, 0x06, 0x74, 0xce, 0x06, 0xa3, 0xf1, 0xe1, 0x60, 0x30, 0x1a, 0x8e, + 0xc8, 0xc1, 0xf9, 0xf9, 0xc9, 0x71, 0xa7, 0x80, 0x1e, 0x42, 0x7b, 0x38, 0x1a, 0x90, 0x93, 0xf1, + 0x68, 0xf0, 0xea, 0x70, 0x38, 0x1a, 0x9c, 0x9d, 0x74, 0x8a, 0xa8, 0x0b, 0x1b, 0x07, 0x5f, 0x93, + 0x93, 0x83, 0xe3, 0xef, 0xd2, 0xe2, 0xa5, 0xfd, 0xb7, 0x55, 0x28, 0x9c, 0x1f, 0xa3, 0x03, 0x80, + 0xb8, 0x72, 0x44, 0xdb, 0x0a, 0xd9, 0x52, 0x39, 0xda, 0xeb, 0x2e, 0x33, 0x14, 0x78, 0xbc, 0x86, + 0x9e, 0x41, 0x71, 0xc4, 0x3c, 0x14, 0x3a, 0x44, 0xfc, 0x4a, 0xd5, 0x7b, 0x90, 0xa0, 0x68, 0xe9, + 0xa7, 0xc6, 0x33, 0x03, 0xfd, 0x0c, 0x6a, 0xd1, 0xdb, 0x04, 0xda, 0x52, 0x52, 0xd9, 0x57, 0x9c, + 0xde, 0xf6, 0x12, 0x3d, 0x5a, 0xf1, 0x15, 0xb4, 0xd2, 0xaf, 0x1b, 0xe8, 0x91, 0x12, 0x5e, 0xf9, + 0x72, 0xd2, 0x7b, 0xbc, 0x9a, 0x19, 0xa9, 0xfb, 0x0c, 0xd6, 0xc3, 0x17, 0x08, 0x14, 0x1e, 0x4d, + 0xfa, 0x3d, 0xa3, 0xb7, 0x99, 0xa1, 0x46, 0x33, 0x3f, 0x87, 0xaa, 0x7e, 0x0f, 0x40, 0x9b, 0x91, + 0x89, 0x92, 0x8d, 0x7b, 0x6f, 0x2b, 0x4b, 0x4e, 0x4e, 0xd6, 0x0d, 0xb8, 0x9e, 0x9c, 0xe9, 0xfa, + 0xf5, 0xe4, 0x6c, 0x9f, 0xae, 0x4c, 0x90, 0x8e, 0x32, 0x6d, 0x82, 0x95, 0x91, 0xae, 0x4d, 0xb0, + 0x3a, 0x30, 0xf1, 0x1a, 0x1a, 0x41, 0x3b, 0x53, 0x15, 0xa1, 0xc7, 0xda, 0x4b, 0x57, 0x95, 0xdc, + 0xbd, 0x9d, 0x5b, 0xb8, 0xd9, 0x73, 0x8e, 0xda, 0x65, 0x14, 0x1b, 0x22, 0x15, 0xce, 0xbd, 0xed, + 0x25, 0x7a, 0x84, 0xea, 0x39, 0x34, 0x53, 0xed, 0x36, 0xea, 0x65, 0x64, 0x13, 0x3d, 0xf8, 0x5d, + 0x7a, 0x3e, 0x87, 0xaa, 0xae, 0x25, 0xb4, 0xa5, 0x33, 0x45, 0x8c, 0xb6, 0x74, 0xb6, 0xe4, 0xc0, + 0x6b, 0xe8, 0x18, 0xea, 0x89, 0x2b, 0x17, 0x75, 0xf5, 0xc6, 0xb3, 0x25, 0x41, 0xef, 0xbd, 0x15, + 0x9c, 0x48, 0xcb, 0x50, 0xbe, 0x95, 0xa4, 0xfa, 0x54, 0xb4, 0x13, 0x21, 0x5e, 0xd5, 0x32, 0xf7, + 0x76, 0x6f, 0x63, 0x27, 0x95, 0x66, 0x9b, 0x5f, 0xad, 0xf4, 0x96, 0x3e, 0x5c, 0x2b, 0xbd, 0xad, + 0x67, 0xc6, 0x6b, 0xe8, 0xe7, 0xd0, 0x4c, 0xa5, 0x31, 0x6d, 0xf4, 0x55, 0xb9, 0xb8, 0xf7, 0x68, + 0x25, 0x4f, 0xeb, 0x3a, 0xfc, 0xe8, 0x6f, 0x6f, 0x77, 0x8d, 0xbf, 0xbf, 0xdd, 0x35, 0xfe, 0xf1, + 0x76, 0xd7, 0xf8, 0xd3, 0x3f, 0x77, 0xd7, 0xa0, 0x6b, 0x79, 0xb3, 0xbe, 0xef, 0xb8, 0x13, 0xcb, + 0xf4, 0xfb, 0xdc, 0xb9, 0x7e, 0xdd, 0xbf, 0x7e, 0x2d, 0x5f, 0xeb, 0x2f, 0x2a, 0xf2, 0xf3, 0x93, + 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x52, 0xef, 0xd8, 0xe2, 0xfb, 0x17, 0x00, 0x00, } diff --git a/glide.lock b/glide.lock index f191b44dbcd..c755b49fb37 100644 --- a/glide.lock +++ b/glide.lock @@ -1,5 +1,5 @@ -hash: 95ae7782c331ed102d1bd2fbd8ecb19aea2c32362f22605d56d9f2f1c525336b -updated: 2017-10-31T16:57:26.468540848+08:00 +hash: c30dd3b9fe4c73d814af571afffa3b9d207f1509e0d8cc19ba85c8e6f2db8447 +updated: 2017-12-25T17:52:14.579735981+08:00 imports: - name: github.com/apache/thrift version: b2a4d4ae21c789b689dd162deb819665567f481c @@ -132,7 +132,6 @@ imports: subpackages: - tags - tracing/opentracing - - util/metautils - name: github.com/grpc-ecosystem/go-grpc-prometheus version: 6b7015e65d366bf3f19b2b2a000a831940f0f7e0 - name: github.com/grpc-ecosystem/grpc-gateway @@ -161,7 +160,7 @@ imports: - name: github.com/pingcap/check version: ce8a2f822ab1e245a4eefcef2996531c79c943f1 - name: github.com/pingcap/kvproto - version: e33073e1475021e04c795c3de5e1f4e28baa708a + version: eca6a87915b115e5d4a42ca0a573f3d51c0e62c4 subpackages: - pkg/coprocessor - pkg/eraftpb @@ -192,6 +191,8 @@ imports: version: abf152e5f3e97f2fafac028d2cc06c1feb87ffa5 - name: github.com/Sirupsen/logrus version: ba1b36c82c5e05c4f912a88eab0dcd91a171688f +- name: github.com/sirupsen/logrus + version: d682213848ed68c0a260ca37d6dd5ace8423f5ba - name: github.com/spf13/cobra version: 9495bc009a56819bdb0ddbc1a373e29c140bc674 repo: https://github.com/spf13/cobra.git @@ -212,10 +213,6 @@ imports: - thrift-gen/sampling - thrift-gen/zipkincore - utils -- name: github.com/uber/jaeger-lib - version: 3b2a9ad2a045881ab7a0f81d465be54c8292ee4f - subpackages: - - metrics - name: github.com/ugorji/go version: b94837a2404ab90efe9289e77a70694c355739cb subpackages: @@ -233,6 +230,7 @@ imports: subpackages: - bcrypt - blowfish + - ssh/terminal - name: golang.org/x/net version: d1e1b351919c6738fdeb9893d5c998b161464f0c repo: https://github.com/golang/net.git @@ -281,7 +279,7 @@ imports: - tap - transport - name: gopkg.in/natefinch/lumberjack.v2 - version: dd45e6a67c53f673bb49ca8a001fd3a63ceb640e + version: a96e63847dc3c67d17befa69c303767e2f84e54f - name: gopkg.in/yaml.v2 version: cd8b52f8269e0feb286dfeef29f8fe4d5b397e0b testImports: [] diff --git a/glide.yaml b/glide.yaml index 8d22a52a3aa..bcef051e079 100644 --- a/glide.yaml +++ b/glide.yaml @@ -114,7 +114,7 @@ import: - package: github.com/pingcap/check version: ce8a2f822ab1e245a4eefcef2996531c79c943f1 - package: github.com/pingcap/kvproto - version: e33073e1475021e04c795c3de5e1f4e28baa708a + version: eca6a87915b115e5d4a42ca0a573f3d51c0e62c4 subpackages: - pkg/coprocessor - pkg/eraftpb diff --git a/server/coordinator.go b/server/coordinator.go index cdd6b976f6b..ae48083f126 100644 --- a/server/coordinator.go +++ b/server/coordinator.go @@ -56,6 +56,7 @@ type coordinator struct { cluster *clusterInfo limiter *schedule.Limiter replicaChecker *schedule.ReplicaChecker + regionScatterer *schedule.RegionScatterer namespaceChecker *schedule.NamespaceChecker operators map[uint64]*schedule.Operator schedulers map[string]*scheduleController @@ -72,6 +73,7 @@ func newCoordinator(cluster *clusterInfo, hbStreams *heartbeatStreams, classifie cluster: cluster, limiter: schedule.NewLimiter(), replicaChecker: schedule.NewReplicaChecker(cluster, classifier), + regionScatterer: schedule.NewRegionScatterer(cluster, classifier), namespaceChecker: schedule.NewNamespaceChecker(cluster, classifier), operators: make(map[uint64]*schedule.Operator), schedulers: make(map[string]*scheduleController), diff --git a/server/grpc_service.go b/server/grpc_service.go index e95667c474d..5e366db8740 100644 --- a/server/grpc_service.go +++ b/server/grpc_service.go @@ -461,6 +461,35 @@ func (s *Server) PutClusterConfig(ctx context.Context, request *pdpb.PutClusterC }, nil } +// ScatterRegion implements gRPC PDServer. +func (s *Server) ScatterRegion(ctx context.Context, request *pdpb.ScatterRegionRequest) (*pdpb.ScatterRegionResponse, error) { + if err := s.validateRequest(request.GetHeader()); err != nil { + return nil, errors.Trace(err) + } + + cluster := s.GetRaftCluster() + if cluster == nil { + return &pdpb.ScatterRegionResponse{Header: s.notBootstrappedHeader()}, nil + } + + region := cluster.GetRegionInfoByID(request.GetRegionId()) + if region == nil { + if request.GetRegion() == nil { + return nil, errors.Errorf("region %d not found", request.GetRegionId()) + } + region = core.NewRegionInfo(request.GetRegion(), request.GetLeader()) + } + + co := cluster.coordinator + if op := co.regionScatterer.Scatter(region); op != nil { + co.addOperator(op) + } + + return &pdpb.ScatterRegionResponse{ + Header: s.header(), + }, nil +} + // validateRequest checks if Server is leader and clusterID is matched. // TODO: Call it in gRPC intercepter. func (s *Server) validateRequest(header *pdpb.RequestHeader) error { diff --git a/server/schedule/region_scatterer.go b/server/schedule/region_scatterer.go new file mode 100644 index 00000000000..2a0f31eb360 --- /dev/null +++ b/server/schedule/region_scatterer.go @@ -0,0 +1,177 @@ +// 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 schedule + +import ( + "math/rand" + "sync" + + "github.com/pingcap/kvproto/pkg/metapb" + "github.com/pingcap/pd/server/core" + "github.com/pingcap/pd/server/namespace" +) + +type selectedStores struct { + mu sync.Mutex + stores map[uint64]struct{} +} + +func newSelectedStores() *selectedStores { + return &selectedStores{ + stores: make(map[uint64]struct{}), + } +} + +func (s *selectedStores) put(id uint64) bool { + s.mu.Lock() + defer s.mu.Unlock() + if _, ok := s.stores[id]; ok { + return false + } + s.stores[id] = struct{}{} + return true +} + +func (s *selectedStores) reset() { + s.mu.Lock() + defer s.mu.Unlock() + s.stores = make(map[uint64]struct{}) +} + +func (s *selectedStores) newFilter() Filter { + s.mu.Lock() + defer s.mu.Unlock() + cloned := make(map[uint64]struct{}) + for id := range s.stores { + cloned[id] = struct{}{} + } + return NewExcludedFilter(nil, cloned) +} + +// RegionScatterer scatters regions. +type RegionScatterer struct { + cluster Cluster + classifier namespace.Classifier + filters []Filter + selected *selectedStores +} + +// NewRegionScatterer creates a region scatterer. +func NewRegionScatterer(cluster Cluster, classifier namespace.Classifier) *RegionScatterer { + filters := []Filter{ + NewStateFilter(), + NewHealthFilter(), + NewStorageThresholdFilter(), + } + + return &RegionScatterer{ + cluster: cluster, + classifier: classifier, + filters: filters, + selected: newSelectedStores(), + } +} + +// Scatter relocates the region. +func (r *RegionScatterer) Scatter(region *core.RegionInfo) *Operator { + if r.cluster.IsRegionHot(region.GetId()) { + return nil + } + + if len(region.GetPeers()) != r.cluster.GetMaxReplicas() { + return nil + } + + return r.scatterRegion(region) +} + +func (r *RegionScatterer) scatterRegion(region *core.RegionInfo) *Operator { + steps := make([]OperatorStep, 0, len(region.GetPeers())) + + stores := r.collectAvailableStores(region) + for _, peer := range region.GetPeers() { + if len(stores) == 0 { + // Reset selected stores if we have no available stores. + r.selected.reset() + stores = r.collectAvailableStores(region) + } + + if r.selected.put(peer.GetStoreId()) { + delete(stores, peer.GetStoreId()) + continue + } + newPeer := r.selectPeerToReplace(stores, region, peer) + if newPeer == nil { + continue + } + + // Remove it from stores and mark it as selected. + delete(stores, newPeer.GetStoreId()) + r.selected.put(newPeer.GetStoreId()) + + op := CreateMovePeerOperator("scatter-peer", region, OpAdmin, + peer.GetStoreId(), newPeer.GetStoreId(), newPeer.GetId()) + steps = append(steps, op.steps...) + } + + if len(steps) == 0 { + return nil + } + return NewOperator("scatter-region", region.GetId(), OpAdmin, steps...) +} + +func (r *RegionScatterer) selectPeerToReplace(stores map[uint64]*core.StoreInfo, region *core.RegionInfo, oldPeer *metapb.Peer) *metapb.Peer { + // scoreGuard guarantees that the distinct score will not decrease. + regionStores := r.cluster.GetRegionStores(region) + sourceStore := r.cluster.GetStore(oldPeer.GetStoreId()) + scoreGuard := NewDistinctScoreFilter(r.cluster.GetLocationLabels(), regionStores, sourceStore) + + candidates := make([]*core.StoreInfo, 0, len(stores)) + for _, store := range stores { + if scoreGuard.FilterTarget(r.cluster, store) { + continue + } + candidates = append(candidates, store) + } + + if len(candidates) == 0 { + return nil + } + + target := candidates[rand.Intn(len(candidates))] + newPeer, err := r.cluster.AllocPeer(target.GetId()) + if err != nil { + return nil + } + return newPeer +} + +func (r *RegionScatterer) collectAvailableStores(region *core.RegionInfo) map[uint64]*core.StoreInfo { + namespace := r.classifier.GetRegionNamespace(region) + filters := []Filter{ + r.selected.newFilter(), + NewExcludedFilter(nil, region.GetStoreIds()), + NewNamespaceFilter(r.classifier, namespace), + } + filters = append(filters, r.filters...) + + stores := r.cluster.GetStores() + targets := make(map[uint64]*core.StoreInfo, len(stores)) + for _, store := range stores { + if !FilterTarget(r.cluster, store, filters) { + targets[store.GetId()] = store + } + } + return targets +} diff --git a/server/schedulers/mockcluster.go b/server/schedulers/mockcluster.go index 472391135a3..4e00beb4f42 100644 --- a/server/schedulers/mockcluster.go +++ b/server/schedulers/mockcluster.go @@ -235,6 +235,35 @@ func (mc *mockCluster) newMockRegionInfo(regionID uint64, leaderID uint64, follo return core.NewRegionInfo(region, leader) } +func (mc *mockCluster) applyOperator(op *schedule.Operator) { + region := mc.GetRegion(op.RegionID()) + for !op.IsFinish() { + if step := op.Check(region); step != nil { + switch s := step.(type) { + case schedule.TransferLeader: + region.Leader = region.GetStorePeer(s.ToStore) + case schedule.AddPeer: + if region.GetStorePeer(s.ToStore) != nil { + panic("Add peer that exists") + } + peer := &metapb.Peer{ + Id: s.PeerID, + StoreId: s.ToStore, + } + region.Peers = append(region.Peers, peer) + case schedule.RemovePeer: + if region.GetStorePeer(s.FromStore) == nil { + panic("Remove peer that doesn't exist") + } + region.RemoveStorePeer(s.FromStore) + default: + panic("Unknown operator step") + } + } + } + mc.PutRegion(region) +} + func (mc *mockCluster) GetOpt() schedule.NamespaceOptions { return mc.MockSchedulerOptions } diff --git a/server/schedulers/scheduler_test.go b/server/schedulers/scheduler_test.go index 3ee05f45746..f3fb2dcde17 100644 --- a/server/schedulers/scheduler_test.go +++ b/server/schedulers/scheduler_test.go @@ -15,7 +15,9 @@ package schedulers import ( . "github.com/pingcap/check" + "github.com/pingcap/pd/server/namespace" "github.com/pingcap/pd/server/schedule" + log "github.com/sirupsen/logrus" ) var _ = Suite(&testShuffleLeaderSuite{}) @@ -110,3 +112,74 @@ func (s *testBalanceAdjacentRegionSuite) TestBalance(c *C) { c.Assert(sc.Schedule(tc, schedule.NewOpInfluence(nil, tc)), IsNil) } } + +type sequencer struct { + maxID uint64 + curID uint64 +} + +func newSequencer(maxID uint64) *sequencer { + return &sequencer{ + maxID: maxID, + curID: 0, + } +} + +func (s *sequencer) next() uint64 { + s.curID++ + if s.curID > s.maxID { + s.curID = 1 + } + return s.curID +} + +var _ = Suite(&testScatterRegionSuite{}) + +type testScatterRegionSuite struct{} + +func (s *testScatterRegionSuite) TestSixStores(c *C) { + s.scatter(c, 6, 4) +} + +func (s *testScatterRegionSuite) TestFiveStores(c *C) { + s.scatter(c, 5, 5) +} + +func (s *testScatterRegionSuite) scatter(c *C, numStores, numRegions uint64) { + opt := newTestScheduleConfig() + tc := newMockCluster(opt) + + // Add stores 1~6. + for i := uint64(1); i <= numStores; i++ { + tc.addRegionStore(i, 0) + } + + // Add regions 1~4. + seq := newSequencer(numStores) + for i := uint64(1); i <= numRegions; i++ { + tc.addLeaderRegion(i, seq.next(), seq.next(), seq.next()) + } + + scatterer := schedule.NewRegionScatterer(tc, namespace.DefaultClassifier) + + for i := uint64(1); i <= numRegions; i++ { + region := tc.GetRegion(i) + if op := scatterer.Scatter(region); op != nil { + log.Info(op) + tc.applyOperator(op) + } + } + + countPeers := make(map[uint64]uint64) + for i := uint64(1); i <= numRegions; i++ { + region := tc.GetRegion(i) + for _, peer := range region.GetPeers() { + countPeers[peer.GetStoreId()]++ + } + } + + // Each store should have the same number of peers. + for _, count := range countPeers { + c.Assert(count, Equals, numRegions*3/numStores) + } +}