Support rename collection (#21693)

Signed-off-by: jaime <yun.zhang@zilliz.com>
pull/21829/head
jaime 2023-01-19 14:13:43 +08:00 committed by GitHub
parent 66feb295da
commit 1dcd9eeb79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 937 additions and 294 deletions

2
go.mod
View File

@ -27,7 +27,7 @@ require (
github.com/klauspost/compress v1.14.4
github.com/lingdor/stackerror v0.0.0-20191119040541-976d8885ed76
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d
github.com/milvus-io/milvus-proto/go-api v0.0.0-20230110094734-99d76998b0b9
github.com/milvus-io/milvus-proto/go-api v0.0.0-20230112125535-5f87a812202c
github.com/minio/minio-go/v7 v7.0.17
github.com/panjf2000/ants/v2 v2.4.8
github.com/pkg/errors v0.9.1

4
go.sum
View File

@ -491,8 +491,8 @@ github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyex
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/milvus-io/gorocksdb v0.0.0-20220624081344-8c5f4212846b h1:TfeY0NxYxZzUfIfYe5qYDBzt4ZYRqzUjTR6CvUzjat8=
github.com/milvus-io/gorocksdb v0.0.0-20220624081344-8c5f4212846b/go.mod h1:iwW+9cWfIzzDseEBCCeDSN5SD16Tidvy8cwQ7ZY8Qj4=
github.com/milvus-io/milvus-proto/go-api v0.0.0-20230110094734-99d76998b0b9 h1:I7O1+IqGXhFDnzGzh+62/VJOTfLdX7UuM5OteylxOoM=
github.com/milvus-io/milvus-proto/go-api v0.0.0-20230110094734-99d76998b0b9/go.mod h1:148qnlmZ0Fdm1Fq+Mj/OW2uDoEP25g3mjh0vMGtkgmk=
github.com/milvus-io/milvus-proto/go-api v0.0.0-20230112125535-5f87a812202c h1:74uRPm5WWagMe8bItOQ8QFuXcrUIWuWGAQ1GrwVM4J4=
github.com/milvus-io/milvus-proto/go-api v0.0.0-20230112125535-5f87a812202c/go.mod h1:148qnlmZ0Fdm1Fq+Mj/OW2uDoEP25g3mjh0vMGtkgmk=
github.com/milvus-io/pulsar-client-go v0.6.10 h1:eqpJjU+/QX0iIhEo3nhOqMNXL+TyInAs1IAHZCrCM/A=
github.com/milvus-io/pulsar-client-go v0.6.10/go.mod h1:lQqCkgwDF8YFYjKA+zOheTk1tev2B+bKj5j7+nm8M1w=
github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs=

View File

@ -372,96 +372,97 @@ const char descriptor_table_protodef_common_2eproto[] PROTOBUF_SECTION_VARIABLE(
"\n\n\006Sealed\020\003\022\013\n\007Flushed\020\004\022\014\n\010Flushing\020\005\022\013"
"\n\007Dropped\020\006\022\r\n\tImporting\020\007*>\n\017Placeholde"
"rType\022\010\n\004None\020\000\022\020\n\014BinaryVector\020d\022\017\n\013Flo"
"atVector\020e*\251\016\n\007MsgType\022\r\n\tUndefined\020\000\022\024\n"
"atVector\020e*\277\016\n\007MsgType\022\r\n\tUndefined\020\000\022\024\n"
"\020CreateCollection\020d\022\022\n\016DropCollection\020e\022"
"\021\n\rHasCollection\020f\022\026\n\022DescribeCollection"
"\020g\022\023\n\017ShowCollections\020h\022\024\n\020GetSystemConf"
"igs\020i\022\022\n\016LoadCollection\020j\022\025\n\021ReleaseColl"
"ection\020k\022\017\n\013CreateAlias\020l\022\r\n\tDropAlias\020m"
"\022\016\n\nAlterAlias\020n\022\023\n\017AlterCollection\020o\022\024\n"
"\017CreatePartition\020\310\001\022\022\n\rDropPartition\020\311\001\022"
"\021\n\014HasPartition\020\312\001\022\026\n\021DescribePartition\020"
"\313\001\022\023\n\016ShowPartitions\020\314\001\022\023\n\016LoadPartition"
"s\020\315\001\022\026\n\021ReleasePartitions\020\316\001\022\021\n\014ShowSegm"
"ents\020\372\001\022\024\n\017DescribeSegment\020\373\001\022\021\n\014LoadSeg"
"ments\020\374\001\022\024\n\017ReleaseSegments\020\375\001\022\024\n\017Handof"
"fSegments\020\376\001\022\030\n\023LoadBalanceSegments\020\377\001\022\025"
"\n\020DescribeSegments\020\200\002\022\020\n\013CreateIndex\020\254\002\022"
"\022\n\rDescribeIndex\020\255\002\022\016\n\tDropIndex\020\256\002\022\013\n\006I"
"nsert\020\220\003\022\013\n\006Delete\020\221\003\022\n\n\005Flush\020\222\003\022\027\n\022Res"
"endSegmentStats\020\223\003\022\013\n\006Upsert\020\224\003\022\013\n\006Searc"
"h\020\364\003\022\021\n\014SearchResult\020\365\003\022\022\n\rGetIndexState"
"\020\366\003\022\032\n\025GetIndexBuildProgress\020\367\003\022\034\n\027GetCo"
"llectionStatistics\020\370\003\022\033\n\026GetPartitionSta"
"tistics\020\371\003\022\r\n\010Retrieve\020\372\003\022\023\n\016RetrieveRes"
"ult\020\373\003\022\024\n\017WatchDmChannels\020\374\003\022\025\n\020RemoveDm"
"Channels\020\375\003\022\027\n\022WatchQueryChannels\020\376\003\022\030\n\023"
"RemoveQueryChannels\020\377\003\022\035\n\030SealedSegments"
"ChangeInfo\020\200\004\022\027\n\022WatchDeltaChannels\020\201\004\022\024"
"\n\017GetShardLeaders\020\202\004\022\020\n\013GetReplicas\020\203\004\022\023"
"\n\016UnsubDmChannel\020\204\004\022\024\n\017GetDistribution\020\205"
"\004\022\025\n\020SyncDistribution\020\206\004\022\020\n\013SegmentInfo\020"
"\330\004\022\017\n\nSystemInfo\020\331\004\022\024\n\017GetRecoveryInfo\020\332"
"\004\022\024\n\017GetSegmentState\020\333\004\022\r\n\010TimeTick\020\260\t\022\023"
"\n\016QueryNodeStats\020\261\t\022\016\n\tLoadIndex\020\262\t\022\016\n\tR"
"equestID\020\263\t\022\017\n\nRequestTSO\020\264\t\022\024\n\017Allocate"
"Segment\020\265\t\022\026\n\021SegmentStatistics\020\266\t\022\025\n\020Se"
"gmentFlushDone\020\267\t\022\017\n\nDataNodeTt\020\270\t\022\025\n\020Cr"
"eateCredential\020\334\013\022\022\n\rGetCredential\020\335\013\022\025\n"
"\020DeleteCredential\020\336\013\022\025\n\020UpdateCredential"
"\020\337\013\022\026\n\021ListCredUsernames\020\340\013\022\017\n\nCreateRol"
"e\020\300\014\022\r\n\010DropRole\020\301\014\022\024\n\017OperateUserRole\020\302"
"\014\022\017\n\nSelectRole\020\303\014\022\017\n\nSelectUser\020\304\014\022\023\n\016S"
"electResource\020\305\014\022\025\n\020OperatePrivilege\020\306\014\022"
"\020\n\013SelectGrant\020\307\014\022\033\n\026RefreshPolicyInfoCa"
"che\020\310\014\022\017\n\nListPolicy\020\311\014\022\030\n\023CreateResourc"
"eGroup\020\244\r\022\026\n\021DropResourceGroup\020\245\r\022\026\n\021Lis"
"tResourceGroup\020\246\r\022\032\n\025DescribeResourceGro"
"up\020\247\r\022\021\n\014TransferNode\020\250\r\022\024\n\017TransferRepl"
"ica\020\251\r*\"\n\007DslType\022\007\n\003Dsl\020\000\022\016\n\nBoolExprV1"
"\020\001*B\n\017CompactionState\022\021\n\rUndefiedState\020\000"
"\022\r\n\tExecuting\020\001\022\r\n\tCompleted\020\002*X\n\020Consis"
"tencyLevel\022\n\n\006Strong\020\000\022\013\n\007Session\020\001\022\013\n\007B"
"ounded\020\002\022\016\n\nEventually\020\003\022\016\n\nCustomized\020\004"
"*\236\001\n\013ImportState\022\021\n\rImportPending\020\000\022\020\n\014I"
"mportFailed\020\001\022\021\n\rImportStarted\020\002\022\023\n\017Impo"
"rtPersisted\020\005\022\021\n\rImportFlushed\020\010\022\023\n\017Impo"
"rtCompleted\020\006\022\032\n\026ImportFailedAndCleaned\020"
"\007*2\n\nObjectType\022\016\n\nCollection\020\000\022\n\n\006Globa"
"l\020\001\022\010\n\004User\020\002*\233\005\n\017ObjectPrivilege\022\020\n\014Pri"
"vilegeAll\020\000\022\035\n\031PrivilegeCreateCollection"
"\020\001\022\033\n\027PrivilegeDropCollection\020\002\022\037\n\033Privi"
"legeDescribeCollection\020\003\022\034\n\030PrivilegeSho"
"wCollections\020\004\022\021\n\rPrivilegeLoad\020\005\022\024\n\020Pri"
"vilegeRelease\020\006\022\027\n\023PrivilegeCompaction\020\007"
"\022\023\n\017PrivilegeInsert\020\010\022\023\n\017PrivilegeDelete"
"\020\t\022\032\n\026PrivilegeGetStatistics\020\n\022\030\n\024Privil"
"egeCreateIndex\020\013\022\030\n\024PrivilegeIndexDetail"
"\020\014\022\026\n\022PrivilegeDropIndex\020\r\022\023\n\017PrivilegeS"
"earch\020\016\022\022\n\016PrivilegeFlush\020\017\022\022\n\016Privilege"
"Query\020\020\022\030\n\024PrivilegeLoadBalance\020\021\022\023\n\017Pri"
"vilegeImport\020\022\022\034\n\030PrivilegeCreateOwnersh"
"ip\020\023\022\027\n\023PrivilegeUpdateUser\020\024\022\032\n\026Privile"
"geDropOwnership\020\025\022\034\n\030PrivilegeSelectOwne"
"rship\020\026\022\034\n\030PrivilegeManageOwnership\020\027\022\027\n"
"\023PrivilegeSelectUser\020\030\022\023\n\017PrivilegeUpser"
"t\020\031*S\n\tStateCode\022\020\n\014Initializing\020\000\022\013\n\007He"
"althy\020\001\022\014\n\010Abnormal\020\002\022\013\n\007StandBy\020\003\022\014\n\010St"
"opping\020\004*c\n\tLoadState\022\025\n\021LoadStateNotExi"
"st\020\000\022\024\n\020LoadStateNotLoad\020\001\022\024\n\020LoadStateL"
"oading\020\002\022\023\n\017LoadStateLoaded\020\003:^\n\021privile"
"ge_ext_obj\022\037.google.protobuf.MessageOpti"
"ons\030\351\007 \001(\0132!.milvus.proto.common.Privile"
"geExtBf\n\016io.milvus.grpcB\013CommonProtoP\001Z1"
"github.com/milvus-io/milvus-proto/go-api"
"/commonpb\240\001\001\252\002\016IO.Milvus.Grpcb\006proto3"
"\020RenameCollection\020p\022\024\n\017CreatePartition\020\310"
"\001\022\022\n\rDropPartition\020\311\001\022\021\n\014HasPartition\020\312\001"
"\022\026\n\021DescribePartition\020\313\001\022\023\n\016ShowPartitio"
"ns\020\314\001\022\023\n\016LoadPartitions\020\315\001\022\026\n\021ReleasePar"
"titions\020\316\001\022\021\n\014ShowSegments\020\372\001\022\024\n\017Describ"
"eSegment\020\373\001\022\021\n\014LoadSegments\020\374\001\022\024\n\017Releas"
"eSegments\020\375\001\022\024\n\017HandoffSegments\020\376\001\022\030\n\023Lo"
"adBalanceSegments\020\377\001\022\025\n\020DescribeSegments"
"\020\200\002\022\020\n\013CreateIndex\020\254\002\022\022\n\rDescribeIndex\020\255"
"\002\022\016\n\tDropIndex\020\256\002\022\013\n\006Insert\020\220\003\022\013\n\006Delete"
"\020\221\003\022\n\n\005Flush\020\222\003\022\027\n\022ResendSegmentStats\020\223\003"
"\022\013\n\006Upsert\020\224\003\022\013\n\006Search\020\364\003\022\021\n\014SearchResu"
"lt\020\365\003\022\022\n\rGetIndexState\020\366\003\022\032\n\025GetIndexBui"
"ldProgress\020\367\003\022\034\n\027GetCollectionStatistics"
"\020\370\003\022\033\n\026GetPartitionStatistics\020\371\003\022\r\n\010Retr"
"ieve\020\372\003\022\023\n\016RetrieveResult\020\373\003\022\024\n\017WatchDmC"
"hannels\020\374\003\022\025\n\020RemoveDmChannels\020\375\003\022\027\n\022Wat"
"chQueryChannels\020\376\003\022\030\n\023RemoveQueryChannel"
"s\020\377\003\022\035\n\030SealedSegmentsChangeInfo\020\200\004\022\027\n\022W"
"atchDeltaChannels\020\201\004\022\024\n\017GetShardLeaders\020"
"\202\004\022\020\n\013GetReplicas\020\203\004\022\023\n\016UnsubDmChannel\020\204"
"\004\022\024\n\017GetDistribution\020\205\004\022\025\n\020SyncDistribut"
"ion\020\206\004\022\020\n\013SegmentInfo\020\330\004\022\017\n\nSystemInfo\020\331"
"\004\022\024\n\017GetRecoveryInfo\020\332\004\022\024\n\017GetSegmentSta"
"te\020\333\004\022\r\n\010TimeTick\020\260\t\022\023\n\016QueryNodeStats\020\261"
"\t\022\016\n\tLoadIndex\020\262\t\022\016\n\tRequestID\020\263\t\022\017\n\nReq"
"uestTSO\020\264\t\022\024\n\017AllocateSegment\020\265\t\022\026\n\021Segm"
"entStatistics\020\266\t\022\025\n\020SegmentFlushDone\020\267\t\022"
"\017\n\nDataNodeTt\020\270\t\022\025\n\020CreateCredential\020\334\013\022"
"\022\n\rGetCredential\020\335\013\022\025\n\020DeleteCredential\020"
"\336\013\022\025\n\020UpdateCredential\020\337\013\022\026\n\021ListCredUse"
"rnames\020\340\013\022\017\n\nCreateRole\020\300\014\022\r\n\010DropRole\020\301"
"\014\022\024\n\017OperateUserRole\020\302\014\022\017\n\nSelectRole\020\303\014"
"\022\017\n\nSelectUser\020\304\014\022\023\n\016SelectResource\020\305\014\022\025"
"\n\020OperatePrivilege\020\306\014\022\020\n\013SelectGrant\020\307\014\022"
"\033\n\026RefreshPolicyInfoCache\020\310\014\022\017\n\nListPoli"
"cy\020\311\014\022\030\n\023CreateResourceGroup\020\244\r\022\026\n\021DropR"
"esourceGroup\020\245\r\022\026\n\021ListResourceGroup\020\246\r\022"
"\032\n\025DescribeResourceGroup\020\247\r\022\021\n\014TransferN"
"ode\020\250\r\022\024\n\017TransferReplica\020\251\r*\"\n\007DslType\022"
"\007\n\003Dsl\020\000\022\016\n\nBoolExprV1\020\001*B\n\017CompactionSt"
"ate\022\021\n\rUndefiedState\020\000\022\r\n\tExecuting\020\001\022\r\n"
"\tCompleted\020\002*X\n\020ConsistencyLevel\022\n\n\006Stro"
"ng\020\000\022\013\n\007Session\020\001\022\013\n\007Bounded\020\002\022\016\n\nEventu"
"ally\020\003\022\016\n\nCustomized\020\004*\236\001\n\013ImportState\022\021"
"\n\rImportPending\020\000\022\020\n\014ImportFailed\020\001\022\021\n\rI"
"mportStarted\020\002\022\023\n\017ImportPersisted\020\005\022\021\n\rI"
"mportFlushed\020\010\022\023\n\017ImportCompleted\020\006\022\032\n\026I"
"mportFailedAndCleaned\020\007*2\n\nObjectType\022\016\n"
"\nCollection\020\000\022\n\n\006Global\020\001\022\010\n\004User\020\002*\233\005\n\017"
"ObjectPrivilege\022\020\n\014PrivilegeAll\020\000\022\035\n\031Pri"
"vilegeCreateCollection\020\001\022\033\n\027PrivilegeDro"
"pCollection\020\002\022\037\n\033PrivilegeDescribeCollec"
"tion\020\003\022\034\n\030PrivilegeShowCollections\020\004\022\021\n\r"
"PrivilegeLoad\020\005\022\024\n\020PrivilegeRelease\020\006\022\027\n"
"\023PrivilegeCompaction\020\007\022\023\n\017PrivilegeInser"
"t\020\010\022\023\n\017PrivilegeDelete\020\t\022\032\n\026PrivilegeGet"
"Statistics\020\n\022\030\n\024PrivilegeCreateIndex\020\013\022\030"
"\n\024PrivilegeIndexDetail\020\014\022\026\n\022PrivilegeDro"
"pIndex\020\r\022\023\n\017PrivilegeSearch\020\016\022\022\n\016Privile"
"geFlush\020\017\022\022\n\016PrivilegeQuery\020\020\022\030\n\024Privile"
"geLoadBalance\020\021\022\023\n\017PrivilegeImport\020\022\022\034\n\030"
"PrivilegeCreateOwnership\020\023\022\027\n\023PrivilegeU"
"pdateUser\020\024\022\032\n\026PrivilegeDropOwnership\020\025\022"
"\034\n\030PrivilegeSelectOwnership\020\026\022\034\n\030Privile"
"geManageOwnership\020\027\022\027\n\023PrivilegeSelectUs"
"er\020\030\022\023\n\017PrivilegeUpsert\020\031*S\n\tStateCode\022\020"
"\n\014Initializing\020\000\022\013\n\007Healthy\020\001\022\014\n\010Abnorma"
"l\020\002\022\013\n\007StandBy\020\003\022\014\n\010Stopping\020\004*c\n\tLoadSt"
"ate\022\025\n\021LoadStateNotExist\020\000\022\024\n\020LoadStateN"
"otLoad\020\001\022\024\n\020LoadStateLoading\020\002\022\023\n\017LoadSt"
"ateLoaded\020\003:^\n\021privilege_ext_obj\022\037.googl"
"e.protobuf.MessageOptions\030\351\007 \001(\0132!.milvu"
"s.proto.common.PrivilegeExtBf\n\016io.milvus"
".grpcB\013CommonProtoP\001Z1github.com/milvus-"
"io/milvus-proto/go-api/commonpb\240\001\001\252\002\016IO."
"Milvus.Grpcb\006proto3"
;
static const ::_pbi::DescriptorTable* const descriptor_table_common_2eproto_deps[1] = {
&::descriptor_table_google_2fprotobuf_2fdescriptor_2eproto,
};
static ::_pbi::once_flag descriptor_table_common_2eproto_once;
const ::_pbi::DescriptorTable descriptor_table_common_2eproto = {
false, false, 5837, descriptor_table_protodef_common_2eproto,
false, false, 5859, descriptor_table_protodef_common_2eproto,
"common.proto",
&descriptor_table_common_2eproto_once, descriptor_table_common_2eproto_deps, 1, 11,
schemas, file_default_instances, TableStruct_common_2eproto::offsets,
@ -618,6 +619,7 @@ bool MsgType_IsValid(int value) {
case 109:
case 110:
case 111:
case 112:
case 200:
case 201:
case 202:

View File

@ -282,6 +282,7 @@ enum MsgType : int {
DropAlias = 109,
AlterAlias = 110,
AlterCollection = 111,
RenameCollection = 112,
CreatePartition = 200,
DropPartition = 201,
HasPartition = 202,

View File

@ -368,6 +368,11 @@ type mockRootCoordService struct {
cnt int64
}
func (m *mockRootCoordService) RenameCollection(ctx context.Context, req *milvuspb.RenameCollectionRequest) (*commonpb.Status, error) {
//TODO implement me
panic("implement me")
}
func (m *mockRootCoordService) CheckHealth(ctx context.Context, req *milvuspb.CheckHealthRequest) (*milvuspb.CheckHealthResponse, error) {
panic("implement me")
}

View File

@ -864,6 +864,10 @@ func (s *Server) CheckHealth(ctx context.Context, request *milvuspb.CheckHealthR
return s.proxy.CheckHealth(ctx, request)
}
func (s *Server) RenameCollection(ctx context.Context, req *milvuspb.RenameCollectionRequest) (*commonpb.Status, error) {
return s.proxy.RenameCollection(ctx, req)
}
func (s *Server) CreateResourceGroup(ctx context.Context, req *milvuspb.CreateResourceGroupRequest) (*commonpb.Status, error) {
return nil, nil
}

View File

@ -289,7 +289,11 @@ func (m *MockRootCoord) CheckHealth(ctx context.Context, req *milvuspb.CheckHeal
}, nil
}
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
func (m *MockRootCoord) RenameCollection(ctx context.Context, req *milvuspb.RenameCollectionRequest) (*commonpb.Status, error) {
return nil, nil
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
type MockQueryCoord struct {
MockBase
initErr error
@ -935,6 +939,10 @@ func (m *MockProxy) ListResourceGroup(ctx context.Context, req *milvuspb.ListRes
return nil, nil
}
func (m *MockProxy) RenameCollection(ctx context.Context, req *milvuspb.RenameCollectionRequest) (*commonpb.Status, error) {
return nil, nil
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
type WaitOption struct {
@ -1367,6 +1375,11 @@ func Test_NewServer(t *testing.T) {
assert.Nil(t, err)
})
t.Run("RenameCollection", func(t *testing.T) {
_, err := server.RenameCollection(ctx, nil)
assert.Nil(t, err)
})
err = server.Stop()
assert.Nil(t, err)

View File

@ -894,3 +894,21 @@ func (c *Client) CheckHealth(ctx context.Context, req *milvuspb.CheckHealthReque
}
return ret.(*milvuspb.CheckHealthResponse), err
}
func (c *Client) RenameCollection(ctx context.Context, req *milvuspb.RenameCollectionRequest) (*commonpb.Status, error) {
req = typeutil.Clone(req)
commonpbutil.UpdateMsgBase(
req.GetBase(),
commonpbutil.FillMsgBaseFromClient(paramtable.GetNodeID(), commonpbutil.WithTargetID(c.sess.ServerID)),
)
ret, err := c.grpcClient.ReCall(ctx, func(client rootcoordpb.RootCoordClient) (any, error) {
if !funcutil.CheckCtxValid(ctx) {
return nil, ctx.Err()
}
return client.RenameCollection(ctx, req)
})
if err != nil {
return nil, err
}
return ret.(*commonpb.Status), err
}

View File

@ -480,3 +480,7 @@ func (s *Server) ListPolicy(ctx context.Context, request *internalpb.ListPolicyR
func (s *Server) AlterCollection(ctx context.Context, request *milvuspb.AlterCollectionRequest) (*commonpb.Status, error) {
return s.rootCoord.AlterCollection(ctx, request)
}
func (s *Server) RenameCollection(ctx context.Context, request *milvuspb.RenameCollectionRequest) (*commonpb.Status, error) {
return s.rootCoord.RenameCollection(ctx, request)
}

View File

@ -31,7 +31,6 @@ import (
"github.com/milvus-io/milvus-proto/go-api/commonpb"
"github.com/milvus-io/milvus-proto/go-api/milvuspb"
"github.com/milvus-io/milvus/internal/proto/proxypb"
"github.com/milvus-io/milvus/internal/rootcoord"
"github.com/milvus-io/milvus/internal/types"
"github.com/milvus-io/milvus/internal/util/etcd"
@ -39,19 +38,14 @@ import (
"github.com/milvus-io/milvus/internal/util/sessionutil"
)
type proxyMock struct {
types.Proxy
invalidateCollectionMetaCache func(ctx context.Context, request *proxypb.InvalidateCollMetaCacheRequest) (*commonpb.Status, error)
}
func (p *proxyMock) InvalidateCollectionMetaCache(ctx context.Context, request *proxypb.InvalidateCollMetaCacheRequest) (*commonpb.Status, error) {
return p.invalidateCollectionMetaCache(ctx, request)
}
type mockCore struct {
types.RootCoordComponent
}
func (m *mockCore) RenameCollection(ctx context.Context, request *milvuspb.RenameCollectionRequest) (*commonpb.Status, error) {
return &commonpb.Status{ErrorCode: commonpb.ErrorCode_Success}, nil
}
func (m *mockCore) CheckHealth(ctx context.Context, req *milvuspb.CheckHealthRequest) (*milvuspb.CheckHealthResponse, error) {
return &milvuspb.CheckHealthResponse{
IsHealthy: true,
@ -194,9 +188,13 @@ func TestRun(t *testing.T) {
assert.Equal(t, true, ret.IsHealthy)
})
t.Run("RenameCollection", func(t *testing.T) {
_, err := svr.RenameCollection(ctx, nil)
assert.Nil(t, err)
})
err = svr.Stop()
assert.Nil(t, err)
}
func TestServerRun_DataCoordClientInitErr(t *testing.T) {

View File

@ -1604,6 +1604,53 @@ func (_c *RootCoord_Register_Call) Return(_a0 error) *RootCoord_Register_Call {
return _c
}
// RenameCollection provides a mock function with given fields: ctx, req
func (_m *RootCoord) RenameCollection(ctx context.Context, req *milvuspb.RenameCollectionRequest) (*commonpb.Status, error) {
ret := _m.Called(ctx, req)
var r0 *commonpb.Status
if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.RenameCollectionRequest) *commonpb.Status); ok {
r0 = rf(ctx, req)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*commonpb.Status)
}
}
var r1 error
if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.RenameCollectionRequest) error); ok {
r1 = rf(ctx, req)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
// RootCoord_RenameCollection_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RenameCollection'
type RootCoord_RenameCollection_Call struct {
*mock.Call
}
// RenameCollection is a helper method to define mock.On call
// - ctx context.Context
// - req *milvuspb.RenameCollectionRequest
func (_e *RootCoord_Expecter) RenameCollection(ctx interface{}, req interface{}) *RootCoord_RenameCollection_Call {
return &RootCoord_RenameCollection_Call{Call: _e.mock.On("RenameCollection", ctx, req)}
}
func (_c *RootCoord_RenameCollection_Call) Run(run func(ctx context.Context, req *milvuspb.RenameCollectionRequest)) *RootCoord_RenameCollection_Call {
_c.Call.Run(func(args mock.Arguments) {
run(args[0].(context.Context), args[1].(*milvuspb.RenameCollectionRequest))
})
return _c
}
func (_c *RootCoord_RenameCollection_Call) Return(_a0 *commonpb.Status, _a1 error) *RootCoord_RenameCollection_Call {
_c.Call.Return(_a0, _a1)
return _c
}
// ReportImport provides a mock function with given fields: ctx, req
func (_m *RootCoord) ReportImport(ctx context.Context, req *rootcoordpb.ImportResult) (*commonpb.Status, error) {
ret := _m.Called(ctx, req)

View File

@ -139,6 +139,8 @@ service RootCoord {
rpc ListPolicy(internal.ListPolicyRequest) returns (internal.ListPolicyResponse) {}
rpc CheckHealth(milvus.CheckHealthRequest) returns (milvus.CheckHealthResponse) {}
rpc RenameCollection(milvus.RenameCollectionRequest) returns (common.Status) {}
}
message AllocTimestampRequest {

View File

@ -674,105 +674,106 @@ func init() {
func init() { proto.RegisterFile("root_coord.proto", fileDescriptor_4513485a144f6b06) }
var fileDescriptor_4513485a144f6b06 = []byte{
// 1557 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x5b, 0x93, 0xda, 0x36,
0x14, 0x0e, 0x90, 0xbd, 0x1d, 0x58, 0xd8, 0x68, 0x72, 0xa1, 0x24, 0x6d, 0x09, 0x49, 0x1b, 0x72,
0x63, 0xd3, 0xcd, 0x4c, 0x9a, 0xe6, 0x2d, 0x0b, 0x99, 0x0d, 0xd3, 0xee, 0x64, 0x6b, 0x92, 0x4e,
0x7a, 0xd9, 0xa1, 0xc2, 0x56, 0xc0, 0xb3, 0xc6, 0x22, 0x92, 0xd8, 0xcb, 0xf4, 0xa1, 0xd3, 0x99,
0xbe, 0xf7, 0x3f, 0xb5, 0x3f, 0xa5, 0xbf, 0xa1, 0xef, 0x1d, 0x59, 0xb6, 0xb0, 0x8d, 0xcd, 0x7a,
0x93, 0xb4, 0x6f, 0x48, 0xfa, 0xfc, 0x7d, 0x47, 0xe7, 0x22, 0x1d, 0x01, 0x1b, 0x8c, 0x52, 0xd1,
0x37, 0x29, 0x65, 0x56, 0x6b, 0xc2, 0xa8, 0xa0, 0xe8, 0xf2, 0xd8, 0x76, 0x0e, 0xa7, 0x5c, 0x8d,
0x5a, 0x72, 0xd9, 0x5b, 0xad, 0x95, 0x4c, 0x3a, 0x1e, 0x53, 0x57, 0xcd, 0xd7, 0x4a, 0x61, 0x54,
0xad, 0x6c, 0xbb, 0x82, 0x30, 0x17, 0x3b, 0xfe, 0xb8, 0x38, 0x61, 0xf4, 0xf8, 0xc4, 0x1f, 0x54,
0x88, 0x30, 0xad, 0xfe, 0x98, 0x08, 0xac, 0x26, 0x1a, 0x7d, 0xb8, 0xf4, 0xd4, 0x71, 0xa8, 0xf9,
0xd2, 0x1e, 0x13, 0x2e, 0xf0, 0x78, 0x62, 0x90, 0xb7, 0x53, 0xc2, 0x05, 0x7a, 0x00, 0xe7, 0x07,
0x98, 0x93, 0x6a, 0xae, 0x9e, 0x6b, 0x16, 0xb7, 0xae, 0xb5, 0x22, 0x96, 0xf8, 0xf2, 0xbb, 0x7c,
0xb8, 0x8d, 0x39, 0x31, 0x3c, 0x24, 0xba, 0x08, 0x4b, 0x26, 0x9d, 0xba, 0xa2, 0x5a, 0xa8, 0xe7,
0x9a, 0xeb, 0x86, 0x1a, 0x34, 0x7e, 0xcb, 0xc1, 0xe5, 0xb8, 0x02, 0x9f, 0x50, 0x97, 0x13, 0xf4,
0x10, 0x96, 0xb9, 0xc0, 0x62, 0xca, 0x7d, 0x91, 0xab, 0x89, 0x22, 0x3d, 0x0f, 0x62, 0xf8, 0x50,
0x74, 0x0d, 0xd6, 0x44, 0xc0, 0x54, 0xcd, 0xd7, 0x73, 0xcd, 0xf3, 0xc6, 0x6c, 0x22, 0xc5, 0x86,
0xd7, 0x50, 0xf6, 0x4c, 0xe8, 0x76, 0x3e, 0xc0, 0xee, 0xf2, 0x61, 0x66, 0x07, 0x2a, 0x9a, 0xf9,
0x7d, 0x76, 0x55, 0x86, 0x7c, 0xb7, 0xe3, 0x51, 0x17, 0x8c, 0x7c, 0xb7, 0x93, 0xb2, 0x8f, 0x3f,
0xf3, 0x50, 0xea, 0x8e, 0x27, 0x94, 0x09, 0x83, 0xf0, 0xa9, 0x23, 0xde, 0x4d, 0xeb, 0x0a, 0xac,
0x08, 0xcc, 0x0f, 0xfa, 0xb6, 0xe5, 0x0b, 0x2e, 0xcb, 0x61, 0xd7, 0x42, 0x9f, 0x42, 0xd1, 0xc2,
0x02, 0xbb, 0xd4, 0x22, 0x72, 0xb1, 0xe0, 0x2d, 0x42, 0x30, 0xd5, 0xb5, 0xd0, 0x23, 0x58, 0x92,
0x1c, 0xa4, 0x7a, 0xbe, 0x9e, 0x6b, 0x96, 0xb7, 0xea, 0x89, 0x6a, 0xca, 0x40, 0xa9, 0x49, 0x0c,
0x05, 0x47, 0x35, 0x58, 0xe5, 0x64, 0x38, 0x26, 0xae, 0xe0, 0xd5, 0xa5, 0x7a, 0xa1, 0x59, 0x30,
0xf4, 0x18, 0x7d, 0x04, 0xab, 0x78, 0x2a, 0x68, 0xdf, 0xb6, 0x78, 0x75, 0xd9, 0x5b, 0x5b, 0x91,
0xe3, 0xae, 0xc5, 0xd1, 0x55, 0x58, 0x63, 0xf4, 0xa8, 0xaf, 0x1c, 0xb1, 0xe2, 0x59, 0xb3, 0xca,
0xe8, 0x51, 0x5b, 0x8e, 0xd1, 0x97, 0xb0, 0x64, 0xbb, 0x6f, 0x28, 0xaf, 0xae, 0xd6, 0x0b, 0xcd,
0xe2, 0xd6, 0xf5, 0x44, 0x5b, 0xbe, 0x26, 0x27, 0xdf, 0x61, 0x67, 0x4a, 0xf6, 0xb0, 0xcd, 0x0c,
0x85, 0x6f, 0xfc, 0x91, 0x83, 0x2b, 0x1d, 0xc2, 0x4d, 0x66, 0x0f, 0x48, 0xcf, 0xb7, 0xe2, 0xdd,
0xd3, 0xa2, 0x01, 0x25, 0x93, 0x3a, 0x0e, 0x31, 0x85, 0x4d, 0x5d, 0x1d, 0xc2, 0xc8, 0x1c, 0xfa,
0x04, 0xc0, 0xdf, 0x6e, 0xb7, 0xc3, 0xab, 0x05, 0x6f, 0x93, 0xa1, 0x99, 0xc6, 0x14, 0x2a, 0xbe,
0x21, 0x92, 0xb8, 0xeb, 0xbe, 0xa1, 0x73, 0xb4, 0xb9, 0x04, 0xda, 0x3a, 0x14, 0x27, 0x98, 0x09,
0x3b, 0xa2, 0x1c, 0x9e, 0x92, 0xb5, 0xa2, 0x65, 0xfc, 0x70, 0xce, 0x26, 0x1a, 0x7f, 0xe7, 0xa1,
0xe4, 0xeb, 0x4a, 0x4d, 0x8e, 0x3a, 0xb0, 0x26, 0xf7, 0xd4, 0x97, 0x7e, 0xf2, 0x5d, 0x70, 0xab,
0x95, 0x7c, 0x02, 0xb5, 0x62, 0x06, 0x1b, 0xab, 0x83, 0xc0, 0xf4, 0x0e, 0x14, 0x6d, 0xd7, 0x22,
0xc7, 0x7d, 0x15, 0x9e, 0xbc, 0x17, 0x9e, 0x1b, 0x51, 0x1e, 0x79, 0x0a, 0xb5, 0xb4, 0xb6, 0x45,
0x8e, 0x3d, 0x0e, 0xb0, 0x83, 0x9f, 0x1c, 0x11, 0xb8, 0x40, 0x8e, 0x05, 0xc3, 0xfd, 0x30, 0x57,
0xc1, 0xe3, 0xfa, 0xea, 0x14, 0x9b, 0x3c, 0x82, 0xd6, 0x33, 0xf9, 0xb5, 0xe6, 0xe6, 0xcf, 0x5c,
0xc1, 0x4e, 0x8c, 0x0a, 0x89, 0xce, 0xd6, 0x7e, 0x86, 0x8b, 0x49, 0x40, 0xb4, 0x01, 0x85, 0x03,
0x72, 0xe2, 0xbb, 0x5d, 0xfe, 0x44, 0x5b, 0xb0, 0x74, 0x28, 0x53, 0xc9, 0xf3, 0xf3, 0x5c, 0x6e,
0x78, 0x1b, 0x9a, 0xed, 0x44, 0x41, 0x9f, 0xe4, 0x1f, 0xe7, 0x1a, 0x7f, 0xe5, 0xa1, 0x3a, 0x9f,
0x6e, 0xef, 0x73, 0x56, 0x64, 0x49, 0xb9, 0x21, 0xac, 0xfb, 0x81, 0x8e, 0xb8, 0x6e, 0x3b, 0xcd,
0x75, 0x69, 0x16, 0x46, 0x7c, 0xaa, 0x7c, 0x58, 0xe2, 0xa1, 0xa9, 0x1a, 0x81, 0x0b, 0x73, 0x90,
0x04, 0xef, 0x3d, 0x89, 0x7a, 0xef, 0x66, 0x96, 0x10, 0x86, 0xbd, 0x68, 0xc1, 0xc5, 0x1d, 0x22,
0xda, 0x8c, 0x58, 0xc4, 0x15, 0x36, 0x76, 0xde, 0xbd, 0x60, 0x6b, 0xb0, 0x3a, 0xe5, 0xf2, 0x7e,
0x1c, 0x2b, 0x63, 0xd6, 0x0c, 0x3d, 0x6e, 0xfc, 0x9e, 0x83, 0x4b, 0x31, 0x99, 0xf7, 0x09, 0xd4,
0x02, 0x29, 0xb9, 0x36, 0xc1, 0x9c, 0x1f, 0x51, 0xa6, 0x0e, 0xda, 0x35, 0x43, 0x8f, 0xb7, 0xfe,
0xb9, 0x0e, 0x6b, 0x06, 0xa5, 0xa2, 0x2d, 0x5d, 0x82, 0x1c, 0x40, 0xd2, 0x26, 0x3a, 0x9e, 0x50,
0x97, 0xb8, 0xea, 0x60, 0xe5, 0xa8, 0x15, 0x35, 0xc0, 0x1f, 0xcc, 0x03, 0x7d, 0x47, 0xd5, 0x6e,
0x26, 0xe2, 0x63, 0xe0, 0xc6, 0x39, 0x34, 0xf6, 0xd4, 0xe4, 0x5d, 0xfd, 0xd2, 0x36, 0x0f, 0xda,
0x23, 0xec, 0xba, 0xc4, 0x41, 0x0f, 0xa2, 0x5f, 0xeb, 0x0e, 0x63, 0x1e, 0x1a, 0xe8, 0xdd, 0x48,
0xd4, 0xeb, 0x09, 0x66, 0xbb, 0xc3, 0xc0, 0xab, 0x8d, 0x73, 0xe8, 0xad, 0x17, 0x57, 0xa9, 0x6e,
0x73, 0x61, 0x9b, 0x3c, 0x10, 0xdc, 0x4a, 0x17, 0x9c, 0x03, 0x9f, 0x51, 0xb2, 0x0f, 0x1b, 0x6d,
0x46, 0xb0, 0x20, 0x6d, 0x5d, 0x30, 0xe8, 0x5e, 0xb2, 0x77, 0x62, 0xb0, 0x40, 0x68, 0x51, 0xf0,
0x1b, 0xe7, 0xd0, 0x8f, 0x50, 0xee, 0x30, 0x3a, 0x09, 0xd1, 0xdf, 0x49, 0xa4, 0x8f, 0x82, 0x32,
0x92, 0xf7, 0x61, 0xfd, 0x39, 0xe6, 0x21, 0xee, 0xdb, 0x89, 0xdc, 0x11, 0x4c, 0x40, 0x7d, 0x3d,
0x11, 0xba, 0x4d, 0xa9, 0x13, 0x72, 0xcf, 0x11, 0xa0, 0xe0, 0x30, 0x08, 0xa9, 0x24, 0xa7, 0xdb,
0x3c, 0x30, 0x90, 0xda, 0xcc, 0x8c, 0xd7, 0xc2, 0xbf, 0x42, 0x6d, 0x7e, 0xbd, 0xeb, 0x07, 0xfe,
0xff, 0x30, 0xe0, 0x15, 0x14, 0x55, 0xc4, 0x9f, 0x3a, 0x36, 0xe6, 0xe8, 0xd6, 0x82, 0x9c, 0xf0,
0x10, 0x19, 0x23, 0xf6, 0x2d, 0xac, 0xc9, 0x48, 0x2b, 0xd2, 0xcf, 0x52, 0x33, 0xe1, 0x2c, 0x94,
0x3d, 0x80, 0xa7, 0x8e, 0x20, 0x4c, 0x71, 0x7e, 0x9e, 0xc8, 0x39, 0x03, 0x64, 0x24, 0x75, 0xa1,
0xd2, 0x1b, 0xc9, 0xee, 0x2a, 0x70, 0x0d, 0x47, 0x77, 0x93, 0x2b, 0x2a, 0x8a, 0x0a, 0xe8, 0xef,
0x65, 0x03, 0x6b, 0x77, 0xef, 0xcb, 0xd6, 0x59, 0x10, 0x16, 0xca, 0xb2, 0xbb, 0xe9, 0x3b, 0x39,
0x73, 0xa1, 0xec, 0x43, 0x45, 0xc5, 0x6a, 0x2f, 0x68, 0x88, 0x52, 0xe8, 0x63, 0xa8, 0x8c, 0xf4,
0xdf, 0xc3, 0xba, 0x8c, 0xda, 0x8c, 0xfc, 0x76, 0x6a, 0x64, 0xcf, 0x4a, 0xbd, 0x0f, 0xa5, 0xe7,
0x98, 0xcf, 0x98, 0x9b, 0x69, 0x15, 0x3e, 0x47, 0x9c, 0xa9, 0xc0, 0x0f, 0xa0, 0x2c, 0x83, 0xa2,
0x3f, 0xe6, 0x29, 0xc7, 0x53, 0x14, 0x14, 0x48, 0xdc, 0xcd, 0x84, 0xd5, 0x62, 0x1c, 0x2e, 0x47,
0xd7, 0x74, 0x41, 0xff, 0x87, 0xa2, 0x04, 0x4a, 0x72, 0x2d, 0xe8, 0x65, 0x52, 0x1c, 0x18, 0x86,
0x04, 0x42, 0xb7, 0x33, 0x20, 0x43, 0x77, 0x57, 0x39, 0xfa, 0xb0, 0x45, 0xf7, 0xd3, 0xda, 0x9a,
0xc4, 0x27, 0x76, 0xad, 0x95, 0x15, 0xae, 0x25, 0x7f, 0x82, 0x15, 0xff, 0xb9, 0x19, 0xaf, 0xfa,
0xd8, 0xc7, 0xfa, 0xa5, 0x5b, 0xbb, 0x75, 0x2a, 0x4e, 0xb3, 0x63, 0xb8, 0xf4, 0x6a, 0x62, 0xc9,
0x2b, 0x4f, 0x5d, 0xac, 0xc1, 0xd5, 0x1e, 0xcf, 0x6d, 0x7d, 0x1b, 0xc7, 0x70, 0xbb, 0x7c, 0x78,
0x5a, 0x6e, 0x33, 0xf8, 0xb8, 0xeb, 0x1e, 0x62, 0xc7, 0xb6, 0x22, 0x37, 0xeb, 0x2e, 0x11, 0xb8,
0x8d, 0xcd, 0x11, 0x89, 0x5f, 0xfc, 0xea, 0xbf, 0x8b, 0xe8, 0x27, 0x1a, 0x9c, 0xb1, 0x9e, 0x7e,
0x01, 0xa4, 0x4e, 0x21, 0xf7, 0x8d, 0x3d, 0x9c, 0x32, 0xac, 0x92, 0x3e, 0xad, 0xa5, 0x99, 0x87,
0x06, 0x32, 0x5f, 0x9c, 0xe1, 0x8b, 0x50, 0xb7, 0x01, 0x3b, 0x44, 0xec, 0x12, 0xc1, 0x6c, 0x33,
0xed, 0xa8, 0x9e, 0x01, 0x52, 0x82, 0x96, 0x80, 0xd3, 0x02, 0x3d, 0x58, 0x56, 0x2f, 0x6e, 0xd4,
0x48, 0xfc, 0x28, 0xf8, 0xbf, 0x60, 0x51, 0x8f, 0xa4, 0xff, 0x53, 0x08, 0x9d, 0x11, 0x3b, 0x44,
0x84, 0x5e, 0xf2, 0x29, 0xe5, 0x1a, 0x05, 0x2d, 0x2e, 0xd7, 0x38, 0x56, 0x8b, 0xb9, 0x50, 0xf9,
0xc6, 0xe6, 0xfe, 0xe2, 0x4b, 0xcc, 0x0f, 0xd2, 0x2e, 0x9e, 0x18, 0x6a, 0xf1, 0xc5, 0x33, 0x07,
0x0e, 0x79, 0xac, 0x64, 0x10, 0xb9, 0xe0, 0xfb, 0x2d, 0xf5, 0x31, 0x12, 0xfe, 0xab, 0xe5, 0xb4,
0x24, 0x7b, 0xad, 0xbb, 0x4a, 0xfd, 0x78, 0x88, 0x5f, 0xf6, 0xb3, 0xb2, 0xd1, 0x10, 0xf9, 0xce,
0xc9, 0xc0, 0xec, 0x57, 0xe5, 0x87, 0x66, 0xee, 0xc3, 0x46, 0x87, 0x38, 0x24, 0xc2, 0x7c, 0x2f,
0xa5, 0x6f, 0x8a, 0xc2, 0x32, 0x56, 0xde, 0x08, 0xd6, 0x65, 0x18, 0xe4, 0x77, 0xaf, 0x38, 0x61,
0x3c, 0xe5, 0x92, 0x8c, 0x60, 0x02, 0xea, 0x3b, 0x59, 0xa0, 0xa1, 0x1c, 0x5a, 0x8f, 0x3c, 0xdc,
0xe2, 0xfb, 0x98, 0x05, 0x35, 0xe9, 0x19, 0x59, 0xbb, 0x9f, 0x11, 0x1d, 0xca, 0x21, 0x50, 0xe1,
0x36, 0xa8, 0x43, 0x52, 0xca, 0x7a, 0x06, 0xc8, 0xe8, 0xae, 0x17, 0xb0, 0x2a, 0xfb, 0x05, 0x8f,
0xf2, 0x66, 0x6a, 0x3b, 0x71, 0x06, 0xc2, 0x7d, 0xa8, 0xbc, 0x98, 0x10, 0x86, 0x05, 0x91, 0xfe,
0xf2, 0x78, 0x93, 0x2b, 0x2b, 0x86, 0xca, 0xfc, 0x16, 0x81, 0x1e, 0x91, 0x27, 0xf8, 0x02, 0x27,
0xcc, 0x00, 0x8b, 0xcf, 0xb6, 0x30, 0x2e, 0x7c, 0x78, 0xaa, 0x79, 0x69, 0xd8, 0x42, 0x01, 0xcf,
0xf2, 0x0c, 0x02, 0x0a, 0x17, 0x7e, 0x0b, 0xfa, 0x5b, 0xdf, 0x63, 0xf6, 0xa1, 0xed, 0x90, 0x21,
0x49, 0xa9, 0x80, 0x38, 0x2c, 0xa3, 0x8b, 0x06, 0x50, 0x54, 0xc2, 0x3b, 0x0c, 0xbb, 0x02, 0x2d,
0x32, 0xcd, 0x43, 0x04, 0xb4, 0xcd, 0xd3, 0x81, 0x7a, 0x13, 0x26, 0x80, 0x2c, 0x8b, 0x3d, 0xea,
0xd8, 0xe6, 0x49, 0xbc, 0xd9, 0xd1, 0x47, 0xc3, 0x0c, 0x92, 0xd2, 0xec, 0x24, 0x22, 0xb5, 0xc8,
0x00, 0x8a, 0xed, 0x11, 0x31, 0x0f, 0x9e, 0x13, 0xec, 0x88, 0x51, 0xda, 0xe3, 0x68, 0x86, 0x58,
0xbc, 0x91, 0x08, 0x30, 0xd0, 0xd8, 0x7e, 0xfc, 0xc3, 0xa3, 0xa1, 0x2d, 0x46, 0xd3, 0x81, 0x74,
0xe3, 0xa6, 0x82, 0xde, 0xb7, 0xa9, 0xff, 0x6b, 0x33, 0x30, 0x70, 0xd3, 0xa3, 0xda, 0xd4, 0x45,
0x3a, 0x19, 0x0c, 0x96, 0xbd, 0xa9, 0x87, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x68, 0x68, 0x82,
0xf8, 0x42, 0x19, 0x00, 0x00,
// 1570 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xeb, 0x92, 0xd3, 0x36,
0x14, 0x26, 0x09, 0x7b, 0x3b, 0xc9, 0x26, 0x8b, 0x86, 0x4b, 0x1a, 0x68, 0x1b, 0x02, 0x2d, 0xe1,
0x96, 0xa5, 0xcb, 0x0c, 0xa5, 0xfc, 0x63, 0x13, 0x66, 0xc9, 0xb4, 0x3b, 0x6c, 0x1d, 0xe8, 0xd0,
0xcb, 0x4e, 0xaa, 0xd8, 0x87, 0xc4, 0xb3, 0x8e, 0x15, 0x2c, 0x65, 0x2f, 0xd3, 0x1f, 0x9d, 0xce,
0xf4, 0x7f, 0xdf, 0xa9, 0x7d, 0x87, 0xbe, 0x40, 0x5f, 0xa4, 0x23, 0x5f, 0x14, 0xdb, 0xb1, 0xb3,
0x5e, 0xa0, 0xfd, 0x67, 0x49, 0x9f, 0xbe, 0xef, 0xe8, 0x1c, 0x1d, 0x49, 0xc7, 0xb0, 0xe1, 0x30,
0x26, 0xfa, 0x3a, 0x63, 0x8e, 0xd1, 0x9a, 0x38, 0x4c, 0x30, 0x72, 0x79, 0x6c, 0x5a, 0x87, 0x53,
0xee, 0xb5, 0x5a, 0x72, 0xd8, 0x1d, 0xad, 0x95, 0x74, 0x36, 0x1e, 0x33, 0xdb, 0xeb, 0xaf, 0x95,
0xc2, 0xa8, 0x5a, 0xd9, 0xb4, 0x05, 0x3a, 0x36, 0xb5, 0xfc, 0x76, 0x71, 0xe2, 0xb0, 0xe3, 0x13,
0xbf, 0x51, 0x41, 0xa1, 0x1b, 0xfd, 0x31, 0x0a, 0xea, 0x75, 0x34, 0xfa, 0x70, 0xe9, 0xa9, 0x65,
0x31, 0xfd, 0xa5, 0x39, 0x46, 0x2e, 0xe8, 0x78, 0xa2, 0xe1, 0xdb, 0x29, 0x72, 0x41, 0x1e, 0xc0,
0xf9, 0x01, 0xe5, 0x58, 0xcd, 0xd5, 0x73, 0xcd, 0xe2, 0xd6, 0xb5, 0x56, 0xc4, 0x12, 0x5f, 0x7e,
0x97, 0x0f, 0xb7, 0x29, 0x47, 0xcd, 0x45, 0x92, 0x8b, 0xb0, 0xa4, 0xb3, 0xa9, 0x2d, 0xaa, 0x85,
0x7a, 0xae, 0xb9, 0xae, 0x79, 0x8d, 0xc6, 0x6f, 0x39, 0xb8, 0x1c, 0x57, 0xe0, 0x13, 0x66, 0x73,
0x24, 0x0f, 0x61, 0x99, 0x0b, 0x2a, 0xa6, 0xdc, 0x17, 0xb9, 0x9a, 0x28, 0xd2, 0x73, 0x21, 0x9a,
0x0f, 0x25, 0xd7, 0x60, 0x4d, 0x04, 0x4c, 0xd5, 0x7c, 0x3d, 0xd7, 0x3c, 0xaf, 0xcd, 0x3a, 0x52,
0x6c, 0x78, 0x0d, 0x65, 0xd7, 0x84, 0x6e, 0xe7, 0x03, 0xac, 0x2e, 0x1f, 0x66, 0xb6, 0xa0, 0xa2,
0x98, 0xdf, 0x67, 0x55, 0x65, 0xc8, 0x77, 0x3b, 0x2e, 0x75, 0x41, 0xcb, 0x77, 0x3b, 0x29, 0xeb,
0xf8, 0x33, 0x0f, 0xa5, 0xee, 0x78, 0xc2, 0x1c, 0xa1, 0x21, 0x9f, 0x5a, 0xe2, 0xdd, 0xb4, 0xae,
0xc0, 0x8a, 0xa0, 0xfc, 0xa0, 0x6f, 0x1a, 0xbe, 0xe0, 0xb2, 0x6c, 0x76, 0x0d, 0xf2, 0x29, 0x14,
0x0d, 0x2a, 0xa8, 0xcd, 0x0c, 0x94, 0x83, 0x05, 0x77, 0x10, 0x82, 0xae, 0xae, 0x41, 0x1e, 0xc1,
0x92, 0xe4, 0xc0, 0xea, 0xf9, 0x7a, 0xae, 0x59, 0xde, 0xaa, 0x27, 0xaa, 0x79, 0x06, 0x4a, 0x4d,
0xd4, 0x3c, 0x38, 0xa9, 0xc1, 0x2a, 0xc7, 0xe1, 0x18, 0x6d, 0xc1, 0xab, 0x4b, 0xf5, 0x42, 0xb3,
0xa0, 0xa9, 0x36, 0xf9, 0x08, 0x56, 0xe9, 0x54, 0xb0, 0xbe, 0x69, 0xf0, 0xea, 0xb2, 0x3b, 0xb6,
0x22, 0xdb, 0x5d, 0x83, 0x93, 0xab, 0xb0, 0xe6, 0xb0, 0xa3, 0xbe, 0xe7, 0x88, 0x15, 0xd7, 0x9a,
0x55, 0x87, 0x1d, 0xb5, 0x65, 0x9b, 0x7c, 0x09, 0x4b, 0xa6, 0xfd, 0x86, 0xf1, 0xea, 0x6a, 0xbd,
0xd0, 0x2c, 0x6e, 0x5d, 0x4f, 0xb4, 0xe5, 0x6b, 0x3c, 0xf9, 0x8e, 0x5a, 0x53, 0xdc, 0xa3, 0xa6,
0xa3, 0x79, 0xf8, 0xc6, 0x1f, 0x39, 0xb8, 0xd2, 0x41, 0xae, 0x3b, 0xe6, 0x00, 0x7b, 0xbe, 0x15,
0xef, 0xbe, 0x2d, 0x1a, 0x50, 0xd2, 0x99, 0x65, 0xa1, 0x2e, 0x4c, 0x66, 0xab, 0x10, 0x46, 0xfa,
0xc8, 0x27, 0x00, 0xfe, 0x72, 0xbb, 0x1d, 0x5e, 0x2d, 0xb8, 0x8b, 0x0c, 0xf5, 0x34, 0xa6, 0x50,
0xf1, 0x0d, 0x91, 0xc4, 0x5d, 0xfb, 0x0d, 0x9b, 0xa3, 0xcd, 0x25, 0xd0, 0xd6, 0xa1, 0x38, 0xa1,
0x8e, 0x30, 0x23, 0xca, 0xe1, 0x2e, 0x99, 0x2b, 0x4a, 0xc6, 0x0f, 0xe7, 0xac, 0xa3, 0xf1, 0x4f,
0x1e, 0x4a, 0xbe, 0xae, 0xd4, 0xe4, 0xa4, 0x03, 0x6b, 0x72, 0x4d, 0x7d, 0xe9, 0x27, 0xdf, 0x05,
0xb7, 0x5a, 0xc9, 0x27, 0x50, 0x2b, 0x66, 0xb0, 0xb6, 0x3a, 0x08, 0x4c, 0xef, 0x40, 0xd1, 0xb4,
0x0d, 0x3c, 0xee, 0x7b, 0xe1, 0xc9, 0xbb, 0xe1, 0xb9, 0x11, 0xe5, 0x91, 0xa7, 0x50, 0x4b, 0x69,
0x1b, 0x78, 0xec, 0x72, 0x80, 0x19, 0x7c, 0x72, 0x82, 0x70, 0x01, 0x8f, 0x85, 0x43, 0xfb, 0x61,
0xae, 0x82, 0xcb, 0xf5, 0xd5, 0x29, 0x36, 0xb9, 0x04, 0xad, 0x67, 0x72, 0xb6, 0xe2, 0xe6, 0xcf,
0x6c, 0xe1, 0x9c, 0x68, 0x15, 0x8c, 0xf6, 0xd6, 0x7e, 0x86, 0x8b, 0x49, 0x40, 0xb2, 0x01, 0x85,
0x03, 0x3c, 0xf1, 0xdd, 0x2e, 0x3f, 0xc9, 0x16, 0x2c, 0x1d, 0xca, 0xad, 0xe4, 0xfa, 0x79, 0x6e,
0x6f, 0xb8, 0x0b, 0x9a, 0xad, 0xc4, 0x83, 0x3e, 0xc9, 0x3f, 0xce, 0x35, 0xfe, 0xca, 0x43, 0x75,
0x7e, 0xbb, 0xbd, 0xcf, 0x59, 0x91, 0x65, 0xcb, 0x0d, 0x61, 0xdd, 0x0f, 0x74, 0xc4, 0x75, 0xdb,
0x69, 0xae, 0x4b, 0xb3, 0x30, 0xe2, 0x53, 0xcf, 0x87, 0x25, 0x1e, 0xea, 0xaa, 0x21, 0x5c, 0x98,
0x83, 0x24, 0x78, 0xef, 0x49, 0xd4, 0x7b, 0x37, 0xb3, 0x84, 0x30, 0xec, 0x45, 0x03, 0x2e, 0xee,
0xa0, 0x68, 0x3b, 0x68, 0xa0, 0x2d, 0x4c, 0x6a, 0xbd, 0x7b, 0xc2, 0xd6, 0x60, 0x75, 0xca, 0xe5,
0xfd, 0x38, 0xf6, 0x8c, 0x59, 0xd3, 0x54, 0xbb, 0xf1, 0x7b, 0x0e, 0x2e, 0xc5, 0x64, 0xde, 0x27,
0x50, 0x0b, 0xa4, 0xe4, 0xd8, 0x84, 0x72, 0x7e, 0xc4, 0x1c, 0xef, 0xa0, 0x5d, 0xd3, 0x54, 0x7b,
0xeb, 0xef, 0x06, 0xac, 0x69, 0x8c, 0x89, 0xb6, 0x74, 0x09, 0xb1, 0x80, 0x48, 0x9b, 0xd8, 0x78,
0xc2, 0x6c, 0xb4, 0xbd, 0x83, 0x95, 0x93, 0x56, 0xd4, 0x00, 0xbf, 0x31, 0x0f, 0xf4, 0x1d, 0x55,
0xbb, 0x99, 0x88, 0x8f, 0x81, 0x1b, 0xe7, 0xc8, 0xd8, 0x55, 0x93, 0x77, 0xf5, 0x4b, 0x53, 0x3f,
0x68, 0x8f, 0xa8, 0x6d, 0xa3, 0x45, 0x1e, 0x44, 0x67, 0xab, 0x17, 0xc6, 0x3c, 0x34, 0xd0, 0xbb,
0x91, 0xa8, 0xd7, 0x13, 0x8e, 0x69, 0x0f, 0x03, 0xaf, 0x36, 0xce, 0x91, 0xb7, 0x6e, 0x5c, 0xa5,
0xba, 0xc9, 0x85, 0xa9, 0xf3, 0x40, 0x70, 0x2b, 0x5d, 0x70, 0x0e, 0x7c, 0x46, 0xc9, 0x3e, 0x6c,
0xb4, 0x1d, 0xa4, 0x02, 0xdb, 0x2a, 0x61, 0xc8, 0xbd, 0x64, 0xef, 0xc4, 0x60, 0x81, 0xd0, 0xa2,
0xe0, 0x37, 0xce, 0x91, 0x1f, 0xa1, 0xdc, 0x71, 0xd8, 0x24, 0x44, 0x7f, 0x27, 0x91, 0x3e, 0x0a,
0xca, 0x48, 0xde, 0x87, 0xf5, 0xe7, 0x94, 0x87, 0xb8, 0x6f, 0x27, 0x72, 0x47, 0x30, 0x01, 0xf5,
0xf5, 0x44, 0xe8, 0x36, 0x63, 0x56, 0xc8, 0x3d, 0x47, 0x40, 0x82, 0xc3, 0x20, 0xa4, 0x92, 0xbc,
0xdd, 0xe6, 0x81, 0x81, 0xd4, 0x66, 0x66, 0xbc, 0x12, 0xfe, 0x15, 0x6a, 0xf3, 0xe3, 0x5d, 0x3f,
0xf0, 0xff, 0x87, 0x01, 0xaf, 0xa0, 0xe8, 0x45, 0xfc, 0xa9, 0x65, 0x52, 0x4e, 0x6e, 0x2d, 0xd8,
0x13, 0x2e, 0x22, 0x63, 0xc4, 0xbe, 0x85, 0x35, 0x19, 0x69, 0x8f, 0xf4, 0xb3, 0xd4, 0x9d, 0x70,
0x16, 0xca, 0x1e, 0xc0, 0x53, 0x4b, 0xa0, 0xe3, 0x71, 0x7e, 0x9e, 0xc8, 0x39, 0x03, 0x64, 0x24,
0xb5, 0xa1, 0xd2, 0x1b, 0xc9, 0xd7, 0x55, 0xe0, 0x1a, 0x4e, 0xee, 0x26, 0x67, 0x54, 0x14, 0x15,
0xd0, 0xdf, 0xcb, 0x06, 0x56, 0xee, 0xde, 0x97, 0x4f, 0x67, 0x81, 0x4e, 0x68, 0x97, 0xdd, 0x4d,
0x5f, 0xc9, 0x99, 0x13, 0x65, 0x1f, 0x2a, 0x5e, 0xac, 0xf6, 0x82, 0x07, 0x51, 0x0a, 0x7d, 0x0c,
0x95, 0x91, 0xfe, 0x7b, 0x58, 0x97, 0x51, 0x9b, 0x91, 0xdf, 0x4e, 0x8d, 0xec, 0x59, 0xa9, 0xf7,
0xa1, 0xf4, 0x9c, 0xf2, 0x19, 0x73, 0x33, 0x2d, 0xc3, 0xe7, 0x88, 0x33, 0x25, 0xf8, 0x01, 0x94,
0x65, 0x50, 0xd4, 0x64, 0x9e, 0x72, 0x3c, 0x45, 0x41, 0x81, 0xc4, 0xdd, 0x4c, 0x58, 0x25, 0xc6,
0xe1, 0x72, 0x74, 0x4c, 0x25, 0xf4, 0x7f, 0x28, 0x8a, 0x50, 0x92, 0x63, 0xc1, 0x5b, 0x26, 0xc5,
0x81, 0x61, 0x48, 0x20, 0x74, 0x3b, 0x03, 0x32, 0x74, 0x77, 0x95, 0xa3, 0x85, 0x2d, 0xb9, 0x9f,
0xf6, 0xac, 0x49, 0x2c, 0xb1, 0x6b, 0xad, 0xac, 0x70, 0x25, 0xf9, 0x13, 0xac, 0xf8, 0xe5, 0x66,
0x3c, 0xeb, 0x63, 0x93, 0x55, 0xa5, 0x5b, 0xbb, 0x75, 0x2a, 0x4e, 0xb1, 0x53, 0xb8, 0xf4, 0x6a,
0x62, 0xc8, 0x2b, 0xcf, 0xbb, 0x58, 0x83, 0xab, 0x3d, 0xbe, 0xb7, 0xd5, 0x6d, 0x1c, 0xc3, 0xed,
0xf2, 0xe1, 0x69, 0x7b, 0xdb, 0x81, 0x8f, 0xbb, 0xf6, 0x21, 0xb5, 0x4c, 0x23, 0x72, 0xb3, 0xee,
0xa2, 0xa0, 0x6d, 0xaa, 0x8f, 0x30, 0x7e, 0xf1, 0x7b, 0xff, 0x2e, 0xa2, 0x53, 0x14, 0x38, 0x63,
0x3e, 0xfd, 0x02, 0xc4, 0x3b, 0x85, 0xec, 0x37, 0xe6, 0x70, 0xea, 0x50, 0x6f, 0xd3, 0xa7, 0x3d,
0x69, 0xe6, 0xa1, 0x81, 0xcc, 0x17, 0x67, 0x98, 0x11, 0x7a, 0x6d, 0xc0, 0x0e, 0x8a, 0x5d, 0x14,
0x8e, 0xa9, 0xa7, 0x1d, 0xd5, 0x33, 0x40, 0x4a, 0xd0, 0x12, 0x70, 0x4a, 0xa0, 0x07, 0xcb, 0x5e,
0xc5, 0x4d, 0x1a, 0x89, 0x93, 0x82, 0xff, 0x05, 0x8b, 0xde, 0x48, 0xea, 0x9f, 0x42, 0xe8, 0x8c,
0xd8, 0x41, 0x11, 0xaa, 0xe4, 0x53, 0xd2, 0x35, 0x0a, 0x5a, 0x9c, 0xae, 0x71, 0xac, 0x12, 0xb3,
0xa1, 0xf2, 0x8d, 0xc9, 0xfd, 0xc1, 0x97, 0x94, 0x1f, 0xa4, 0x5d, 0x3c, 0x31, 0xd4, 0xe2, 0x8b,
0x67, 0x0e, 0x1c, 0xf2, 0x58, 0x49, 0x43, 0x39, 0xe0, 0xfb, 0x2d, 0xb5, 0x18, 0x09, 0xff, 0x6a,
0x39, 0x6d, 0x93, 0xbd, 0x56, 0xaf, 0x4a, 0x55, 0x3c, 0xc4, 0x2f, 0xfb, 0x59, 0xda, 0x28, 0x88,
0xac, 0x73, 0x32, 0x30, 0xfb, 0x59, 0xf9, 0xa1, 0x99, 0xfb, 0xb0, 0xd1, 0x41, 0x0b, 0x23, 0xcc,
0xf7, 0x52, 0xde, 0x4d, 0x51, 0x58, 0xc6, 0xcc, 0x1b, 0xc1, 0xba, 0x0c, 0x83, 0x9c, 0xf7, 0x8a,
0xa3, 0xc3, 0x53, 0x2e, 0xc9, 0x08, 0x26, 0xa0, 0xbe, 0x93, 0x05, 0x1a, 0xda, 0x43, 0xeb, 0x91,
0xc2, 0x2d, 0xbe, 0x8e, 0x59, 0x50, 0x93, 0xca, 0xc8, 0xda, 0xfd, 0x8c, 0xe8, 0xd0, 0x1e, 0x02,
0x2f, 0xdc, 0x1a, 0xb3, 0x30, 0x25, 0xad, 0x67, 0x80, 0x8c, 0xee, 0x7a, 0x01, 0xab, 0xf2, 0xbd,
0xe0, 0x52, 0xde, 0x4c, 0x7d, 0x4e, 0x9c, 0x81, 0x70, 0x1f, 0x2a, 0x2f, 0x26, 0xe8, 0x50, 0x81,
0xd2, 0x5f, 0x2e, 0x6f, 0x72, 0x66, 0xc5, 0x50, 0x99, 0x6b, 0x11, 0xe8, 0xa1, 0x3c, 0xc1, 0x17,
0x38, 0x61, 0x06, 0x58, 0x7c, 0xb6, 0x85, 0x71, 0xe1, 0xc3, 0xd3, 0xeb, 0x97, 0x86, 0x2d, 0x14,
0x70, 0x2d, 0xcf, 0x20, 0xe0, 0xe1, 0xc2, 0xb5, 0xa0, 0xbf, 0xf4, 0x3d, 0xc7, 0x3c, 0x34, 0x2d,
0x1c, 0x62, 0x4a, 0x06, 0xc4, 0x61, 0x19, 0x5d, 0x34, 0x80, 0xa2, 0x27, 0xbc, 0xe3, 0x50, 0x5b,
0x90, 0x45, 0xa6, 0xb9, 0x88, 0x80, 0xb6, 0x79, 0x3a, 0x50, 0x2d, 0x42, 0x07, 0x90, 0x69, 0xb1,
0xc7, 0x2c, 0x53, 0x3f, 0x89, 0x3f, 0x76, 0xd4, 0xd1, 0x30, 0x83, 0xa4, 0x3c, 0x76, 0x12, 0x91,
0x4a, 0x64, 0x00, 0xc5, 0xf6, 0x08, 0xf5, 0x83, 0xe7, 0x48, 0x2d, 0x31, 0x4a, 0x2b, 0x8e, 0x66,
0x88, 0xc5, 0x0b, 0x89, 0x00, 0xc3, 0xd1, 0xd0, 0xd0, 0xa6, 0xe3, 0xd3, 0x2b, 0xf3, 0x38, 0x2c,
0x5b, 0x34, 0xb6, 0x1f, 0xff, 0xf0, 0x68, 0x68, 0x8a, 0xd1, 0x74, 0x20, 0x47, 0x36, 0x3d, 0xe8,
0x7d, 0x93, 0xf9, 0x5f, 0x9b, 0x81, 0x07, 0x36, 0xdd, 0xd9, 0x9b, 0xea, 0x14, 0x98, 0x0c, 0x06,
0xcb, 0x6e, 0xd7, 0xc3, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xd8, 0x8d, 0x70, 0xb9, 0xa3, 0x19,
0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -882,6 +883,7 @@ type RootCoordClient interface {
SelectGrant(ctx context.Context, in *milvuspb.SelectGrantRequest, opts ...grpc.CallOption) (*milvuspb.SelectGrantResponse, error)
ListPolicy(ctx context.Context, in *internalpb.ListPolicyRequest, opts ...grpc.CallOption) (*internalpb.ListPolicyResponse, error)
CheckHealth(ctx context.Context, in *milvuspb.CheckHealthRequest, opts ...grpc.CallOption) (*milvuspb.CheckHealthResponse, error)
RenameCollection(ctx context.Context, in *milvuspb.RenameCollectionRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
}
type rootCoordClient struct {
@ -1279,6 +1281,15 @@ func (c *rootCoordClient) CheckHealth(ctx context.Context, in *milvuspb.CheckHea
return out, nil
}
func (c *rootCoordClient) RenameCollection(ctx context.Context, in *milvuspb.RenameCollectionRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
out := new(commonpb.Status)
err := c.cc.Invoke(ctx, "/milvus.proto.rootcoord.RootCoord/RenameCollection", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// RootCoordServer is the server API for RootCoord service.
type RootCoordServer interface {
GetComponentStates(context.Context, *milvuspb.GetComponentStatesRequest) (*milvuspb.ComponentStates, error)
@ -1376,6 +1387,7 @@ type RootCoordServer interface {
SelectGrant(context.Context, *milvuspb.SelectGrantRequest) (*milvuspb.SelectGrantResponse, error)
ListPolicy(context.Context, *internalpb.ListPolicyRequest) (*internalpb.ListPolicyResponse, error)
CheckHealth(context.Context, *milvuspb.CheckHealthRequest) (*milvuspb.CheckHealthResponse, error)
RenameCollection(context.Context, *milvuspb.RenameCollectionRequest) (*commonpb.Status, error)
}
// UnimplementedRootCoordServer can be embedded to have forward compatible implementations.
@ -1511,6 +1523,9 @@ func (*UnimplementedRootCoordServer) ListPolicy(ctx context.Context, req *intern
func (*UnimplementedRootCoordServer) CheckHealth(ctx context.Context, req *milvuspb.CheckHealthRequest) (*milvuspb.CheckHealthResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CheckHealth not implemented")
}
func (*UnimplementedRootCoordServer) RenameCollection(ctx context.Context, req *milvuspb.RenameCollectionRequest) (*commonpb.Status, error) {
return nil, status.Errorf(codes.Unimplemented, "method RenameCollection not implemented")
}
func RegisterRootCoordServer(s *grpc.Server, srv RootCoordServer) {
s.RegisterService(&_RootCoord_serviceDesc, srv)
@ -2290,6 +2305,24 @@ func _RootCoord_CheckHealth_Handler(srv interface{}, ctx context.Context, dec fu
return interceptor(ctx, in, info, handler)
}
func _RootCoord_RenameCollection_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(milvuspb.RenameCollectionRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RootCoordServer).RenameCollection(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.rootcoord.RootCoord/RenameCollection",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RootCoordServer).RenameCollection(ctx, req.(*milvuspb.RenameCollectionRequest))
}
return interceptor(ctx, in, info, handler)
}
var _RootCoord_serviceDesc = grpc.ServiceDesc{
ServiceName: "milvus.proto.rootcoord.RootCoord",
HandlerType: (*RootCoordServer)(nil),
@ -2466,6 +2499,10 @@ var _RootCoord_serviceDesc = grpc.ServiceDesc{
MethodName: "CheckHealth",
Handler: _RootCoord_CheckHealth_Handler,
},
{
MethodName: "RenameCollection",
Handler: _RootCoord_RenameCollection_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "root_coord.proto",

View File

@ -24,10 +24,11 @@ import (
"strconv"
"sync"
"github.com/golang/protobuf/proto"
"go.opentelemetry.io/otel"
"go.uber.org/zap"
"golang.org/x/sync/errgroup"
"github.com/golang/protobuf/proto"
"github.com/milvus-io/milvus-proto/go-api/commonpb"
"github.com/milvus-io/milvus-proto/go-api/milvuspb"
"github.com/milvus-io/milvus-proto/go-api/schemapb"
@ -49,7 +50,6 @@ import (
"github.com/milvus-io/milvus/internal/util/paramtable"
"github.com/milvus-io/milvus/internal/util/timerecord"
"github.com/milvus-io/milvus/internal/util/typeutil"
"go.uber.org/zap"
)
const moduleName = "Proxy"
@ -4407,6 +4407,47 @@ func (node *Proxy) CheckHealth(ctx context.Context, request *milvuspb.CheckHealt
}, nil
}
func (node *Proxy) RenameCollection(ctx context.Context, req *milvuspb.RenameCollectionRequest) (*commonpb.Status, error) {
ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-RefreshPolicyInfoCache")
defer sp.End()
log := log.Ctx(ctx).With(
zap.String("role", typeutil.ProxyRole),
zap.String("oldName", req.GetOldName()),
zap.String("newName", req.GetNewName()))
log.Info("received rename collection request")
var err error
if !node.checkHealthy() {
return unhealthyStatus(), nil
}
if err := validateCollectionName(req.GetNewName()); err != nil {
log.Warn("validate new collection name fail", zap.Error(err))
return &commonpb.Status{
ErrorCode: commonpb.ErrorCode_IllegalCollectionName,
Reason: err.Error(),
}, err
}
req.Base = commonpbutil.NewMsgBase(
commonpbutil.WithMsgType(commonpb.MsgType_RenameCollection),
commonpbutil.WithMsgID(0),
commonpbutil.WithSourceID(paramtable.GetNodeID()),
)
resp, err := node.rootCoord.RenameCollection(ctx, req)
if err != nil {
log.Warn("failed to rename collection", zap.Error(err))
return &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: err.Error(),
}, err
}
return resp, nil
}
func (node *Proxy) CreateResourceGroup(ctx context.Context, request *milvuspb.CreateResourceGroupRequest) (*commonpb.Status, error) {
return &commonpb.Status{
ErrorCode: commonpb.ErrorCode_Success,

View File

@ -21,14 +21,16 @@ import (
"testing"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/milvus-io/milvus-proto/go-api/commonpb"
"github.com/milvus-io/milvus-proto/go-api/milvuspb"
"github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/mocks"
"github.com/milvus-io/milvus/internal/proto/proxypb"
"github.com/milvus-io/milvus/internal/util/paramtable"
"github.com/milvus-io/milvus/internal/util/sessionutil"
"github.com/stretchr/testify/assert"
)
func TestProxy_InvalidateCollectionMetaCache_remove_stream(t *testing.T) {
@ -142,3 +144,57 @@ func TestProxy_CheckHealth(t *testing.T) {
assert.Equal(t, 2, len(resp.GetReasons()))
})
}
func TestProxyRenameCollection(t *testing.T) {
t.Run("not healthy", func(t *testing.T) {
node := &Proxy{session: &sessionutil.Session{ServerID: 1}}
node.stateCode.Store(commonpb.StateCode_Abnormal)
ctx := context.Background()
resp, err := node.RenameCollection(ctx, &milvuspb.RenameCollectionRequest{})
assert.NoError(t, err)
assert.Equal(t, commonpb.ErrorCode_UnexpectedError, resp.GetErrorCode())
})
t.Run("rename with illegal new collection name", func(t *testing.T) {
node := &Proxy{session: &sessionutil.Session{ServerID: 1}}
node.stateCode.Store(commonpb.StateCode_Healthy)
ctx := context.Background()
resp, err := node.RenameCollection(ctx, &milvuspb.RenameCollectionRequest{NewName: "$#^%#&#$*!)#@!"})
assert.Error(t, err)
assert.Equal(t, commonpb.ErrorCode_IllegalCollectionName, resp.GetErrorCode())
})
t.Run("rename fail", func(t *testing.T) {
rc := mocks.NewRootCoord(t)
rc.On("RenameCollection", mock.Anything, mock.Anything).
Return(nil, errors.New("fail"))
node := &Proxy{
session: &sessionutil.Session{ServerID: 1},
rootCoord: rc,
}
node.stateCode.Store(commonpb.StateCode_Healthy)
ctx := context.Background()
resp, err := node.RenameCollection(ctx, &milvuspb.RenameCollectionRequest{NewName: "new"})
assert.Error(t, err)
assert.Equal(t, commonpb.ErrorCode_UnexpectedError, resp.GetErrorCode())
})
t.Run("rename ok", func(t *testing.T) {
rc := mocks.NewRootCoord(t)
rc.On("RenameCollection", mock.Anything, mock.Anything).
Return(&commonpb.Status{
ErrorCode: commonpb.ErrorCode_Success,
}, nil)
node := &Proxy{
session: &sessionutil.Session{ServerID: 1},
rootCoord: rc,
}
node.stateCode.Store(commonpb.StateCode_Healthy)
ctx := context.Background()
resp, err := node.RenameCollection(ctx, &milvuspb.RenameCollectionRequest{NewName: "new"})
assert.NoError(t, err)
assert.Equal(t, commonpb.ErrorCode_Success, resp.GetErrorCode())
})
}

View File

@ -292,6 +292,10 @@ func (s *proxyTestServer) GetVersion(ctx context.Context, request *milvuspb.GetV
}, nil
}
func (s *proxyTestServer) RenameCollection(ctx context.Context, request *milvuspb.RenameCollectionRequest) (*commonpb.Status, error) {
return s.Proxy.RenameCollection(ctx, request)
}
func (s *proxyTestServer) GetComponentStates(ctx context.Context, request *milvuspb.GetComponentStatesRequest) (*milvuspb.ComponentStates, error) {
return s.Proxy.GetComponentStates(ctx)
}

View File

@ -1140,6 +1140,10 @@ func (coord *RootCoordMock) CheckHealth(ctx context.Context, req *milvuspb.Check
return &milvuspb.CheckHealthResponse{IsHealthy: true}, nil
}
func (coord *RootCoordMock) RenameCollection(ctx context.Context, req *milvuspb.RenameCollectionRequest) (*commonpb.Status, error) {
return &commonpb.Status{}, nil
}
type DescribeCollectionFunc func(ctx context.Context, request *milvuspb.DescribeCollectionRequest) (*milvuspb.DescribeCollectionResponse, error)
type ShowPartitionsFunc func(ctx context.Context, request *milvuspb.ShowPartitionsRequest) (*milvuspb.ShowPartitionsResponse, error)
type ShowSegmentsFunc func(ctx context.Context, request *milvuspb.ShowSegmentsRequest) (*milvuspb.ShowSegmentsResponse, error)

View File

@ -72,8 +72,8 @@ func Test_dropCollectionTask_Execute(t *testing.T) {
meta := mockrootcoord.NewIMetaTable(t)
meta.On("GetCollectionByName",
mock.Anything, // context.Context.
mock.AnythingOfType("string"),
mock.AnythingOfType("uint64"),
mock.Anything,
mock.Anything,
).Return(nil, func(ctx context.Context, name string, ts Timestamp) error {
if collectionName == name {
return common.NewCollectionNotExistError("collection not exist")
@ -102,8 +102,8 @@ func Test_dropCollectionTask_Execute(t *testing.T) {
meta := mockrootcoord.NewIMetaTable(t)
meta.On("GetCollectionByName",
mock.Anything, // context.Context
mock.AnythingOfType("string"),
mock.AnythingOfType("uint64"),
mock.Anything,
mock.Anything,
).Return(coll.Clone(), nil)
meta.On("ListAliasesByID",
mock.AnythingOfType("int64"),

View File

@ -22,27 +22,23 @@ import (
"fmt"
"sync"
"github.com/milvus-io/milvus/internal/metrics"
"github.com/milvus-io/milvus/internal/util/timerecord"
"github.com/milvus-io/milvus/internal/common"
pb "github.com/milvus-io/milvus/internal/proto/etcdpb"
"go.uber.org/zap"
"github.com/milvus-io/milvus-proto/go-api/milvuspb"
"github.com/milvus-io/milvus/internal/common"
"github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/metastore"
"github.com/milvus-io/milvus/internal/metastore/model"
"github.com/milvus-io/milvus/internal/metrics"
pb "github.com/milvus-io/milvus/internal/proto/etcdpb"
"github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/milvus-io/milvus/internal/util/contextutil"
"github.com/milvus-io/milvus/internal/util/funcutil"
"github.com/milvus-io/milvus/internal/util/timerecord"
"github.com/milvus-io/milvus/internal/util/typeutil"
)
//go:generate mockery --name=IMetaTable --outpkg=mockrootcoord
//go:generate mockery --name=IMetaTable --outpkg=mockrootcoord --filename=meta_table.go --with-expecter
type IMetaTable interface {
AddCollection(ctx context.Context, coll *model.Collection) error
ChangeCollectionState(ctx context.Context, collectionID UniqueID, state pb.CollectionState, ts Timestamp) error
@ -60,6 +56,7 @@ type IMetaTable interface {
DropAlias(ctx context.Context, alias string, ts Timestamp) error
AlterAlias(ctx context.Context, alias string, collectionName string, ts Timestamp) error
AlterCollection(ctx context.Context, oldColl *model.Collection, newColl *model.Collection, ts Timestamp) error
RenameCollection(ctx context.Context, oldName string, newName string, ts Timestamp) error
// TODO: it'll be a big cost if we handle the time travel logic, since we should always list all aliases in catalog.
IsAlias(name string) bool
@ -356,6 +353,7 @@ func (mt *MetaTable) GetCollectionByName(ctx context.Context, collectionName str
if err != nil {
return nil, err
}
if coll == nil || !coll.Available() {
return nil, common.NewCollectionNotExistError(fmt.Sprintf("can't find collection: %s", collectionName))
}
@ -448,6 +446,50 @@ func (mt *MetaTable) AlterCollection(ctx context.Context, oldColl *model.Collect
return nil
}
func (mt *MetaTable) RenameCollection(ctx context.Context, oldName string, newName string, ts Timestamp) error {
mt.ddLock.RLock()
defer mt.ddLock.RUnlock()
ctx = contextutil.WithTenantID(ctx, Params.CommonCfg.ClusterName.GetValue())
log := log.Ctx(ctx).With(zap.String("oldName", oldName), zap.String("newName", newName))
//old collection should not be an alias
_, ok := mt.collAlias2ID[oldName]
if ok {
log.Warn("unsupported use a alias to rename collection")
return fmt.Errorf("unsupported use an alias to rename collection, alias:%s", oldName)
}
// check new collection already exists
newColl, err := mt.GetCollectionByName(ctx, newName, ts)
if newColl != nil {
return fmt.Errorf("duplicated new collection name :%s with other collection name or alias", newName)
}
if err != nil && !common.IsCollectionNotExistErrorV2(err) {
log.Warn("check new collection name fail")
return err
}
// get old collection meta
oldColl, err := mt.GetCollectionByName(ctx, oldName, ts)
if err != nil {
return err
}
newColl = oldColl.Clone()
newColl.Name = newName
if err := mt.catalog.AlterCollection(ctx, oldColl, newColl, metastore.MODIFY, ts); err != nil {
return err
}
mt.collName2ID[newName] = oldColl.CollectionID
delete(mt.collName2ID, oldName)
mt.collID2Meta[oldColl.CollectionID] = newColl
log.Info("rename collection finished")
return nil
}
// GetCollectionVirtualChannels returns virtual channels of a given collection.
func (mt *MetaTable) GetCollectionVirtualChannels(colID int64) []string {
mt.ddLock.RLock()

View File

@ -22,17 +22,16 @@ import (
"math/rand"
"testing"
"github.com/milvus-io/milvus-proto/go-api/milvuspb"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"github.com/milvus-io/milvus-proto/go-api/milvuspb"
"github.com/milvus-io/milvus/internal/common"
memkv "github.com/milvus-io/milvus/internal/kv/mem"
"github.com/milvus-io/milvus/internal/metastore/kv/rootcoord"
"github.com/milvus-io/milvus/internal/metastore/mocks"
"github.com/milvus-io/milvus/internal/metastore/model"
"github.com/milvus-io/milvus/internal/common"
memkv "github.com/milvus-io/milvus/internal/kv/mem"
pb "github.com/milvus-io/milvus/internal/proto/etcdpb"
"github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/milvus-io/milvus/internal/util"
@ -914,6 +913,139 @@ func TestMetaTable_AddPartition(t *testing.T) {
})
}
func TestMetaTable_RenameCollection(t *testing.T) {
t.Run("unsupported use a alias to rename collection", func(t *testing.T) {
meta := &MetaTable{
collAlias2ID: map[string]typeutil.UniqueID{
"alias": 1,
},
}
err := meta.RenameCollection(context.TODO(), "alias", "new", typeutil.MaxTimestamp)
assert.Error(t, err)
})
t.Run("collection name not exist", func(t *testing.T) {
meta := &MetaTable{}
err := meta.RenameCollection(context.TODO(), "non-exists", "new", typeutil.MaxTimestamp)
assert.Error(t, err)
})
t.Run("collection id not exist", func(t *testing.T) {
meta := &MetaTable{
collName2ID: map[string]typeutil.UniqueID{
"old": 1,
},
}
err := meta.RenameCollection(context.TODO(), "old", "new", typeutil.MaxTimestamp)
assert.Error(t, err)
})
t.Run("new collection name already exist-1", func(t *testing.T) {
meta := &MetaTable{
collName2ID: map[string]typeutil.UniqueID{
"old": 1,
"new": 2,
},
collID2Meta: map[typeutil.UniqueID]*model.Collection{
2: {
CollectionID: 1,
Name: "old",
State: pb.CollectionState_CollectionCreated,
},
},
}
err := meta.RenameCollection(context.TODO(), "old", "new", 1000)
assert.Error(t, err)
})
t.Run("new collection name already exist-2", func(t *testing.T) {
catalog := mocks.NewRootCoordCatalog(t)
catalog.On("GetCollectionByID",
mock.Anything,
mock.Anything,
mock.Anything,
).Return(nil, errors.New("error mock GetCollectionByID"))
meta := &MetaTable{
catalog: catalog,
collName2ID: map[string]typeutil.UniqueID{
"old": 1,
"new": 2,
},
}
err := meta.RenameCollection(context.TODO(), "old", "new", 1000)
assert.Error(t, err)
})
t.Run("alter collection fail", func(t *testing.T) {
catalog := mocks.NewRootCoordCatalog(t)
catalog.On("AlterCollection",
mock.Anything,
mock.Anything,
mock.Anything,
mock.Anything,
mock.Anything,
).Return(errors.New("fail"))
catalog.On("GetCollectionByName",
mock.Anything,
mock.Anything,
mock.Anything,
).Return(nil, common.NewCollectionNotExistError("error"))
meta := &MetaTable{
catalog: catalog,
collName2ID: map[string]typeutil.UniqueID{
"old": 1,
},
collID2Meta: map[typeutil.UniqueID]*model.Collection{
1: {
CollectionID: 1,
Name: "old",
},
},
}
err := meta.RenameCollection(context.TODO(), "old", "new", 1000)
assert.Error(t, err)
})
t.Run("alter collection ok", func(t *testing.T) {
catalog := mocks.NewRootCoordCatalog(t)
catalog.On("AlterCollection",
mock.Anything,
mock.Anything,
mock.Anything,
mock.Anything,
mock.Anything,
).Return(nil)
catalog.On("GetCollectionByName",
mock.Anything,
mock.Anything,
mock.Anything,
).Return(nil, common.NewCollectionNotExistError("error"))
meta := &MetaTable{
catalog: catalog,
collName2ID: map[string]typeutil.UniqueID{
"old": 1,
},
collID2Meta: map[typeutil.UniqueID]*model.Collection{
1: {
CollectionID: 1,
Name: "old",
},
},
}
err := meta.RenameCollection(context.TODO(), "old", "new", 1000)
assert.NoError(t, err)
id, ok := meta.collName2ID["new"]
assert.True(t, ok)
assert.Equal(t, int64(1), id)
coll, ok := meta.collID2Meta[1]
assert.True(t, ok)
assert.Equal(t, "new", coll.Name)
})
}
func TestMetaTable_ChangePartitionState(t *testing.T) {
t.Run("collection not exist", func(t *testing.T) {
meta := &MetaTable{}

View File

@ -54,6 +54,7 @@ type mockMetaTable struct {
GetPartitionByNameFunc func(collID UniqueID, partitionName string, ts Timestamp) (UniqueID, error)
GetCollectionVirtualChannelsFunc func(colID int64) []string
AlterCollectionFunc func(ctx context.Context, oldColl *model.Collection, newColl *model.Collection, ts Timestamp) error
RenameCollectionFunc func(ctx context.Context, oldName string, newName string, ts Timestamp) error
}
func (m mockMetaTable) ListCollections(ctx context.Context, ts Timestamp) ([]*model.Collection, error) {
@ -116,6 +117,10 @@ func (m mockMetaTable) AlterCollection(ctx context.Context, oldColl *model.Colle
return m.AlterCollectionFunc(ctx, oldColl, newColl, ts)
}
func (m *mockMetaTable) RenameCollection(ctx context.Context, oldName string, newName string, ts Timestamp) error {
return m.RenameCollectionFunc(ctx, oldName, newName, ts)
}
func (m mockMetaTable) GetCollectionIDByName(name string) (UniqueID, error) {
return m.GetCollectionIDByNameFunc(name)
}

View File

@ -48,8 +48,8 @@ type IMetaTable_AddCollection_Call struct {
}
// AddCollection is a helper method to define mock.On call
// - ctx context.Context
// - coll *model.Collection
// - ctx context.Context
// - coll *model.Collection
func (_e *IMetaTable_Expecter) AddCollection(ctx interface{}, coll interface{}) *IMetaTable_AddCollection_Call {
return &IMetaTable_AddCollection_Call{Call: _e.mock.On("AddCollection", ctx, coll)}
}
@ -86,7 +86,7 @@ type IMetaTable_AddCredential_Call struct {
}
// AddCredential is a helper method to define mock.On call
// - credInfo *internalpb.CredentialInfo
// - credInfo *internalpb.CredentialInfo
func (_e *IMetaTable_Expecter) AddCredential(credInfo interface{}) *IMetaTable_AddCredential_Call {
return &IMetaTable_AddCredential_Call{Call: _e.mock.On("AddCredential", credInfo)}
}
@ -123,8 +123,8 @@ type IMetaTable_AddPartition_Call struct {
}
// AddPartition is a helper method to define mock.On call
// - ctx context.Context
// - partition *model.Partition
// - ctx context.Context
// - partition *model.Partition
func (_e *IMetaTable_Expecter) AddPartition(ctx interface{}, partition interface{}) *IMetaTable_AddPartition_Call {
return &IMetaTable_AddPartition_Call{Call: _e.mock.On("AddPartition", ctx, partition)}
}
@ -161,10 +161,10 @@ type IMetaTable_AlterAlias_Call struct {
}
// AlterAlias is a helper method to define mock.On call
// - ctx context.Context
// - alias string
// - collectionName string
// - ts uint64
// - ctx context.Context
// - alias string
// - collectionName string
// - ts uint64
func (_e *IMetaTable_Expecter) AlterAlias(ctx interface{}, alias interface{}, collectionName interface{}, ts interface{}) *IMetaTable_AlterAlias_Call {
return &IMetaTable_AlterAlias_Call{Call: _e.mock.On("AlterAlias", ctx, alias, collectionName, ts)}
}
@ -201,10 +201,10 @@ type IMetaTable_AlterCollection_Call struct {
}
// AlterCollection is a helper method to define mock.On call
// - ctx context.Context
// - oldColl *model.Collection
// - newColl *model.Collection
// - ts uint64
// - ctx context.Context
// - oldColl *model.Collection
// - newColl *model.Collection
// - ts uint64
func (_e *IMetaTable_Expecter) AlterCollection(ctx interface{}, oldColl interface{}, newColl interface{}, ts interface{}) *IMetaTable_AlterCollection_Call {
return &IMetaTable_AlterCollection_Call{Call: _e.mock.On("AlterCollection", ctx, oldColl, newColl, ts)}
}
@ -241,7 +241,7 @@ type IMetaTable_AlterCredential_Call struct {
}
// AlterCredential is a helper method to define mock.On call
// - credInfo *internalpb.CredentialInfo
// - credInfo *internalpb.CredentialInfo
func (_e *IMetaTable_Expecter) AlterCredential(credInfo interface{}) *IMetaTable_AlterCredential_Call {
return &IMetaTable_AlterCredential_Call{Call: _e.mock.On("AlterCredential", credInfo)}
}
@ -278,10 +278,10 @@ type IMetaTable_ChangeCollectionState_Call struct {
}
// ChangeCollectionState is a helper method to define mock.On call
// - ctx context.Context
// - collectionID int64
// - state etcdpb.CollectionState
// - ts uint64
// - ctx context.Context
// - collectionID int64
// - state etcdpb.CollectionState
// - ts uint64
func (_e *IMetaTable_Expecter) ChangeCollectionState(ctx interface{}, collectionID interface{}, state interface{}, ts interface{}) *IMetaTable_ChangeCollectionState_Call {
return &IMetaTable_ChangeCollectionState_Call{Call: _e.mock.On("ChangeCollectionState", ctx, collectionID, state, ts)}
}
@ -318,11 +318,11 @@ type IMetaTable_ChangePartitionState_Call struct {
}
// ChangePartitionState is a helper method to define mock.On call
// - ctx context.Context
// - collectionID int64
// - partitionID int64
// - state etcdpb.PartitionState
// - ts uint64
// - ctx context.Context
// - collectionID int64
// - partitionID int64
// - state etcdpb.PartitionState
// - ts uint64
func (_e *IMetaTable_Expecter) ChangePartitionState(ctx interface{}, collectionID interface{}, partitionID interface{}, state interface{}, ts interface{}) *IMetaTable_ChangePartitionState_Call {
return &IMetaTable_ChangePartitionState_Call{Call: _e.mock.On("ChangePartitionState", ctx, collectionID, partitionID, state, ts)}
}
@ -359,10 +359,10 @@ type IMetaTable_CreateAlias_Call struct {
}
// CreateAlias is a helper method to define mock.On call
// - ctx context.Context
// - alias string
// - collectionName string
// - ts uint64
// - ctx context.Context
// - alias string
// - collectionName string
// - ts uint64
func (_e *IMetaTable_Expecter) CreateAlias(ctx interface{}, alias interface{}, collectionName interface{}, ts interface{}) *IMetaTable_CreateAlias_Call {
return &IMetaTable_CreateAlias_Call{Call: _e.mock.On("CreateAlias", ctx, alias, collectionName, ts)}
}
@ -399,8 +399,8 @@ type IMetaTable_CreateRole_Call struct {
}
// CreateRole is a helper method to define mock.On call
// - tenant string
// - entity *milvuspb.RoleEntity
// - tenant string
// - entity *milvuspb.RoleEntity
func (_e *IMetaTable_Expecter) CreateRole(tenant interface{}, entity interface{}) *IMetaTable_CreateRole_Call {
return &IMetaTable_CreateRole_Call{Call: _e.mock.On("CreateRole", tenant, entity)}
}
@ -437,7 +437,7 @@ type IMetaTable_DeleteCredential_Call struct {
}
// DeleteCredential is a helper method to define mock.On call
// - username string
// - username string
func (_e *IMetaTable_Expecter) DeleteCredential(username interface{}) *IMetaTable_DeleteCredential_Call {
return &IMetaTable_DeleteCredential_Call{Call: _e.mock.On("DeleteCredential", username)}
}
@ -474,9 +474,9 @@ type IMetaTable_DropAlias_Call struct {
}
// DropAlias is a helper method to define mock.On call
// - ctx context.Context
// - alias string
// - ts uint64
// - ctx context.Context
// - alias string
// - ts uint64
func (_e *IMetaTable_Expecter) DropAlias(ctx interface{}, alias interface{}, ts interface{}) *IMetaTable_DropAlias_Call {
return &IMetaTable_DropAlias_Call{Call: _e.mock.On("DropAlias", ctx, alias, ts)}
}
@ -513,8 +513,8 @@ type IMetaTable_DropGrant_Call struct {
}
// DropGrant is a helper method to define mock.On call
// - tenant string
// - role *milvuspb.RoleEntity
// - tenant string
// - role *milvuspb.RoleEntity
func (_e *IMetaTable_Expecter) DropGrant(tenant interface{}, role interface{}) *IMetaTable_DropGrant_Call {
return &IMetaTable_DropGrant_Call{Call: _e.mock.On("DropGrant", tenant, role)}
}
@ -551,8 +551,8 @@ type IMetaTable_DropRole_Call struct {
}
// DropRole is a helper method to define mock.On call
// - tenant string
// - roleName string
// - tenant string
// - roleName string
func (_e *IMetaTable_Expecter) DropRole(tenant interface{}, roleName interface{}) *IMetaTable_DropRole_Call {
return &IMetaTable_DropRole_Call{Call: _e.mock.On("DropRole", tenant, roleName)}
}
@ -598,10 +598,10 @@ type IMetaTable_GetCollectionByID_Call struct {
}
// GetCollectionByID is a helper method to define mock.On call
// - ctx context.Context
// - collectionID int64
// - ts uint64
// - allowUnavailable bool
// - ctx context.Context
// - collectionID int64
// - ts uint64
// - allowUnavailable bool
func (_e *IMetaTable_Expecter) GetCollectionByID(ctx interface{}, collectionID interface{}, ts interface{}, allowUnavailable interface{}) *IMetaTable_GetCollectionByID_Call {
return &IMetaTable_GetCollectionByID_Call{Call: _e.mock.On("GetCollectionByID", ctx, collectionID, ts, allowUnavailable)}
}
@ -647,9 +647,9 @@ type IMetaTable_GetCollectionByName_Call struct {
}
// GetCollectionByName is a helper method to define mock.On call
// - ctx context.Context
// - collectionName string
// - ts uint64
// - ctx context.Context
// - collectionName string
// - ts uint64
func (_e *IMetaTable_Expecter) GetCollectionByName(ctx interface{}, collectionName interface{}, ts interface{}) *IMetaTable_GetCollectionByName_Call {
return &IMetaTable_GetCollectionByName_Call{Call: _e.mock.On("GetCollectionByName", ctx, collectionName, ts)}
}
@ -688,7 +688,7 @@ type IMetaTable_GetCollectionVirtualChannels_Call struct {
}
// GetCollectionVirtualChannels is a helper method to define mock.On call
// - colID int64
// - colID int64
func (_e *IMetaTable_Expecter) GetCollectionVirtualChannels(colID interface{}) *IMetaTable_GetCollectionVirtualChannels_Call {
return &IMetaTable_GetCollectionVirtualChannels_Call{Call: _e.mock.On("GetCollectionVirtualChannels", colID)}
}
@ -734,7 +734,7 @@ type IMetaTable_GetCredential_Call struct {
}
// GetCredential is a helper method to define mock.On call
// - username string
// - username string
func (_e *IMetaTable_Expecter) GetCredential(username interface{}) *IMetaTable_GetCredential_Call {
return &IMetaTable_GetCredential_Call{Call: _e.mock.On("GetCredential", username)}
}
@ -778,9 +778,9 @@ type IMetaTable_GetPartitionByName_Call struct {
}
// GetPartitionByName is a helper method to define mock.On call
// - collID int64
// - partitionName string
// - ts uint64
// - collID int64
// - partitionName string
// - ts uint64
func (_e *IMetaTable_Expecter) GetPartitionByName(collID interface{}, partitionName interface{}, ts interface{}) *IMetaTable_GetPartitionByName_Call {
return &IMetaTable_GetPartitionByName_Call{Call: _e.mock.On("GetPartitionByName", collID, partitionName, ts)}
}
@ -824,9 +824,9 @@ type IMetaTable_GetPartitionNameByID_Call struct {
}
// GetPartitionNameByID is a helper method to define mock.On call
// - collID int64
// - partitionID int64
// - ts uint64
// - collID int64
// - partitionID int64
// - ts uint64
func (_e *IMetaTable_Expecter) GetPartitionNameByID(collID interface{}, partitionID interface{}, ts interface{}) *IMetaTable_GetPartitionNameByID_Call {
return &IMetaTable_GetPartitionNameByID_Call{Call: _e.mock.On("GetPartitionNameByID", collID, partitionID, ts)}
}
@ -863,7 +863,7 @@ type IMetaTable_IsAlias_Call struct {
}
// IsAlias is a helper method to define mock.On call
// - name string
// - name string
func (_e *IMetaTable_Expecter) IsAlias(name interface{}) *IMetaTable_IsAlias_Call {
return &IMetaTable_IsAlias_Call{Call: _e.mock.On("IsAlias", name)}
}
@ -909,8 +909,8 @@ type IMetaTable_ListAbnormalCollections_Call struct {
}
// ListAbnormalCollections is a helper method to define mock.On call
// - ctx context.Context
// - ts uint64
// - ctx context.Context
// - ts uint64
func (_e *IMetaTable_Expecter) ListAbnormalCollections(ctx interface{}, ts interface{}) *IMetaTable_ListAbnormalCollections_Call {
return &IMetaTable_ListAbnormalCollections_Call{Call: _e.mock.On("ListAbnormalCollections", ctx, ts)}
}
@ -949,7 +949,7 @@ type IMetaTable_ListAliasesByID_Call struct {
}
// ListAliasesByID is a helper method to define mock.On call
// - collID int64
// - collID int64
func (_e *IMetaTable_Expecter) ListAliasesByID(collID interface{}) *IMetaTable_ListAliasesByID_Call {
return &IMetaTable_ListAliasesByID_Call{Call: _e.mock.On("ListAliasesByID", collID)}
}
@ -1033,8 +1033,8 @@ type IMetaTable_ListCollections_Call struct {
}
// ListCollections is a helper method to define mock.On call
// - ctx context.Context
// - ts uint64
// - ctx context.Context
// - ts uint64
func (_e *IMetaTable_Expecter) ListCollections(ctx interface{}, ts interface{}) *IMetaTable_ListCollections_Call {
return &IMetaTable_ListCollections_Call{Call: _e.mock.On("ListCollections", ctx, ts)}
}
@ -1125,7 +1125,7 @@ type IMetaTable_ListPolicy_Call struct {
}
// ListPolicy is a helper method to define mock.On call
// - tenant string
// - tenant string
func (_e *IMetaTable_Expecter) ListPolicy(tenant interface{}) *IMetaTable_ListPolicy_Call {
return &IMetaTable_ListPolicy_Call{Call: _e.mock.On("ListPolicy", tenant)}
}
@ -1171,7 +1171,7 @@ type IMetaTable_ListUserRole_Call struct {
}
// ListUserRole is a helper method to define mock.On call
// - tenant string
// - tenant string
func (_e *IMetaTable_Expecter) ListUserRole(tenant interface{}) *IMetaTable_ListUserRole_Call {
return &IMetaTable_ListUserRole_Call{Call: _e.mock.On("ListUserRole", tenant)}
}
@ -1208,9 +1208,9 @@ type IMetaTable_OperatePrivilege_Call struct {
}
// OperatePrivilege is a helper method to define mock.On call
// - tenant string
// - entity *milvuspb.GrantEntity
// - operateType milvuspb.OperatePrivilegeType
// - tenant string
// - entity *milvuspb.GrantEntity
// - operateType milvuspb.OperatePrivilegeType
func (_e *IMetaTable_Expecter) OperatePrivilege(tenant interface{}, entity interface{}, operateType interface{}) *IMetaTable_OperatePrivilege_Call {
return &IMetaTable_OperatePrivilege_Call{Call: _e.mock.On("OperatePrivilege", tenant, entity, operateType)}
}
@ -1247,10 +1247,10 @@ type IMetaTable_OperateUserRole_Call struct {
}
// OperateUserRole is a helper method to define mock.On call
// - tenant string
// - userEntity *milvuspb.UserEntity
// - roleEntity *milvuspb.RoleEntity
// - operateType milvuspb.OperateUserRoleType
// - tenant string
// - userEntity *milvuspb.UserEntity
// - roleEntity *milvuspb.RoleEntity
// - operateType milvuspb.OperateUserRoleType
func (_e *IMetaTable_Expecter) OperateUserRole(tenant interface{}, userEntity interface{}, roleEntity interface{}, operateType interface{}) *IMetaTable_OperateUserRole_Call {
return &IMetaTable_OperateUserRole_Call{Call: _e.mock.On("OperateUserRole", tenant, userEntity, roleEntity, operateType)}
}
@ -1287,9 +1287,9 @@ type IMetaTable_RemoveCollection_Call struct {
}
// RemoveCollection is a helper method to define mock.On call
// - ctx context.Context
// - collectionID int64
// - ts uint64
// - ctx context.Context
// - collectionID int64
// - ts uint64
func (_e *IMetaTable_Expecter) RemoveCollection(ctx interface{}, collectionID interface{}, ts interface{}) *IMetaTable_RemoveCollection_Call {
return &IMetaTable_RemoveCollection_Call{Call: _e.mock.On("RemoveCollection", ctx, collectionID, ts)}
}
@ -1326,10 +1326,10 @@ type IMetaTable_RemovePartition_Call struct {
}
// RemovePartition is a helper method to define mock.On call
// - ctx context.Context
// - collectionID int64
// - partitionID int64
// - ts uint64
// - ctx context.Context
// - collectionID int64
// - partitionID int64
// - ts uint64
func (_e *IMetaTable_Expecter) RemovePartition(ctx interface{}, collectionID interface{}, partitionID interface{}, ts interface{}) *IMetaTable_RemovePartition_Call {
return &IMetaTable_RemovePartition_Call{Call: _e.mock.On("RemovePartition", ctx, collectionID, partitionID, ts)}
}
@ -1346,6 +1346,46 @@ func (_c *IMetaTable_RemovePartition_Call) Return(_a0 error) *IMetaTable_RemoveP
return _c
}
// RenameCollection provides a mock function with given fields: ctx, oldName, newName, ts
func (_m *IMetaTable) RenameCollection(ctx context.Context, oldName string, newName string, ts uint64) error {
ret := _m.Called(ctx, oldName, newName, ts)
var r0 error
if rf, ok := ret.Get(0).(func(context.Context, string, string, uint64) error); ok {
r0 = rf(ctx, oldName, newName, ts)
} else {
r0 = ret.Error(0)
}
return r0
}
// IMetaTable_RenameCollection_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RenameCollection'
type IMetaTable_RenameCollection_Call struct {
*mock.Call
}
// RenameCollection is a helper method to define mock.On call
// - ctx context.Context
// - oldName string
// - newName string
// - ts uint64
func (_e *IMetaTable_Expecter) RenameCollection(ctx interface{}, oldName interface{}, newName interface{}, ts interface{}) *IMetaTable_RenameCollection_Call {
return &IMetaTable_RenameCollection_Call{Call: _e.mock.On("RenameCollection", ctx, oldName, newName, ts)}
}
func (_c *IMetaTable_RenameCollection_Call) Run(run func(ctx context.Context, oldName string, newName string, ts uint64)) *IMetaTable_RenameCollection_Call {
_c.Call.Run(func(args mock.Arguments) {
run(args[0].(context.Context), args[1].(string), args[2].(string), args[3].(uint64))
})
return _c
}
func (_c *IMetaTable_RenameCollection_Call) Return(_a0 error) *IMetaTable_RenameCollection_Call {
_c.Call.Return(_a0)
return _c
}
// SelectGrant provides a mock function with given fields: tenant, entity
func (_m *IMetaTable) SelectGrant(tenant string, entity *milvuspb.GrantEntity) ([]*milvuspb.GrantEntity, error) {
ret := _m.Called(tenant, entity)
@ -1375,8 +1415,8 @@ type IMetaTable_SelectGrant_Call struct {
}
// SelectGrant is a helper method to define mock.On call
// - tenant string
// - entity *milvuspb.GrantEntity
// - tenant string
// - entity *milvuspb.GrantEntity
func (_e *IMetaTable_Expecter) SelectGrant(tenant interface{}, entity interface{}) *IMetaTable_SelectGrant_Call {
return &IMetaTable_SelectGrant_Call{Call: _e.mock.On("SelectGrant", tenant, entity)}
}
@ -1422,9 +1462,9 @@ type IMetaTable_SelectRole_Call struct {
}
// SelectRole is a helper method to define mock.On call
// - tenant string
// - entity *milvuspb.RoleEntity
// - includeUserInfo bool
// - tenant string
// - entity *milvuspb.RoleEntity
// - includeUserInfo bool
func (_e *IMetaTable_Expecter) SelectRole(tenant interface{}, entity interface{}, includeUserInfo interface{}) *IMetaTable_SelectRole_Call {
return &IMetaTable_SelectRole_Call{Call: _e.mock.On("SelectRole", tenant, entity, includeUserInfo)}
}
@ -1470,9 +1510,9 @@ type IMetaTable_SelectUser_Call struct {
}
// SelectUser is a helper method to define mock.On call
// - tenant string
// - entity *milvuspb.UserEntity
// - includeRoleInfo bool
// - tenant string
// - entity *milvuspb.UserEntity
// - includeRoleInfo bool
func (_e *IMetaTable_Expecter) SelectUser(tenant interface{}, entity interface{}, includeRoleInfo interface{}) *IMetaTable_SelectUser_Call {
return &IMetaTable_SelectUser_Call{Call: _e.mock.On("SelectUser", tenant, entity, includeRoleInfo)}
}

View File

@ -0,0 +1,27 @@
package rootcoord
import (
"context"
"github.com/milvus-io/milvus-proto/go-api/commonpb"
"github.com/milvus-io/milvus-proto/go-api/milvuspb"
)
type renameCollectionTask struct {
baseTask
Req *milvuspb.RenameCollectionRequest
}
func (t *renameCollectionTask) Prepare(ctx context.Context) error {
if err := CheckMsgType(t.Req.GetBase().GetMsgType(), commonpb.MsgType_RenameCollection); err != nil {
return err
}
return nil
}
func (t *renameCollectionTask) Execute(ctx context.Context) error {
if err := t.core.ExpireMetaCache(ctx, []string{t.Req.GetOldName()}, InvalidCollectionID, t.GetTs()); err != nil {
return err
}
return t.core.meta.RenameCollection(ctx, t.Req.GetOldName(), t.Req.GetNewName(), t.GetTs())
}

View File

@ -0,0 +1,74 @@
package rootcoord
import (
"context"
"errors"
"testing"
"github.com/stretchr/testify/assert"
"github.com/milvus-io/milvus-proto/go-api/commonpb"
"github.com/milvus-io/milvus-proto/go-api/milvuspb"
)
func Test_renameCollectionTask_Prepare(t *testing.T) {
t.Run("invalid msg type", func(t *testing.T) {
task := &renameCollectionTask{
Req: &milvuspb.RenameCollectionRequest{
Base: &commonpb.MsgBase{
MsgType: commonpb.MsgType_Undefined,
},
},
}
err := task.Prepare(context.Background())
assert.Error(t, err)
})
t.Run("ok", func(t *testing.T) {
task := &renameCollectionTask{
Req: &milvuspb.RenameCollectionRequest{
Base: &commonpb.MsgBase{
MsgType: commonpb.MsgType_RenameCollection,
},
},
}
err := task.Prepare(context.Background())
assert.NoError(t, err)
})
}
func Test_renameCollectionTask_Execute(t *testing.T) {
t.Run("failed to expire cache", func(t *testing.T) {
core := newTestCore(withInvalidProxyManager())
task := &renameCollectionTask{
baseTask: baseTask{core: core},
Req: &milvuspb.RenameCollectionRequest{
Base: &commonpb.MsgBase{
MsgType: commonpb.MsgType_RenameCollection,
},
},
}
err := task.Execute(context.Background())
assert.Error(t, err)
})
t.Run("failed to rename collection", func(t *testing.T) {
meta := newMockMetaTable()
meta.RenameCollectionFunc = func(ctx context.Context, oldName string, newName string, ts Timestamp) error {
return errors.New("fail")
}
core := newTestCore(withValidProxyManager(), withMeta(meta))
task := &renameCollectionTask{
baseTask: baseTask{core: core},
Req: &milvuspb.RenameCollectionRequest{
Base: &commonpb.MsgBase{
MsgType: commonpb.MsgType_RenameCollection,
},
},
}
err := task.Execute(context.Background())
assert.Error(t, err)
})
}

View File

@ -2497,6 +2497,44 @@ func (c *Core) ListPolicy(ctx context.Context, in *internalpb.ListPolicyRequest)
}, nil
}
func (c *Core) RenameCollection(ctx context.Context, req *milvuspb.RenameCollectionRequest) (*commonpb.Status, error) {
if code, ok := c.checkHealthy(); !ok {
return failStatus(commonpb.ErrorCode_UnexpectedError, "StateCode="+commonpb.StateCode_name[int32(code)]), nil
}
log := log.Ctx(ctx).With(zap.String("oldCollectionName", req.GetOldName()), zap.String("newCollectionName", req.GetNewName()))
log.Info("received request to rename collection")
metrics.RootCoordDDLReqCounter.WithLabelValues("RenameCollection", metrics.TotalLabel).Inc()
tr := timerecord.NewTimeRecorder("RenameCollection")
t := &renameCollectionTask{
baseTask: baseTask{
ctx: ctx,
core: c,
done: make(chan error, 1),
},
Req: req,
}
if err := c.scheduler.AddTask(t); err != nil {
log.Warn("failed to enqueue request to rename collection", zap.Error(err))
metrics.RootCoordDDLReqCounter.WithLabelValues("RenameCollection", metrics.FailLabel).Inc()
return failStatus(commonpb.ErrorCode_UnexpectedError, err.Error()), nil
}
if err := t.WaitToFinish(); err != nil {
log.Warn("failed to rename collection", zap.Uint64("ts", t.GetTs()), zap.Error(err))
metrics.RootCoordDDLReqCounter.WithLabelValues("RenameCollection", metrics.FailLabel).Inc()
return failStatus(commonpb.ErrorCode_UnexpectedError, err.Error()), nil
}
metrics.RootCoordDDLReqCounter.WithLabelValues("RenameCollection", metrics.SuccessLabel).Inc()
metrics.RootCoordDDLReqLatency.WithLabelValues("RenameCollection").Observe(float64(tr.ElapseSpan().Milliseconds()))
log.Info("done to rename collection", zap.Uint64("ts", t.GetTs()))
return succStatus(), nil
}
func (c *Core) CheckHealth(ctx context.Context, in *milvuspb.CheckHealthRequest) (*milvuspb.CheckHealthResponse, error) {
if _, ok := c.checkHealthy(); !ok {
reason := errorutil.UnHealthReason("rootcoord", c.session.ServerID, "rootcoord is unhealthy")

View File

@ -704,6 +704,46 @@ func TestRootCoord_InvalidateCollectionMetaCache(t *testing.T) {
})
}
func TestRootCoord_RenameCollection(t *testing.T) {
t.Run("not healthy", func(t *testing.T) {
ctx := context.Background()
c := newTestCore(withAbnormalCode())
resp, err := c.RenameCollection(ctx, &milvuspb.RenameCollectionRequest{})
assert.NoError(t, err)
assert.NotEqual(t, commonpb.ErrorCode_Success, resp.GetErrorCode())
})
t.Run("add task failed", func(t *testing.T) {
c := newTestCore(withHealthyCode(),
withInvalidScheduler())
ctx := context.Background()
resp, err := c.RenameCollection(ctx, &milvuspb.RenameCollectionRequest{})
assert.NoError(t, err)
assert.NotEqual(t, commonpb.ErrorCode_Success, resp.GetErrorCode())
})
t.Run("execute task failed", func(t *testing.T) {
c := newTestCore(withHealthyCode(),
withTaskFailScheduler())
ctx := context.Background()
resp, err := c.RenameCollection(ctx, &milvuspb.RenameCollectionRequest{})
assert.NoError(t, err)
assert.NotEqual(t, commonpb.ErrorCode_Success, resp.GetErrorCode())
})
t.Run("run ok", func(t *testing.T) {
c := newTestCore(withHealthyCode(),
withValidScheduler())
ctx := context.Background()
resp, err := c.RenameCollection(ctx, &milvuspb.RenameCollectionRequest{})
assert.NoError(t, err)
assert.Equal(t, commonpb.ErrorCode_Success, resp.GetErrorCode())
})
}
func TestRootCoord_ShowConfigurations(t *testing.T) {
t.Run("not healthy", func(t *testing.T) {
ctx := context.Background()

View File

@ -757,6 +757,8 @@ type RootCoord interface {
ListPolicy(ctx context.Context, in *internalpb.ListPolicyRequest) (*internalpb.ListPolicyResponse, error)
CheckHealth(ctx context.Context, req *milvuspb.CheckHealthRequest) (*milvuspb.CheckHealthResponse, error)
RenameCollection(ctx context.Context, req *milvuspb.RenameCollectionRequest) (*commonpb.Status, error)
}
// RootCoordComponent is used by grpc server of RootCoord
@ -1299,6 +1301,9 @@ type ProxyComponent interface {
SelectGrant(ctx context.Context, req *milvuspb.SelectGrantRequest) (*milvuspb.SelectGrantResponse, error)
CheckHealth(ctx context.Context, req *milvuspb.CheckHealthRequest) (*milvuspb.CheckHealthResponse, error)
// RenameCollection rename collection from old name to new name
RenameCollection(ctx context.Context, req *milvuspb.RenameCollectionRequest) (*commonpb.Status, error)
}
// QueryNode is the interface `querynode` package implements

View File

@ -35,6 +35,10 @@ type GrpcRootCoordClient struct {
Err error
}
func (m *GrpcRootCoordClient) RenameCollection(ctx context.Context, in *milvuspb.RenameCollectionRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
return &commonpb.Status{ErrorCode: commonpb.ErrorCode_Success}, nil
}
func (m *GrpcRootCoordClient) CheckHealth(ctx context.Context, in *milvuspb.CheckHealthRequest, opts ...grpc.CallOption) (*milvuspb.CheckHealthResponse, error) {
return &milvuspb.CheckHealthResponse{}, m.Err
}