syntax = "proto3"; package milvus.proto.milvus; option go_package = "github.com/milvus-io/milvus/internal/proto/milvuspb"; option java_multiple_files = true; option java_package = "io.milvus.grpc"; option java_outer_classname = "MilvusProto"; option java_generate_equals_and_hash = true; import "common.proto"; import "schema.proto"; import "google/protobuf/descriptor.proto"; service MilvusService { rpc CreateCollection(CreateCollectionRequest) returns (common.Status) {} rpc DropCollection(DropCollectionRequest) returns (common.Status) {} rpc HasCollection(HasCollectionRequest) returns (BoolResponse) {} rpc LoadCollection(LoadCollectionRequest) returns (common.Status) {} rpc ReleaseCollection(ReleaseCollectionRequest) returns (common.Status) {} rpc DescribeCollection(DescribeCollectionRequest) returns (DescribeCollectionResponse) {} rpc GetCollectionStatistics(GetCollectionStatisticsRequest) returns (GetCollectionStatisticsResponse) {} rpc ShowCollections(ShowCollectionsRequest) returns (ShowCollectionsResponse) {} rpc CreatePartition(CreatePartitionRequest) returns (common.Status) {} rpc DropPartition(DropPartitionRequest) returns (common.Status) {} rpc HasPartition(HasPartitionRequest) returns (BoolResponse) {} rpc LoadPartitions(LoadPartitionsRequest) returns (common.Status) {} rpc ReleasePartitions(ReleasePartitionsRequest) returns (common.Status) {} rpc GetPartitionStatistics(GetPartitionStatisticsRequest) returns (GetPartitionStatisticsResponse) {} rpc ShowPartitions(ShowPartitionsRequest) returns (ShowPartitionsResponse) {} rpc CreateAlias(CreateAliasRequest) returns (common.Status) {} rpc DropAlias(DropAliasRequest) returns (common.Status) {} rpc AlterAlias(AlterAliasRequest) returns (common.Status) {} rpc CreateIndex(CreateIndexRequest) returns (common.Status) {} rpc DescribeIndex(DescribeIndexRequest) returns (DescribeIndexResponse) {} rpc GetIndexState(GetIndexStateRequest) returns (GetIndexStateResponse) {} rpc GetIndexBuildProgress(GetIndexBuildProgressRequest) returns (GetIndexBuildProgressResponse) {} rpc DropIndex(DropIndexRequest) returns (common.Status) {} rpc Insert(InsertRequest) returns (MutationResult) {} rpc Delete(DeleteRequest) returns (MutationResult) {} rpc Search(SearchRequest) returns (SearchResults) {} rpc Flush(FlushRequest) returns (FlushResponse) {} rpc Query(QueryRequest) returns (QueryResults) {} rpc CalcDistance(CalcDistanceRequest) returns (CalcDistanceResults) {} rpc GetFlushState(GetFlushStateRequest) returns (GetFlushStateResponse) {} rpc GetPersistentSegmentInfo(GetPersistentSegmentInfoRequest) returns (GetPersistentSegmentInfoResponse) {} rpc GetQuerySegmentInfo(GetQuerySegmentInfoRequest) returns (GetQuerySegmentInfoResponse) {} rpc GetReplicas(GetReplicasRequest) returns (GetReplicasResponse) {} rpc Dummy(DummyRequest) returns (DummyResponse) {} // TODO: remove rpc RegisterLink(RegisterLinkRequest) returns (RegisterLinkResponse) {} // https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy rpc GetMetrics(GetMetricsRequest) returns (GetMetricsResponse) {} rpc LoadBalance(LoadBalanceRequest) returns (common.Status) {} rpc GetCompactionState(GetCompactionStateRequest) returns (GetCompactionStateResponse) {} rpc ManualCompaction(ManualCompactionRequest) returns (ManualCompactionResponse) {} rpc GetCompactionStateWithPlans(GetCompactionPlansRequest) returns (GetCompactionPlansResponse) {} // https://wiki.lfaidata.foundation/display/MIL/MEP+24+--+Support+bulk+load rpc Import(ImportRequest) returns (ImportResponse) {} rpc GetImportState(GetImportStateRequest) returns (GetImportStateResponse) {} rpc ListImportTasks(ListImportTasksRequest) returns (ListImportTasksResponse) {} // https://wiki.lfaidata.foundation/display/MIL/MEP+27+--+Support+Basic+Authentication rpc CreateCredential(CreateCredentialRequest) returns (common.Status) {} rpc UpdateCredential(UpdateCredentialRequest) returns (common.Status) {} rpc DeleteCredential(DeleteCredentialRequest) returns (common.Status) {} rpc ListCredUsers(ListCredUsersRequest) returns (ListCredUsersResponse) {} // https://wiki.lfaidata.foundation/display/MIL/MEP+29+--+Support+Role-Based+Access+Control rpc CreateRole(CreateRoleRequest) returns (common.Status) {} rpc DropRole(DropRoleRequest) returns (common.Status) {} rpc OperateUserRole(OperateUserRoleRequest) returns (common.Status) {} rpc SelectRole(SelectRoleRequest) returns (SelectRoleResponse) {} rpc SelectUser(SelectUserRequest) returns (SelectUserResponse) {} rpc SelectResource(SelectResourceRequest) returns (SelectResourceResponse) {} rpc OperatePrivilege(OperatePrivilegeRequest) returns (common.Status) {} rpc SelectGrant(SelectGrantRequest) returns (SelectGrantResponse) {} } message CreateAliasRequest { common.MsgBase base = 1; string db_name = 2; string collection_name = 3; string alias = 4; } message DropAliasRequest { common.MsgBase base = 1; string db_name = 2; string alias = 3; } message AlterAliasRequest{ common.MsgBase base = 1; string db_name = 2; string collection_name = 3; string alias = 4; } /** * Create collection in milvus */ message CreateCollectionRequest { option (common.privilege_ext_obj) = { resource_type: Collection resource_privilege: PrivilegeCreate resource_name_index: 3 }; // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The unique collection name in milvus.(Required) string collection_name = 3; // The serialized `schema.CollectionSchema`(Required) bytes schema = 4; // Once set, no modification is allowed (Optional) // https://github.com/milvus-io/milvus/issues/6690 int32 shards_num = 5; // The consistency level that the collection used, modification is not supported now. common.ConsistencyLevel consistency_level = 6; } /** * Drop collection in milvus, also will drop data in collection. */ message DropCollectionRequest { option (common.privilege_ext_obj) = { resource_type: Collection resource_privilege: PrivilegeDrop resource_name_index: 3 }; // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The unique collection name in milvus.(Required) string collection_name = 3; } /** * Check collection exist in milvus or not. */ message HasCollectionRequest { option (common.privilege_ext_obj) = { resource_type: Collection resource_privilege: PrivilegeRead resource_name_index: 3 }; // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The collection name you want to check. string collection_name = 3; // If time_stamp is not zero, will return true when time_stamp >= created collection timestamp, otherwise will return false. uint64 time_stamp = 4; } message BoolResponse { common.Status status = 1; bool value = 2; } message StringResponse { common.Status status = 1; string value = 2; } /** * Get collection meta datas like: schema, collectionID, shards number ... */ message DescribeCollectionRequest { option (common.privilege_ext_obj) = { resource_type: Collection resource_privilege: PrivilegeRead resource_name_index: 3 }; // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The collection name you want to describe, you can pass collection_name or collectionID string collection_name = 3; // The collection ID you want to describe int64 collectionID = 4; // If time_stamp is not zero, will describe collection success when time_stamp >= created collection timestamp, otherwise will throw error. uint64 time_stamp = 5; } /** * DescribeCollection Response */ message DescribeCollectionResponse { // Contain error_code and reason common.Status status = 1; // The schema param when you created collection. schema.CollectionSchema schema = 2; // The collection id int64 collectionID = 3; // System design related, users should not perceive repeated string virtual_channel_names = 4; // System design related, users should not perceive repeated string physical_channel_names = 5; // Hybrid timestamp in milvus uint64 created_timestamp = 6; // The utc timestamp calculated by created_timestamp uint64 created_utc_timestamp = 7; // The shards number you set. int32 shards_num = 8; // The aliases of this collection repeated string aliases = 9; // The message ID/posititon when collection is created repeated common.KeyDataPair start_positions = 10; // The consistency level that the collection used, modification is not supported now. common.ConsistencyLevel consistency_level = 11; // The collection name string collection_name = 12; } /** * Load collection data into query nodes, then you can do vector search on this collection. */ message LoadCollectionRequest { option (common.privilege_ext_obj) = { resource_type: Collection resource_privilege: PrivilegeLoad resource_name_index: 3 }; // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The collection name you want to load string collection_name = 3; // The replica number to load, default by 1 int32 replica_number = 4; } /** * Release collection data from query nodes, then you can't do vector search on this collection. */ message ReleaseCollectionRequest { option (common.privilege_ext_obj) = { resource_type: Collection resource_privilege: PrivilegeRelease resource_name_index: 3 }; // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The collection name you want to release string collection_name = 3; } /** * Get collection statistics like row_count. */ message GetCollectionStatisticsRequest { option (common.privilege_ext_obj) = { resource_type: Collection resource_privilege: PrivilegeRead resource_name_index: 3 }; // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The collection name you want get statistics string collection_name = 3; } /** * Will return collection statistics in stats field like [{key:"row_count",value:"1"}] */ message GetCollectionStatisticsResponse { // Contain error_code and reason common.Status status = 1; // Collection statistics data repeated common.KeyValuePair stats = 2; } /* * This is for ShowCollectionsRequest type field. */ enum ShowType { // Will return all colloections All = 0; // Will return loaded collections with their inMemory_percentages InMemory = 1; } /* * List collections */ message ShowCollectionsRequest { option (common.privilege_ext_obj) = { resource_type: Collection resource_privilege: PrivilegeRead }; // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // Not useful for now uint64 time_stamp = 3; // Decide return Loaded collections or All collections(Optional) ShowType type = 4; // When type is InMemory, will return these collection's inMemory_percentages.(Optional) repeated string collection_names = 5; } /* * Return basic collection infos. */ message ShowCollectionsResponse { // Contain error_code and reason common.Status status = 1; // Collection name array repeated string collection_names = 2; // Collection Id array repeated int64 collection_ids = 3; // Hybrid timestamps in milvus repeated uint64 created_timestamps = 4; // The utc timestamp calculated by created_timestamp repeated uint64 created_utc_timestamps = 5; // Load percentage on querynode when type is InMemory repeated int64 inMemory_percentages = 6; // Indicate whether query service is available repeated bool query_service_available = 7; } /* * Create partition in created collection. */ message CreatePartitionRequest { // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The collection name in milvus string collection_name = 3; // The partition name you want to create. string partition_name = 4; } /* * Drop partition in created collection. */ message DropPartitionRequest { // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The collection name in milvus string collection_name = 3; // The partition name you want to drop string partition_name = 4; } /* * Check if partition exist in collection or not. */ message HasPartitionRequest { // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The collection name in milvus string collection_name = 3; // The partition name you want to check string partition_name = 4; } /* * Load specific partitions data of one collection into query nodes * Then you can get these data as result when you do vector search on this collection. */ message LoadPartitionsRequest { // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The collection name in milvus string collection_name = 3; // The partition names you want to load repeated string partition_names = 4; // The replicas number you would load, 1 by default int32 replica_number = 5; } /* * Release specific partitions data of one collection from query nodes. * Then you can not get these data as result when you do vector search on this collection. */ message ReleasePartitionsRequest { // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The collection name in milvus string collection_name = 3; // The partition names you want to release repeated string partition_names = 4; } /* * Get partition statistics like row_count. */ message GetPartitionStatisticsRequest { // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The collection name in milvus string collection_name = 3; // The partition name you want to collect statistics string partition_name = 4; } message GetPartitionStatisticsResponse { common.Status status = 1; repeated common.KeyValuePair stats = 2; } /* * List all partitions for particular collection */ message ShowPartitionsRequest { // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The collection name you want to describe, you can pass collection_name or collectionID string collection_name = 3; // The collection id in milvus int64 collectionID = 4; // When type is InMemory, will return these patitions's inMemory_percentages.(Optional) repeated string partition_names = 5; // Decide return Loaded partitions or All partitions(Optional) ShowType type = 6; } /* * List all partitions for particular collection response. * The returned datas are all rows, we can format to columns by therir index. */ message ShowPartitionsResponse { // Contain error_code and reason common.Status status = 1; // All partition names for this collection repeated string partition_names = 2; // All partition ids for this collection repeated int64 partitionIDs = 3; // All hybrid timestamps repeated uint64 created_timestamps = 4; // All utc timestamps calculated by created_timestamps repeated uint64 created_utc_timestamps = 5; // Load percentage on querynode repeated int64 inMemory_percentages = 6; } message DescribeSegmentRequest { common.MsgBase base = 1; int64 collectionID = 2; int64 segmentID = 3; } message DescribeSegmentResponse { common.Status status = 1; int64 indexID = 2; int64 buildID = 3; bool enable_index = 4; int64 fieldID = 5; } message ShowSegmentsRequest { common.MsgBase base = 1; int64 collectionID = 2; int64 partitionID = 3; } message ShowSegmentsResponse { common.Status status = 1; repeated int64 segmentIDs = 2; } /* * Create index for vector datas */ message CreateIndexRequest { // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The particular collection name you want to create index. string collection_name = 3; // The vector field name in this particular collection string field_name = 4; // Support keys: index_type,metric_type, params. Different index_type may has different params. repeated common.KeyValuePair extra_params = 5; // Version before 2.0.2 doesn't contain index_name, we use default index name. string index_name = 6; } /* * Get created index information. * Current release of Milvus only supports showing latest built index. */ message DescribeIndexRequest { // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2; // The particular collection name in Milvus string collection_name = 3; // The vector field name in this particular collection string field_name = 4; // No need to set up for now @2021.06.30 string index_name = 5; } /* * Index informations */ message IndexDescription { // Index name string index_name = 1; // Index id int64 indexID = 2; // Will return index_type, metric_type, params(like nlist). repeated common.KeyValuePair params = 3; // The vector field name string field_name = 4; } /* * Describe index response */ message DescribeIndexResponse { // Response status common.Status status = 1; // All index informations, for now only return tha latest index you created for the collection. repeated IndexDescription index_descriptions = 2; } /* * Get index building progress */ message GetIndexBuildProgressRequest { // Not useful for now common.MsgBase base = 1; // Not useful for now string db_name = 2 ; // The collection name in milvus string collection_name = 3; // The vector field name in this collection string field_name = 4; // Not useful for now string index_name = 5; } message GetIndexBuildProgressResponse { common.Status status = 1; int64 indexed_rows = 2; int64 total_rows = 3; } message GetIndexStateRequest { common.MsgBase base = 1; // must string db_name = 2 ; string collection_name = 3; // must string field_name = 4; string index_name = 5; // No need to set up for now @2021.06.30 } message GetIndexStateResponse { common.Status status = 1; common.IndexState state = 2; string fail_reason = 3; } message DropIndexRequest { common.MsgBase base = 1; // must string db_name = 2; string collection_name = 3; // must string field_name = 4; string index_name = 5; // No need to set up for now @2021.06.30 } message InsertRequest { common.MsgBase base = 1; string db_name = 2; string collection_name = 3; string partition_name = 4; repeated schema.FieldData fields_data = 5; repeated uint32 hash_keys = 6; uint32 num_rows = 7; } message MutationResult { common.Status status = 1; schema.IDs IDs = 2; // required for insert, delete repeated uint32 succ_index = 3; // error indexes indicate repeated uint32 err_index = 4; // error indexes indicate bool acknowledged = 5; int64 insert_cnt = 6; int64 delete_cnt = 7; int64 upsert_cnt = 8; uint64 timestamp = 9; } message DeleteRequest { common.MsgBase base = 1; string db_name = 2; string collection_name = 3; string partition_name = 4; string expr = 5; repeated uint32 hash_keys = 6; } message SearchRequest { common.MsgBase base = 1; // must string db_name = 2; string collection_name = 3; // must repeated string partition_names = 4; // must string dsl = 5; // must // serialized `PlaceholderGroup` bytes placeholder_group = 6; // must common.DslType dsl_type = 7; // must repeated string output_fields = 8; repeated common.KeyValuePair search_params = 9; // must uint64 travel_timestamp = 10; uint64 guarantee_timestamp = 11; // guarantee_timestamp int64 nq = 12; } message Hits { repeated int64 IDs = 1; repeated bytes row_data = 2; repeated float scores = 3; } message SearchResults { common.Status status = 1; schema.SearchResultData results = 2; string collection_name = 3; } message FlushRequest { common.MsgBase base = 1; string db_name = 2; repeated string collection_names = 3; } message FlushResponse{ common.Status status = 1; string db_name = 2; map coll_segIDs = 3; } message QueryRequest { common.MsgBase base = 1; string db_name = 2; string collection_name = 3; string expr = 4; repeated string output_fields = 5; repeated string partition_names = 6; uint64 travel_timestamp = 7; uint64 guarantee_timestamp = 8; // guarantee_timestamp } message QueryResults { common.Status status = 1; repeated schema.FieldData fields_data = 2; string collection_name = 3; } message VectorIDs { string collection_name = 1; string field_name = 2; schema.IDs id_array = 3; repeated string partition_names = 4; } message VectorsArray { oneof array { VectorIDs id_array = 1; // vector ids schema.VectorField data_array = 2; // vectors data } } message CalcDistanceRequest { common.MsgBase base = 1; VectorsArray op_left = 2; // vectors on the left of operator VectorsArray op_right = 3; // vectors on the right of operator repeated common.KeyValuePair params = 4; // "metric":"L2"/"IP"/"HAMMIN"/"TANIMOTO" } message CalcDistanceResults { common.Status status = 1; // num(op_left)*num(op_right) distance values, "HAMMIN" return integer distance oneof array { schema.IntArray int_dist = 2; schema.FloatArray float_dist = 3; } } message PersistentSegmentInfo { int64 segmentID = 1; int64 collectionID = 2; int64 partitionID = 3; int64 num_rows = 4; common.SegmentState state = 5; } message GetPersistentSegmentInfoRequest { common.MsgBase base = 1; // must string dbName = 2; string collectionName = 3; // must } message GetPersistentSegmentInfoResponse { common.Status status = 1; repeated PersistentSegmentInfo infos = 2; } message QuerySegmentInfo { int64 segmentID = 1; int64 collectionID = 2; int64 partitionID = 3; int64 mem_size = 4; int64 num_rows = 5; string index_name = 6; int64 indexID = 7; // deprecated, check node_ids(NodeIds) field int64 nodeID = 8; common.SegmentState state = 9; repeated int64 nodeIds = 10; } message GetQuerySegmentInfoRequest { common.MsgBase base = 1; // must string dbName = 2; string collectionName = 3; // must } message GetQuerySegmentInfoResponse { common.Status status = 1; repeated QuerySegmentInfo infos = 2; } message DummyRequest { string request_type = 1; } message DummyResponse { string response = 1; } message RegisterLinkRequest { } message RegisterLinkResponse { common.Address address = 1; common.Status status = 2; } message GetMetricsRequest { common.MsgBase base = 1; string request = 2; // request is of jsonic format } message GetMetricsResponse { common.Status status = 1; string response = 2; // response is of jsonic format string component_name = 3; // metrics from which component } /* * Do load balancing operation from src_nodeID to dst_nodeID. */ message LoadBalanceRequest { common.MsgBase base = 1; int64 src_nodeID = 2; repeated int64 dst_nodeIDs = 3; repeated int64 sealed_segmentIDs = 4; string collectionName = 5; } message ManualCompactionRequest { int64 collectionID = 1; uint64 timetravel = 2; } message ManualCompactionResponse { common.Status status = 1; int64 compactionID = 2; } message GetCompactionStateRequest { int64 compactionID = 1; } message GetCompactionStateResponse { common.Status status = 1; common.CompactionState state = 2; int64 executingPlanNo = 3; int64 timeoutPlanNo = 4; int64 completedPlanNo = 5; } message GetCompactionPlansRequest { int64 compactionID = 1; } message GetCompactionPlansResponse { common.Status status = 1; common.CompactionState state = 2; repeated CompactionMergeInfo mergeInfos = 3; } message CompactionMergeInfo { repeated int64 sources = 1; int64 target = 2; } message GetFlushStateRequest { repeated int64 segmentIDs = 1; } message GetFlushStateResponse { common.Status status = 1; bool flushed = 2; } message ImportRequest { string collection_name = 1; // target collection string partition_name = 2; // target partition repeated string channel_names = 3; // channel names for the collection bool row_based = 4; // the file is row-based or column-based repeated string files = 5; // file paths to be imported repeated common.KeyValuePair options = 6; // import options, bucket, etc. } message ImportResponse { common.Status status = 1; repeated int64 tasks = 2; // id array of import tasks } message GetImportStateRequest { int64 task = 1; // id of an import task } message GetImportStateResponse { common.Status status = 1; common.ImportState state = 2; // is this import task finished or not int64 row_count = 3; // if the task is finished, this value is how many rows are imported. if the task is not finished, this value is how many rows are parsed. return 0 if failed. repeated int64 id_list = 4; // auto generated ids if the primary key is autoid repeated common.KeyValuePair infos = 5; // more information about the task, progress percent, file path, failed reason, etc. int64 id = 6; // id of an import task bool data_queryable = 7; // A flag indicating whether import data are queryable (i.e. loaded in query nodes) bool data_indexed = 8; // A flag indicating whether import data are indexed. } message ListImportTasksRequest { } message ListImportTasksResponse { common.Status status = 1; repeated GetImportStateResponse tasks = 2; // list of all import tasks } message GetReplicasRequest { common.MsgBase base = 1; int64 collectionID = 2; bool with_shard_nodes = 3; } message GetReplicasResponse { common.Status status = 1; repeated ReplicaInfo replicas = 2; } message ReplicaInfo { // ReplicaGroup int64 replicaID = 1; int64 collectionID = 2; repeated int64 partition_ids = 3; // empty indicates to load collection repeated ShardReplica shard_replicas = 4; repeated int64 node_ids = 5; // include leaders } message ShardReplica { int64 leaderID = 1; string leader_addr = 2; // IP:port string dm_channel_name = 3; // optional, DO NOT save it in meta, set it only for GetReplicas() // if with_shard_nodes is true repeated int64 node_ids = 4; } service ProxyService { rpc RegisterLink(RegisterLinkRequest) returns (RegisterLinkResponse) {} } // https://wiki.lfaidata.foundation/display/MIL/MEP+27+--+Support+Basic+Authentication message CreateCredentialRequest { // Not useful for now common.MsgBase base = 1; // username string username = 2; // ciphertext password string password = 3; // create time uint64 created_utc_timestamps = 4; // modify time uint64 modified_utc_timestamps = 5; } message UpdateCredentialRequest { // Not useful for now common.MsgBase base = 1; // username string username = 2; // old password string oldPassword = 3; // new password string newPassword = 4; // create time uint64 created_utc_timestamps = 5; // modify time uint64 modified_utc_timestamps = 6; } message DeleteCredentialRequest { // Not useful for now common.MsgBase base = 1; // Not useful for now string username = 2; } message ListCredUsersResponse { // Contain error_code and reason common.Status status = 1; // username array repeated string usernames = 2; } message ListCredUsersRequest { // Not useful for now common.MsgBase base = 1; } // https://wiki.lfaidata.foundation/display/MIL/MEP+29+--+Support+Role-Based+Access+Control message RoleEntity { string name = 1; } message UserEntity { string name = 1; } message CreateRoleRequest { // Not useful for now common.MsgBase base = 1; // role RoleEntity entity = 2; } message DropRoleRequest { // Not useful for now common.MsgBase base = 1; // role name string role_name = 2; } enum OperateUserRoleType { AddUserToRole = 0; RemoveUserFromRole = 1; } message OperateUserRoleRequest { // Not useful for now common.MsgBase base = 1; // username string username = 2; // role name string role_name = 3; // operation type OperateUserRoleType type = 4; } message SelectRoleRequest { // Not useful for now common.MsgBase base = 1; // role RoleEntity role = 2; // include user info bool include_user_info = 3; } message RoleResult { RoleEntity role = 1; repeated UserEntity users = 2; } message SelectRoleResponse { // Not useful for now common.Status status = 1; // role result array repeated RoleResult results = 2; } message SelectUserRequest { // Not useful for now common.MsgBase base = 1; // user UserEntity user = 2; // include user info bool include_role_info = 3; } message UserResult { UserEntity user = 1; repeated RoleEntity roles = 2; } message SelectUserResponse { // Not useful for now common.Status status = 1; // user result array repeated UserResult result = 2; } message ResourceEntity { string type = 1; } message PrivilegeEntity { string name = 1; } message SelectResourceRequest { // Not useful for now common.MsgBase base = 1; // resource ResourceEntity entity = 2; // include privilege info bool include_privilege_info = 3; } message ResourceResult { ResourceEntity resource = 1; repeated PrivilegeEntity privileges = 2; } message SelectResourceResponse { // Not useful for now common.Status status = 1; // resource result array repeated ResourceResult results = 2; } message PrincipalEntity { // principal type, including user, role string principal_type = 1; // principal, including user entity or role entity oneof principal { UserEntity user = 2; RoleEntity role = 3; } } message GrantorEntity { UserEntity user = 1; PrivilegeEntity privilege = 2; } message GrantEntity { // principal PrincipalEntity principal = 1; // resource ResourceEntity resource = 2; // resource name string resource_name = 3; // privilege GrantorEntity grantor = 4; } message SelectGrantRequest { // Not useful for now common.MsgBase base = 1; // grant GrantEntity entity = 2; } message SelectGrantResponse { // Not useful for now common.Status status = 1; // grant info array repeated GrantEntity entities = 2; } enum OperatePrivilegeType { Grant = 0; Revoke = 1; } message OperatePrivilegeRequest { // Not useful for now common.MsgBase base = 1; // grant GrantEntity entity = 2; // operation type OperatePrivilegeType type = 3; } message MilvusExt { string version = 1; } extend google.protobuf.FileOptions { MilvusExt milvus_ext_obj = 1001; } option (milvus_ext_obj) = { version: "2.1.0" };