Refactor master:index ids

Signed-off-by: neza2017 <yefu.chen@zilliz.com>
This commit is contained in:
neza2017 2021-02-09 13:11:55 +08:00 committed by yefu.chen
parent c2956dbe92
commit e2d8358cb4
10 changed files with 1586 additions and 1692 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -423,13 +423,13 @@ func TestGrpcService(t *testing.T) {
}
collMeta, err := core.MetaTable.GetCollectionByName("testColl")
assert.Nil(t, err)
assert.Equal(t, len(collMeta.IndexParams), 1)
assert.Equal(t, len(collMeta.FieldIndexes), 1)
rsp, err := cli.CreateIndex(req)
assert.Nil(t, err)
assert.Equal(t, rsp.ErrorCode, commonpb.ErrorCode_SUCCESS)
collMeta, err = core.MetaTable.GetCollectionByName("testColl")
assert.Nil(t, err)
assert.Equal(t, len(collMeta.IndexParams), 1)
assert.Equal(t, len(collMeta.FieldIndexes), 1)
binlogLock.Lock()
defer binlogLock.Unlock()

View File

@ -375,13 +375,14 @@ func (c *Core) startSegmentFlushCompletedLoop() {
if err != nil {
log.Printf("GetCollectionBySegmentID, error = %s ", err.Error())
}
for i, f := range coll.IndexParams {
for _, f := range coll.FieldIndexes {
fieldSch, err := GetFieldSchemaByID(coll, f.FiledID)
if err == nil {
t := &CreateIndexTask{
core: c,
segmentID: seg,
indexName: coll.IndexNames[i],
indexName: f.IndexInfo.IndexName,
indexID: f.IndexInfo.IndexID,
fieldSchema: fieldSch,
indexParams: nil,
}

View File

@ -591,8 +591,8 @@ func TestMasterService(t *testing.T) {
}
collMeta, err := core.MetaTable.GetCollectionByName("testColl")
assert.Nil(t, err)
assert.Equal(t, len(collMeta.IndexParams), 1)
assert.Equal(t, len(collMeta.IndexNames), 1)
assert.Equal(t, len(collMeta.FieldIndexes), 1)
assert.Equal(t, len(collMeta.FieldIndexes), 1)
rsp, err := core.CreateIndex(req)
assert.Nil(t, err)
@ -603,9 +603,9 @@ func TestMasterService(t *testing.T) {
assert.ElementsMatch(t, files, []string{"file0-100", "file1-100", "file2-100"})
collMeta, err = core.MetaTable.GetCollectionByName("testColl")
assert.Nil(t, err)
assert.Equal(t, len(collMeta.IndexParams), 2)
assert.Equal(t, len(collMeta.IndexNames), 2)
assert.Equal(t, collMeta.IndexNames[1], Params.DefaultIndexName)
assert.Equal(t, len(collMeta.FieldIndexes), 2)
assert.Equal(t, len(collMeta.FieldIndexes), 2)
assert.Equal(t, collMeta.FieldIndexes[1].IndexInfo.IndexName, Params.DefaultIndexName)
req.FieldName = "no field"
rsp, err = core.CreateIndex(req)

View File

@ -524,17 +524,19 @@ func (mt *metaTable) AddIndex(seg *pb.SegmentIndexInfo, idx *pb.IndexInfo) error
return errors.Errorf("index id = %d exist", seg.IndexID)
}
}
_, ok = mt.indexID2Meta[idx.IndexID]
if ok {
return errors.Errorf("index id = %d exist", idx.IndexID)
}
var k1, k2, v1, v2 string
(*(mt.segID2IndexMeta[seg.SegmentID]))[seg.IndexID] = *seg
mt.indexID2Meta[idx.IndexID] = *idx
k1 := path.Join(SegmentIndexMetaPrefix, strconv.FormatInt(seg.SegmentID, 10), strconv.FormatInt(seg.IndexID, 10))
v1 := proto.MarshalTextString(seg)
k2 := path.Join(IndexMetaPrefix, strconv.FormatInt(idx.IndexID, 10))
v2 := proto.MarshalTextString(idx)
meta := map[string]string{k1: v1, k2: v2}
k1 = path.Join(SegmentIndexMetaPrefix, strconv.FormatInt(seg.SegmentID, 10), strconv.FormatInt(seg.IndexID, 10))
v1 = proto.MarshalTextString(seg)
meta := map[string]string{k1: v1}
_, ok = mt.indexID2Meta[idx.IndexID]
if !ok {
mt.indexID2Meta[idx.IndexID] = *idx
k2 = path.Join(IndexMetaPrefix, strconv.FormatInt(idx.IndexID, 10))
v2 = proto.MarshalTextString(idx)
meta[k2] = v2
}
err := mt.client.MultiSave(meta)
if err != nil {
@ -635,7 +637,7 @@ func (mt *metaTable) unlockIsSegmentIndexed(segID typeutil.UniqueID, fieldSchema
}
// return segment ids, type params, error
func (mt *metaTable) GetNotIndexedSegments(collName string, fieldName string, indexParams []*commonpb.KeyValuePair, indexName string) ([]typeutil.UniqueID, schemapb.FieldSchema, error) {
func (mt *metaTable) GetNotIndexedSegments(collName string, fieldName string, idxInfo *pb.IndexInfo) ([]typeutil.UniqueID, schemapb.FieldSchema, error) {
mt.ddLock.Lock()
defer mt.ddLock.Unlock()
@ -653,23 +655,23 @@ func (mt *metaTable) GetNotIndexedSegments(collName string, fieldName string, in
}
exist := false
if indexParams != nil {
for _, f := range collMeta.IndexParams {
if idxInfo.IndexParams != nil {
for _, f := range collMeta.FieldIndexes {
if f.FiledID == fieldSchema.FieldID {
// (collMeta.IndexNames[i] == indexName)
if EqualKeyPairArray(f.IndexParams, indexParams) {
if EqualKeyPairArray(f.IndexInfo.IndexParams, idxInfo.IndexParams) {
exist = true
break
}
}
}
}
if !exist && indexParams != nil {
collMeta.IndexParams = append(collMeta.IndexParams, &pb.IndexParamsInfo{
FiledID: fieldSchema.FieldID,
IndexParams: indexParams,
})
collMeta.IndexNames = append(collMeta.IndexNames, indexName)
if !exist && idxInfo.IndexParams != nil {
idx := &pb.FieldIndexInfo{
FiledID: fieldSchema.FieldID,
IndexInfo: idxInfo,
}
collMeta.FieldIndexes = append(collMeta.FieldIndexes, idx)
mt.collID2Meta[collMeta.ID] = collMeta
k1 := path.Join(CollectionMetaPrefix, strconv.FormatInt(collMeta.ID, 10))
v1 := proto.MarshalTextString(&collMeta)
@ -687,7 +689,7 @@ func (mt *metaTable) GetNotIndexedSegments(collName string, fieldName string, in
partMeta, ok := mt.partitionID2Meta[partID]
if ok {
for _, segID := range partMeta.SegmentIDs {
if exist := mt.unlockIsSegmentIndexed(segID, &fieldSchema, indexParams); !exist {
if exist := mt.unlockIsSegmentIndexed(segID, &fieldSchema, idxInfo.IndexParams); !exist {
rstID = append(rstID, segID)
}
}

View File

@ -150,10 +150,15 @@ func TestMetaTable(t *testing.T) {
Value: "field110-v2",
},
}
idxInfo := &pb.IndexInfo{
IndexName: "field110",
IndexID: 2000,
IndexParams: params,
}
_, field, err := mt.GetNotIndexedSegments("collTest", "field110", params, "field110-idx")
_, field, err := mt.GetNotIndexedSegments("collTest", "field110", idxInfo)
assert.NotNil(t, err)
seg, field, err := mt.GetNotIndexedSegments("testColl", "field110", params, "field110-idx")
seg, field, err := mt.GetNotIndexedSegments("testColl", "field110", idxInfo)
assert.Nil(t, err)
assert.Equal(t, len(seg), 1)
assert.Equal(t, seg[0], int64(101))
@ -165,8 +170,9 @@ func TestMetaTable(t *testing.T) {
Value: "field110-v1",
},
}
idxInfo.IndexParams = params
seg, field, err = mt.GetNotIndexedSegments("testColl", "field110", params, "field110-idx")
seg, field, err = mt.GetNotIndexedSegments("testColl", "field110", idxInfo)
assert.Nil(t, err)
assert.Equal(t, len(seg), 2)
assert.Equal(t, seg[0], int64(100))

View File

@ -108,8 +108,7 @@ func (t *CreateCollectionReqTask) Execute() error {
Schema: &schema,
CreateTime: collTs,
PartitionIDs: make([]typeutil.UniqueID, 0, 16),
IndexParams: make([]*etcdpb.IndexParamsInfo, 0, 16),
IndexNames: make([]string, 0, 16),
FieldIndexes: make([]*etcdpb.FieldIndexInfo, 0, 16),
}
partMeta := etcdpb.PartitionInfo{
PartitionName: Params.DefaultPartitionName,
@ -119,12 +118,19 @@ func (t *CreateCollectionReqTask) Execute() error {
for _, field := range schema.Fields {
if field.DataType == schemapb.DataType_VECTOR_FLOAT || field.DataType == schemapb.DataType_VECTOR_BINARY {
if len(field.IndexParams) > 0 {
indexParam := &etcdpb.IndexParamsInfo{
FiledID: field.FieldID,
IndexParams: field.IndexParams,
idxID, err := t.core.idAllocator.AllocOne()
if err != nil {
return err
}
collMeta.IndexParams = append(collMeta.IndexParams, indexParam)
collMeta.IndexNames = append(collMeta.IndexNames, fmt.Sprintf("%s_index_%d", collMeta.Schema.Name, field.FieldID))
filedIdx := &etcdpb.FieldIndexInfo{
FiledID: field.FieldID,
IndexInfo: &etcdpb.IndexInfo{
IndexName: fmt.Sprintf("%s_index_%d", collMeta.Schema.Name, field.FieldID),
IndexID: idxID,
IndexParams: field.IndexParams,
},
}
collMeta.FieldIndexes = append(collMeta.FieldIndexes, filedIdx)
}
}
}
@ -585,7 +591,16 @@ func (t *CreateIndexReqTask) IgnoreTimeStamp() bool {
func (t *CreateIndexReqTask) Execute() error {
indexName := Params.DefaultIndexName //TODO, get name from request
segIDs, field, err := t.core.MetaTable.GetNotIndexedSegments(t.Req.CollectionName, t.Req.FieldName, t.Req.ExtraParams, indexName)
indexID, err := t.core.idAllocator.AllocOne()
if err != nil {
return err
}
idxInfo := &etcdpb.IndexInfo{
IndexName: indexName,
IndexID: indexID,
IndexParams: t.Req.ExtraParams,
}
segIDs, field, err := t.core.MetaTable.GetNotIndexedSegments(t.Req.CollectionName, t.Req.FieldName, idxInfo)
if err != nil {
return err
}
@ -597,6 +612,7 @@ func (t *CreateIndexReqTask) Execute() error {
core: t.core,
segmentID: seg,
indexName: indexName,
indexID: indexID,
fieldSchema: &field,
indexParams: t.Req.ExtraParams,
}
@ -644,6 +660,7 @@ type CreateIndexTask struct {
core *Core
segmentID typeutil.UniqueID
indexName string
indexID typeutil.UniqueID
fieldSchema *schemapb.FieldSchema
indexParams []*commonpb.KeyValuePair
}
@ -652,10 +669,6 @@ func (t *CreateIndexTask) BuildIndex() error {
if t.core.MetaTable.IsSegmentIndexed(t.segmentID, t.fieldSchema, t.indexParams) {
return nil
}
idxID, err := t.core.idAllocator.AllocOne()
if err != nil {
return err
}
binlogs, err := t.core.GetBinlogFilePathsFromDataServiceReq(t.segmentID, t.fieldSchema.FieldID)
if err != nil {
return err
@ -671,19 +684,19 @@ func (t *CreateIndexTask) BuildIndex() error {
})
}
}
bldID, err = t.core.BuildIndexReq(binlogs, t.fieldSchema.TypeParams, t.indexParams, idxID, t.indexName)
bldID, err = t.core.BuildIndexReq(binlogs, t.fieldSchema.TypeParams, t.indexParams, t.indexID, t.indexName)
if err != nil {
return err
}
seg := etcdpb.SegmentIndexInfo{
SegmentID: t.segmentID,
FieldID: t.fieldSchema.FieldID,
IndexID: idxID,
IndexID: t.indexID,
BuildID: bldID,
}
idx := etcdpb.IndexInfo{
IndexName: t.indexName,
IndexID: idxID,
IndexID: t.indexID,
IndexParams: t.indexParams,
}
err = t.core.MetaTable.AddIndex(&seg, &idx)

View File

@ -24,9 +24,15 @@ message PartitionInfo {
repeated int64 segmentIDs = 3;
}
message IndexParamsInfo{
message IndexInfo {
string index_name = 1;
int64 indexID = 2;
repeated common.KeyValuePair index_params = 3;
}
message FieldIndexInfo{
int64 filedID = 1;
repeated common.KeyValuePair index_params = 2;
IndexInfo index_info = 2;
}
message CollectionInfo {
@ -34,15 +40,10 @@ message CollectionInfo {
schema.CollectionSchema schema = 2;
uint64 create_time = 3;
repeated int64 partitionIDs = 4;
repeated IndexParamsInfo index_params = 5;
repeated string index_names = 6;
repeated FieldIndexInfo field_indexes = 5;
}
message IndexInfo {
string index_name = 1;
int64 indexID = 2;
repeated common.KeyValuePair index_params = 3;
}
message SegmentIndexInfo {
int64 segmentID = 1;

View File

@ -195,49 +195,104 @@ func (m *PartitionInfo) GetSegmentIDs() []int64 {
return nil
}
type IndexParamsInfo struct {
FiledID int64 `protobuf:"varint,1,opt,name=filedID,proto3" json:"filedID,omitempty"`
IndexParams []*commonpb.KeyValuePair `protobuf:"bytes,2,rep,name=index_params,json=indexParams,proto3" json:"index_params,omitempty"`
type IndexInfo struct {
IndexName string `protobuf:"bytes,1,opt,name=index_name,json=indexName,proto3" json:"index_name,omitempty"`
IndexID int64 `protobuf:"varint,2,opt,name=indexID,proto3" json:"indexID,omitempty"`
IndexParams []*commonpb.KeyValuePair `protobuf:"bytes,3,rep,name=index_params,json=indexParams,proto3" json:"index_params,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *IndexParamsInfo) Reset() { *m = IndexParamsInfo{} }
func (m *IndexParamsInfo) String() string { return proto.CompactTextString(m) }
func (*IndexParamsInfo) ProtoMessage() {}
func (*IndexParamsInfo) Descriptor() ([]byte, []int) {
func (m *IndexInfo) Reset() { *m = IndexInfo{} }
func (m *IndexInfo) String() string { return proto.CompactTextString(m) }
func (*IndexInfo) ProtoMessage() {}
func (*IndexInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_975d306d62b73e88, []int{3}
}
func (m *IndexParamsInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_IndexParamsInfo.Unmarshal(m, b)
func (m *IndexInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_IndexInfo.Unmarshal(m, b)
}
func (m *IndexParamsInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_IndexParamsInfo.Marshal(b, m, deterministic)
func (m *IndexInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_IndexInfo.Marshal(b, m, deterministic)
}
func (m *IndexParamsInfo) XXX_Merge(src proto.Message) {
xxx_messageInfo_IndexParamsInfo.Merge(m, src)
func (m *IndexInfo) XXX_Merge(src proto.Message) {
xxx_messageInfo_IndexInfo.Merge(m, src)
}
func (m *IndexParamsInfo) XXX_Size() int {
return xxx_messageInfo_IndexParamsInfo.Size(m)
func (m *IndexInfo) XXX_Size() int {
return xxx_messageInfo_IndexInfo.Size(m)
}
func (m *IndexParamsInfo) XXX_DiscardUnknown() {
xxx_messageInfo_IndexParamsInfo.DiscardUnknown(m)
func (m *IndexInfo) XXX_DiscardUnknown() {
xxx_messageInfo_IndexInfo.DiscardUnknown(m)
}
var xxx_messageInfo_IndexParamsInfo proto.InternalMessageInfo
var xxx_messageInfo_IndexInfo proto.InternalMessageInfo
func (m *IndexParamsInfo) GetFiledID() int64 {
func (m *IndexInfo) GetIndexName() string {
if m != nil {
return m.IndexName
}
return ""
}
func (m *IndexInfo) GetIndexID() int64 {
if m != nil {
return m.IndexID
}
return 0
}
func (m *IndexInfo) GetIndexParams() []*commonpb.KeyValuePair {
if m != nil {
return m.IndexParams
}
return nil
}
type FieldIndexInfo struct {
FiledID int64 `protobuf:"varint,1,opt,name=filedID,proto3" json:"filedID,omitempty"`
IndexInfo *IndexInfo `protobuf:"bytes,2,opt,name=index_info,json=indexInfo,proto3" json:"index_info,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *FieldIndexInfo) Reset() { *m = FieldIndexInfo{} }
func (m *FieldIndexInfo) String() string { return proto.CompactTextString(m) }
func (*FieldIndexInfo) ProtoMessage() {}
func (*FieldIndexInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_975d306d62b73e88, []int{4}
}
func (m *FieldIndexInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FieldIndexInfo.Unmarshal(m, b)
}
func (m *FieldIndexInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_FieldIndexInfo.Marshal(b, m, deterministic)
}
func (m *FieldIndexInfo) XXX_Merge(src proto.Message) {
xxx_messageInfo_FieldIndexInfo.Merge(m, src)
}
func (m *FieldIndexInfo) XXX_Size() int {
return xxx_messageInfo_FieldIndexInfo.Size(m)
}
func (m *FieldIndexInfo) XXX_DiscardUnknown() {
xxx_messageInfo_FieldIndexInfo.DiscardUnknown(m)
}
var xxx_messageInfo_FieldIndexInfo proto.InternalMessageInfo
func (m *FieldIndexInfo) GetFiledID() int64 {
if m != nil {
return m.FiledID
}
return 0
}
func (m *IndexParamsInfo) GetIndexParams() []*commonpb.KeyValuePair {
func (m *FieldIndexInfo) GetIndexInfo() *IndexInfo {
if m != nil {
return m.IndexParams
return m.IndexInfo
}
return nil
}
@ -247,8 +302,7 @@ type CollectionInfo struct {
Schema *schemapb.CollectionSchema `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"`
CreateTime uint64 `protobuf:"varint,3,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
PartitionIDs []int64 `protobuf:"varint,4,rep,packed,name=partitionIDs,proto3" json:"partitionIDs,omitempty"`
IndexParams []*IndexParamsInfo `protobuf:"bytes,5,rep,name=index_params,json=indexParams,proto3" json:"index_params,omitempty"`
IndexNames []string `protobuf:"bytes,6,rep,name=index_names,json=indexNames,proto3" json:"index_names,omitempty"`
FieldIndexes []*FieldIndexInfo `protobuf:"bytes,5,rep,name=field_indexes,json=fieldIndexes,proto3" json:"field_indexes,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -258,7 +312,7 @@ func (m *CollectionInfo) Reset() { *m = CollectionInfo{} }
func (m *CollectionInfo) String() string { return proto.CompactTextString(m) }
func (*CollectionInfo) ProtoMessage() {}
func (*CollectionInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_975d306d62b73e88, []int{4}
return fileDescriptor_975d306d62b73e88, []int{5}
}
func (m *CollectionInfo) XXX_Unmarshal(b []byte) error {
@ -307,71 +361,9 @@ func (m *CollectionInfo) GetPartitionIDs() []int64 {
return nil
}
func (m *CollectionInfo) GetIndexParams() []*IndexParamsInfo {
func (m *CollectionInfo) GetFieldIndexes() []*FieldIndexInfo {
if m != nil {
return m.IndexParams
}
return nil
}
func (m *CollectionInfo) GetIndexNames() []string {
if m != nil {
return m.IndexNames
}
return nil
}
type IndexInfo struct {
IndexName string `protobuf:"bytes,1,opt,name=index_name,json=indexName,proto3" json:"index_name,omitempty"`
IndexID int64 `protobuf:"varint,2,opt,name=indexID,proto3" json:"indexID,omitempty"`
IndexParams []*commonpb.KeyValuePair `protobuf:"bytes,3,rep,name=index_params,json=indexParams,proto3" json:"index_params,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *IndexInfo) Reset() { *m = IndexInfo{} }
func (m *IndexInfo) String() string { return proto.CompactTextString(m) }
func (*IndexInfo) ProtoMessage() {}
func (*IndexInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_975d306d62b73e88, []int{5}
}
func (m *IndexInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_IndexInfo.Unmarshal(m, b)
}
func (m *IndexInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_IndexInfo.Marshal(b, m, deterministic)
}
func (m *IndexInfo) XXX_Merge(src proto.Message) {
xxx_messageInfo_IndexInfo.Merge(m, src)
}
func (m *IndexInfo) XXX_Size() int {
return xxx_messageInfo_IndexInfo.Size(m)
}
func (m *IndexInfo) XXX_DiscardUnknown() {
xxx_messageInfo_IndexInfo.DiscardUnknown(m)
}
var xxx_messageInfo_IndexInfo proto.InternalMessageInfo
func (m *IndexInfo) GetIndexName() string {
if m != nil {
return m.IndexName
}
return ""
}
func (m *IndexInfo) GetIndexID() int64 {
if m != nil {
return m.IndexID
}
return 0
}
func (m *IndexInfo) GetIndexParams() []*commonpb.KeyValuePair {
if m != nil {
return m.IndexParams
return m.FieldIndexes
}
return nil
}
@ -759,9 +751,9 @@ func init() {
proto.RegisterType((*TenantMeta)(nil), "milvus.proto.etcd.TenantMeta")
proto.RegisterType((*ProxyMeta)(nil), "milvus.proto.etcd.ProxyMeta")
proto.RegisterType((*PartitionInfo)(nil), "milvus.proto.etcd.PartitionInfo")
proto.RegisterType((*IndexParamsInfo)(nil), "milvus.proto.etcd.IndexParamsInfo")
proto.RegisterType((*CollectionInfo)(nil), "milvus.proto.etcd.CollectionInfo")
proto.RegisterType((*IndexInfo)(nil), "milvus.proto.etcd.IndexInfo")
proto.RegisterType((*FieldIndexInfo)(nil), "milvus.proto.etcd.FieldIndexInfo")
proto.RegisterType((*CollectionInfo)(nil), "milvus.proto.etcd.CollectionInfo")
proto.RegisterType((*SegmentIndexInfo)(nil), "milvus.proto.etcd.SegmentIndexInfo")
proto.RegisterType((*CollectionMeta)(nil), "milvus.proto.etcd.CollectionMeta")
proto.RegisterType((*FieldBinlogFiles)(nil), "milvus.proto.etcd.FieldBinlogFiles")
@ -772,59 +764,59 @@ func init() {
func init() { proto.RegisterFile("etcd_meta.proto", fileDescriptor_975d306d62b73e88) }
var fileDescriptor_975d306d62b73e88 = []byte{
// 861 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x5d, 0x8f, 0xdb, 0x44,
0x14, 0x95, 0x93, 0x6c, 0x76, 0x7d, 0x93, 0x4d, 0x76, 0xfd, 0x64, 0x4a, 0x4b, 0x53, 0x57, 0x85,
0x48, 0x88, 0x44, 0x5a, 0x04, 0x6f, 0x20, 0x68, 0xd3, 0x4a, 0x11, 0xa2, 0x0d, 0xce, 0x8a, 0x07,
0x5e, 0xac, 0x89, 0x7d, 0x9b, 0x8c, 0xe4, 0x19, 0xa7, 0x9e, 0x31, 0xdd, 0xdd, 0x07, 0xc4, 0x2b,
0x88, 0x5f, 0xc0, 0x5f, 0xe4, 0x37, 0x20, 0xa1, 0xf9, 0x88, 0x3f, 0x92, 0x08, 0xa1, 0x95, 0x78,
0x9c, 0x73, 0xcf, 0xcc, 0xbd, 0xf7, 0x9c, 0x7b, 0x6d, 0x18, 0xa2, 0x8c, 0x93, 0x88, 0xa1, 0x24,
0x93, 0x6d, 0x9e, 0xc9, 0xcc, 0xbb, 0x64, 0x34, 0xfd, 0xb9, 0x10, 0xe6, 0x34, 0x51, 0xd1, 0x07,
0xfd, 0x38, 0x63, 0x2c, 0xe3, 0x06, 0x7a, 0xd0, 0x17, 0xf1, 0x06, 0x99, 0xa5, 0x07, 0x7f, 0x3a,
0x00, 0xd7, 0xc8, 0x09, 0x97, 0xdf, 0xa3, 0x24, 0xde, 0x00, 0x5a, 0xf3, 0x99, 0xef, 0x8c, 0x9c,
0x71, 0x3b, 0x6c, 0xcd, 0x67, 0xde, 0xc7, 0x30, 0xe4, 0x05, 0x8b, 0xde, 0x15, 0x98, 0xdf, 0x46,
0x3c, 0x4b, 0x50, 0xf8, 0x2d, 0x1d, 0x3c, 0xe7, 0x05, 0xfb, 0x41, 0xa1, 0xaf, 0x15, 0xe8, 0x7d,
0x0a, 0x97, 0x94, 0x0b, 0xcc, 0x65, 0x14, 0x6f, 0x08, 0xe7, 0x98, 0xce, 0x67, 0xc2, 0x6f, 0x8f,
0xda, 0x63, 0x37, 0xbc, 0x30, 0x81, 0x17, 0x25, 0xee, 0x7d, 0x02, 0x43, 0xf3, 0x60, 0xc9, 0xf5,
0x3b, 0x23, 0x67, 0xec, 0x86, 0x03, 0x0d, 0x97, 0xcc, 0xe0, 0x57, 0x07, 0xdc, 0x45, 0x9e, 0xdd,
0xdc, 0x1e, 0xad, 0xed, 0x4b, 0x38, 0x25, 0x49, 0x92, 0xa3, 0x30, 0x35, 0xf5, 0xae, 0x1e, 0x4e,
0x1a, 0xbd, 0xdb, 0xae, 0xbf, 0x35, 0x9c, 0x70, 0x47, 0x56, 0xb5, 0xe6, 0x28, 0x8a, 0xf4, 0x58,
0xad, 0x26, 0x50, 0xd5, 0x1a, 0xdc, 0xc0, 0xf9, 0x82, 0xe4, 0x92, 0x4a, 0x9a, 0xf1, 0x39, 0x7f,
0x9b, 0x79, 0xcf, 0x60, 0xb0, 0xdd, 0x01, 0x11, 0x27, 0x0c, 0x75, 0x45, 0x6e, 0x78, 0x5e, 0xa2,
0xaf, 0x09, 0x43, 0x6f, 0x04, 0xbd, 0x12, 0x98, 0xcf, 0xac, 0x68, 0x75, 0xc8, 0xfb, 0x08, 0x40,
0xe0, 0x9a, 0x21, 0x97, 0xbb, 0xfc, 0xed, 0xb0, 0x86, 0x04, 0xef, 0x60, 0x38, 0xe7, 0x09, 0xde,
0x2c, 0x48, 0x4e, 0x98, 0xd0, 0xb9, 0x7d, 0x38, 0x7d, 0x4b, 0x53, 0x4c, 0x4a, 0x19, 0x76, 0x47,
0x6f, 0x06, 0x7d, 0xaa, 0xc8, 0xd1, 0x56, 0xb3, 0xfd, 0xd6, 0xa8, 0x3d, 0xee, 0x5d, 0x3d, 0x39,
0x2a, 0xc8, 0x77, 0x78, 0xfb, 0x23, 0x49, 0x0b, 0x5c, 0x10, 0x9a, 0x87, 0x3d, 0x5a, 0xe5, 0x08,
0xfe, 0x68, 0xc1, 0xe0, 0x45, 0x96, 0xa6, 0x18, 0x97, 0xed, 0xee, 0x8b, 0xfe, 0x15, 0x74, 0xcd,
0xfc, 0x58, 0xcd, 0x9f, 0x35, 0x53, 0xd8, 0xd9, 0xaa, 0x1e, 0x59, 0x6a, 0x20, 0xb4, 0x97, 0xbc,
0xc7, 0xd0, 0x8b, 0x73, 0x24, 0x12, 0x23, 0x49, 0x19, 0xfa, 0xed, 0x91, 0x33, 0xee, 0x84, 0x60,
0xa0, 0x6b, 0xca, 0xd0, 0x0b, 0xa0, 0x5f, 0x13, 0x49, 0xf8, 0x1d, 0xad, 0x4b, 0x03, 0xf3, 0x5e,
0xee, 0x35, 0x7b, 0xa2, 0x9b, 0x0d, 0x26, 0x07, 0x93, 0x3f, 0xd9, 0x13, 0xb0, 0xd1, 0xad, 0xaa,
0xc5, 0x3c, 0xa3, 0x5c, 0x14, 0x7e, 0x57, 0x4f, 0x00, 0x68, 0x48, 0x59, 0x28, 0x82, 0xdf, 0x1d,
0x70, 0xf5, 0x0b, 0x5a, 0x89, 0x47, 0x00, 0x15, 0xdd, 0x9a, 0xee, 0x96, 0x6c, 0xe5, 0x8d, 0x3e,
0x94, 0x66, 0xef, 0x8e, 0x07, 0xde, 0xb4, 0xef, 0xe5, 0xcd, 0x2f, 0x70, 0xb1, 0xb4, 0xc3, 0x51,
0x96, 0xf4, 0x10, 0xdc, 0x72, 0x60, 0xac, 0x47, 0x15, 0x60, 0xa6, 0x05, 0xd3, 0xa4, 0xaa, 0xc8,
0x1e, 0xeb, 0xb5, 0xb6, 0x9b, 0xb5, 0xfa, 0x70, 0xba, 0x2a, 0xa8, 0xbe, 0xd3, 0x31, 0x11, 0x7b,
0x0c, 0xfe, 0x72, 0xea, 0xb3, 0x71, 0x74, 0x21, 0xff, 0xef, 0xd9, 0x68, 0x6e, 0x4c, 0x67, 0x7f,
0x63, 0x9a, 0xab, 0x29, 0xc9, 0xda, 0x4c, 0x46, 0x7d, 0x35, 0xaf, 0xc9, 0x5a, 0x1c, 0x8c, 0x58,
0xf7, 0x70, 0xc4, 0x82, 0x37, 0x70, 0xf1, 0x4a, 0x89, 0xf5, 0x9c, 0xf2, 0x34, 0x5b, 0xbf, 0xa2,
0x29, 0x8a, 0xba, 0x9e, 0x4e, 0x53, 0xcf, 0x27, 0xd0, 0x5f, 0x69, 0x62, 0xa4, 0xf6, 0xd1, 0x6c,
0x9f, 0x1b, 0xf6, 0x56, 0xd5, 0xe5, 0xe0, 0xef, 0x16, 0xf4, 0xac, 0x7f, 0x5a, 0xbb, 0x7f, 0xb7,
0x2e, 0x80, 0x7e, 0x5c, 0xed, 0xe1, 0xce, 0xbf, 0x06, 0xe6, 0x3d, 0x85, 0xf3, 0x46, 0xb7, 0x5a,
0x30, 0xb7, 0xd6, 0xc7, 0x35, 0x59, 0x2b, 0x92, 0xfd, 0xc8, 0x45, 0x42, 0x92, 0x5c, 0x6a, 0x57,
0x4f, 0xc2, 0xbe, 0x05, 0x97, 0x0a, 0xd3, 0xc2, 0x5b, 0x12, 0xf2, 0xc4, 0x3f, 0xd1, 0x14, 0xb0,
0xd0, 0x4b, 0x9e, 0x78, 0x1f, 0x82, 0x9b, 0x6d, 0x91, 0x1b, 0x5f, 0xba, 0xda, 0x97, 0x33, 0x05,
0x68, 0x57, 0x1e, 0x01, 0xc4, 0x69, 0x26, 0xac, 0x6b, 0xa7, 0x3a, 0xea, 0x6a, 0x44, 0x87, 0x3f,
0x80, 0x33, 0xf5, 0x07, 0xc9, 0xb3, 0xf7, 0xc2, 0x3f, 0x33, 0xb2, 0xf1, 0x82, 0x85, 0xd9, 0x7b,
0xa1, 0x42, 0x0c, 0x59, 0x24, 0xe8, 0x1d, 0xfa, 0xae, 0x09, 0x31, 0x64, 0x4b, 0x7a, 0x87, 0xde,
0x1b, 0xb8, 0xac, 0x29, 0x1a, 0x6d, 0x89, 0xdc, 0x08, 0x1f, 0xf4, 0xe2, 0x3c, 0x3d, 0xb2, 0xe7,
0xfb, 0x5e, 0x85, 0xc3, 0x4a, 0xfb, 0x85, 0xba, 0x1b, 0xfc, 0xd6, 0x82, 0x81, 0x66, 0xe9, 0xed,
0xf9, 0x0f, 0x16, 0xdc, 0x67, 0x7b, 0xf6, 0x37, 0xbd, 0x73, 0x9f, 0x4d, 0xf7, 0xbe, 0x80, 0x13,
0x21, 0x89, 0x44, 0x6d, 0xc4, 0xe0, 0xea, 0xf1, 0xd1, 0xeb, 0xba, 0x8d, 0xa5, 0xa2, 0x85, 0x86,
0xed, 0x8d, 0xe1, 0xc2, 0x24, 0xaf, 0x29, 0x66, 0xbe, 0x69, 0x03, 0x8d, 0x97, 0x5a, 0x3c, 0xff,
0xe6, 0xa7, 0xaf, 0xd7, 0x54, 0x6e, 0x8a, 0x95, 0x7a, 0x6c, 0x7a, 0x47, 0xd3, 0x94, 0xde, 0x49,
0x8c, 0x37, 0x53, 0x93, 0xe8, 0xb3, 0x84, 0x0a, 0x99, 0xd3, 0x55, 0x21, 0x31, 0x99, 0x52, 0x2e,
0x31, 0xe7, 0x24, 0x9d, 0xea, 0xec, 0x53, 0xa5, 0xf6, 0x76, 0xb5, 0xea, 0xea, 0xd3, 0xe7, 0xff,
0x04, 0x00, 0x00, 0xff, 0xff, 0x85, 0x45, 0xd7, 0x1c, 0x7e, 0x08, 0x00, 0x00,
// 862 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcd, 0x8e, 0xe3, 0x44,
0x10, 0x96, 0x27, 0x99, 0x64, 0x5c, 0xf9, 0x99, 0x99, 0x3e, 0x99, 0x65, 0x97, 0xcd, 0x7a, 0xb5,
0x10, 0x09, 0x31, 0x91, 0x06, 0xc1, 0x05, 0x81, 0x60, 0x37, 0x8c, 0x14, 0x21, 0x76, 0x83, 0x33,
0xe2, 0xc0, 0xc5, 0xea, 0xd8, 0x95, 0xa4, 0x25, 0x77, 0x3b, 0xb8, 0xdb, 0xec, 0xcc, 0x1c, 0x10,
0x57, 0x78, 0x04, 0x5e, 0x11, 0x5e, 0x01, 0x09, 0xf5, 0x4f, 0x1c, 0x7b, 0x36, 0x20, 0xb4, 0x12,
0xb7, 0xd4, 0x57, 0x55, 0x5d, 0x55, 0xdf, 0x57, 0xe5, 0xc0, 0x29, 0xaa, 0x24, 0x8d, 0x39, 0x2a,
0x7a, 0xb1, 0x2d, 0x72, 0x95, 0x93, 0x73, 0xce, 0xb2, 0x9f, 0x4a, 0x69, 0xad, 0x0b, 0xed, 0x7d,
0xd0, 0x4f, 0x72, 0xce, 0x73, 0x61, 0xa1, 0x07, 0x7d, 0x99, 0x6c, 0x90, 0xbb, 0xf0, 0xf0, 0x77,
0x0f, 0xe0, 0x1a, 0x05, 0x15, 0xea, 0x5b, 0x54, 0x94, 0x0c, 0xe1, 0x68, 0x36, 0x0d, 0xbc, 0x91,
0x37, 0x6e, 0x45, 0x47, 0xb3, 0x29, 0x79, 0x1f, 0x4e, 0x45, 0xc9, 0xe3, 0x1f, 0x4b, 0x2c, 0x6e,
0x63, 0x91, 0xa7, 0x28, 0x83, 0x23, 0xe3, 0x1c, 0x88, 0x92, 0x7f, 0xa7, 0xd1, 0x97, 0x1a, 0x24,
0x1f, 0xc2, 0x39, 0x13, 0x12, 0x0b, 0x15, 0x27, 0x1b, 0x2a, 0x04, 0x66, 0xb3, 0xa9, 0x0c, 0x5a,
0xa3, 0xd6, 0xd8, 0x8f, 0xce, 0xac, 0xe3, 0x45, 0x85, 0x93, 0x0f, 0xe0, 0xd4, 0x3e, 0x58, 0xc5,
0x06, 0xed, 0x91, 0x37, 0xf6, 0xa3, 0xa1, 0x81, 0xab, 0xc8, 0xf0, 0x17, 0x0f, 0xfc, 0x79, 0x91,
0xdf, 0xdc, 0x1e, 0xec, 0xed, 0x53, 0xe8, 0xd2, 0x34, 0x2d, 0x50, 0xda, 0x9e, 0x7a, 0x97, 0x0f,
0x2f, 0x1a, 0xb3, 0xbb, 0xa9, 0xbf, 0xb2, 0x31, 0xd1, 0x2e, 0x58, 0xf7, 0x5a, 0xa0, 0x2c, 0xb3,
0x43, 0xbd, 0x5a, 0xc7, 0xbe, 0xd7, 0xf0, 0x06, 0x06, 0x73, 0x5a, 0x28, 0xa6, 0x58, 0x2e, 0x66,
0x62, 0x95, 0x93, 0x67, 0x30, 0xdc, 0xee, 0x80, 0x58, 0x50, 0x8e, 0xa6, 0x23, 0x3f, 0x1a, 0x54,
0xe8, 0x4b, 0xca, 0x91, 0x8c, 0xa0, 0x57, 0x01, 0xb3, 0xa9, 0x23, 0xad, 0x0e, 0x91, 0xf7, 0x00,
0x24, 0xae, 0x39, 0x0a, 0xb5, 0xab, 0xdf, 0x8a, 0x6a, 0x48, 0xf8, 0x9b, 0x07, 0xfe, 0x4c, 0xa4,
0x78, 0x63, 0xca, 0x3e, 0x02, 0x60, 0xda, 0xa8, 0x97, 0xf4, 0x0d, 0x62, 0xca, 0x05, 0xd0, 0x35,
0x46, 0x55, 0x6a, 0x67, 0x92, 0x29, 0xf4, 0x6d, 0xe2, 0x96, 0x16, 0x94, 0xdb, 0x42, 0xbd, 0xcb,
0x27, 0x07, 0xa9, 0xfa, 0x06, 0x6f, 0xbf, 0xa7, 0x59, 0x89, 0x73, 0xca, 0x8a, 0xa8, 0x67, 0xd2,
0xe6, 0x26, 0x2b, 0x5c, 0xc3, 0xf0, 0x8a, 0x61, 0x96, 0xee, 0x1b, 0x0a, 0xa0, 0xbb, 0x62, 0x19,
0xa6, 0x95, 0x24, 0x3b, 0x93, 0x7c, 0xb6, 0x6b, 0x95, 0x89, 0x55, 0x7e, 0x58, 0x1a, 0xbd, 0x96,
0x17, 0xd5, 0x5b, 0x6e, 0x10, 0xfd, 0x33, 0xfc, 0xd3, 0x83, 0xe1, 0x8b, 0x3c, 0xcb, 0x30, 0xa9,
0x18, 0xbf, 0xaf, 0xfb, 0xe7, 0xd0, 0xb1, 0x2b, 0xec, 0xde, 0x7e, 0xd6, 0x7c, 0xdb, 0xad, 0xf7,
0xfe, 0x91, 0x85, 0x01, 0x22, 0x97, 0x44, 0x1e, 0x43, 0x2f, 0x29, 0x90, 0x2a, 0x8c, 0x15, 0xe3,
0x18, 0xb4, 0x46, 0xde, 0xb8, 0x1d, 0x81, 0x85, 0xae, 0x19, 0x47, 0x12, 0x42, 0xbf, 0xa6, 0x93,
0x0c, 0xda, 0x46, 0x9a, 0x06, 0x46, 0xae, 0x60, 0xb0, 0xd2, 0x7c, 0xc4, 0xa6, 0x73, 0x94, 0xc1,
0xf1, 0x21, 0x5a, 0xcd, 0x98, 0x4d, 0xde, 0xa2, 0xfe, 0xaa, 0xb2, 0x51, 0x86, 0x3f, 0xc3, 0xd9,
0xc2, 0x49, 0x5e, 0x31, 0xfb, 0x10, 0xfc, 0x6a, 0x0d, 0xdc, 0xd8, 0x7b, 0xc0, 0xf2, 0xae, 0x5f,
0xa8, 0x94, 0x76, 0x66, 0x7d, 0x07, 0x5a, 0xcd, 0x1d, 0x08, 0xa0, 0xbb, 0x2c, 0x99, 0xc9, 0x69,
0x5b, 0x8f, 0x33, 0xc3, 0x3f, 0x1a, 0x74, 0x1f, 0x3c, 0xb3, 0xff, 0x9b, 0xee, 0xe6, 0x1d, 0xb4,
0xef, 0xdf, 0x41, 0xf3, 0xe0, 0x14, 0x5d, 0x5b, 0xae, 0xeb, 0x07, 0x77, 0x4d, 0xd7, 0xf2, 0x0d,
0xd5, 0x3a, 0x6f, 0xaa, 0x16, 0xbe, 0x82, 0x33, 0xa3, 0xc6, 0x73, 0x26, 0xb2, 0x7c, 0x7d, 0xc5,
0x32, 0x94, 0x75, 0x3e, 0xbd, 0x26, 0x9f, 0x4f, 0xa0, 0xbf, 0x34, 0x81, 0xb1, 0xde, 0x6c, 0xfd,
0x91, 0xd1, 0x65, 0x7b, 0xcb, 0x7d, 0x72, 0xf8, 0xd7, 0x11, 0xf4, 0x9c, 0x7e, 0x86, 0xbb, 0x7f,
0x97, 0x2e, 0x84, 0x7e, 0xb2, 0x5f, 0xed, 0x9d, 0x7e, 0x0d, 0x8c, 0x3c, 0x85, 0x41, 0x63, 0x5a,
0x43, 0x98, 0x5f, 0x9b, 0xe3, 0x9a, 0xae, 0x75, 0x90, 0xfb, 0x74, 0xc5, 0x52, 0xd1, 0x42, 0x19,
0x55, 0x8f, 0xa3, 0xbe, 0x03, 0x17, 0x1a, 0x33, 0xc4, 0xbb, 0x20, 0x14, 0x69, 0x70, 0x6c, 0x42,
0xc0, 0x41, 0x5f, 0x8b, 0x94, 0xbc, 0x0b, 0x7e, 0xbe, 0x45, 0x61, 0x75, 0xe9, 0x18, 0x5d, 0x4e,
0x34, 0x60, 0x54, 0x79, 0x04, 0x90, 0x64, 0xb9, 0x74, 0xaa, 0x75, 0x8d, 0xd7, 0x37, 0x88, 0x71,
0xbf, 0x03, 0x27, 0xfa, 0x7f, 0xa1, 0xc8, 0x5f, 0xcb, 0xe0, 0xc4, 0xd2, 0x26, 0x4a, 0x1e, 0xe5,
0xaf, 0xa5, 0x76, 0x71, 0xe4, 0xb1, 0x64, 0x77, 0x18, 0xf8, 0xd6, 0xc5, 0x91, 0x2f, 0xd8, 0x1d,
0x92, 0x57, 0x70, 0x5e, 0x63, 0x34, 0xde, 0x52, 0xb5, 0x91, 0x01, 0x98, 0xcb, 0x79, 0xfa, 0x4f,
0x97, 0x53, 0xd3, 0x2a, 0x3a, 0xdd, 0x73, 0x3f, 0xd7, 0xb9, 0xe1, 0xaf, 0x47, 0xf5, 0xef, 0xd2,
0x7f, 0x90, 0xe0, 0x6d, 0xae, 0xe7, 0xfe, 0x17, 0xb4, 0xfd, 0x36, 0x5f, 0x50, 0xf2, 0x09, 0x1c,
0x4b, 0x45, 0x15, 0x1a, 0x21, 0x86, 0x97, 0x8f, 0x0f, 0xa6, 0x9b, 0x31, 0x16, 0x3a, 0x2c, 0xb2,
0xd1, 0x64, 0x0c, 0x67, 0xb6, 0x78, 0x8d, 0xb1, 0x8e, 0x59, 0xc4, 0xa1, 0xc1, 0x2b, 0x2e, 0x9e,
0x7f, 0xf9, 0xc3, 0x17, 0x6b, 0xa6, 0x36, 0xe5, 0x52, 0x3f, 0x36, 0xb9, 0x63, 0x59, 0xc6, 0xee,
0x14, 0x26, 0x9b, 0x89, 0x2d, 0xf4, 0x51, 0xca, 0xa4, 0x2a, 0xd8, 0xb2, 0x54, 0x98, 0x4e, 0x98,
0x50, 0x58, 0x08, 0x9a, 0x4d, 0x4c, 0xf5, 0x89, 0x66, 0x7b, 0xbb, 0x5c, 0x76, 0x8c, 0xf5, 0xf1,
0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x3c, 0x8d, 0xb6, 0x6d, 0x54, 0x08, 0x00, 0x00,
}