3434#include " utils/TypeUtils.h"
3535
3636namespace milvus {
37+ namespace {
38+
39+ Status
40+ ConvertDescribeCollectionResponse (const proto::milvus::DescribeCollectionResponse& rpc_response,
41+ CollectionDesc& collection_desc) {
42+ CollectionSchema schema;
43+ ConvertCollectionSchema (rpc_response.schema (), schema);
44+ schema.SetShardsNum (rpc_response.shards_num ());
45+
46+ collection_desc.SetSchema (std::move (schema));
47+ collection_desc.SetID (rpc_response.collectionid ());
48+ collection_desc.SetCreatedTime (rpc_response.created_timestamp ());
49+
50+ std::vector<std::string> aliases;
51+ aliases.reserve (rpc_response.aliases_size ());
52+ aliases.insert (aliases.end (), rpc_response.aliases ().begin (), rpc_response.aliases ().end ());
53+ collection_desc.SetAlias (std::move (aliases));
54+
55+ std::unordered_map<std::string, std::string> properties;
56+ for (int i = 0 ; i < rpc_response.properties_size (); i++) {
57+ const auto & prop = rpc_response.properties (i);
58+ properties[prop.key ()] = prop.value ();
59+ }
60+ collection_desc.SetProperties (std::move (properties));
61+
62+ return Status::OK ();
63+ }
64+
65+ } // namespace
3766
3867std::shared_ptr<MilvusClientV2>
3968MilvusClientV2::Create () {
@@ -339,26 +368,11 @@ MilvusClientV2Impl::DescribeCollection(const DescribeCollectionRequest& request,
339368 };
340369
341370 auto post = [&response](const proto::milvus::DescribeCollectionResponse& rpc_response) {
342- CollectionSchema schema;
343- ConvertCollectionSchema (rpc_response.schema (), schema);
344- schema.SetShardsNum (rpc_response.shards_num ());
345-
346371 CollectionDesc collection_desc;
347- collection_desc.SetSchema (std::move (schema));
348- collection_desc.SetID (rpc_response.collectionid ());
349- collection_desc.SetCreatedTime (rpc_response.created_timestamp ());
350-
351- std::vector<std::string> aliases;
352- aliases.reserve (rpc_response.aliases_size ());
353- aliases.insert (aliases.end (), rpc_response.aliases ().begin (), rpc_response.aliases ().end ());
354- collection_desc.SetAlias (std::move (aliases));
355-
356- std::unordered_map<std::string, std::string> properties;
357- for (int i = 0 ; i < rpc_response.properties_size (); i++) {
358- const auto & prop = rpc_response.properties (i);
359- properties[prop.key ()] = prop.value ();
372+ auto status = ConvertDescribeCollectionResponse (rpc_response, collection_desc);
373+ if (!status.IsOk ()) {
374+ return status;
360375 }
361- collection_desc.SetProperties (std::move (properties));
362376
363377 response.SetDesc (std::move (collection_desc));
364378 return Status::OK ();
@@ -368,6 +382,106 @@ MilvusClientV2Impl::DescribeCollection(const DescribeCollectionRequest& request,
368382 pre , &MilvusConnection::DescribeCollection, post );
369383}
370384
385+ Status
386+ MilvusClientV2Impl::BatchDescribeCollections (const BatchDescribeCollectionsRequest& request,
387+ BatchDescribeCollectionsResponse& response) {
388+ auto pre = [&request](proto::milvus::BatchDescribeCollectionRequest& rpc_request) {
389+ rpc_request.set_db_name (request.DatabaseName ());
390+ for (const auto & collection_name : request.CollectionNames ()) {
391+ rpc_request.add_collection_name (collection_name);
392+ }
393+ for (auto collection_id : request.CollectionIDs ()) {
394+ rpc_request.add_collectionid (collection_id);
395+ }
396+ return Status::OK ();
397+ };
398+
399+ auto post = [&response](const proto::milvus::BatchDescribeCollectionResponse& rpc_response) {
400+ std::vector<CollectionDesc> descs;
401+ descs.reserve (rpc_response.responses_size ());
402+ for (const auto & rpc_desc : rpc_response.responses ()) {
403+ CollectionDesc desc;
404+ auto status = ConvertDescribeCollectionResponse (rpc_desc, desc);
405+ if (!status.IsOk ()) {
406+ return status;
407+ }
408+ descs.emplace_back (std::move (desc));
409+ }
410+
411+ response.SetDescs (std::move (descs));
412+ return Status::OK ();
413+ };
414+
415+ return connection_.Invoke <proto::milvus::BatchDescribeCollectionRequest,
416+ proto::milvus::BatchDescribeCollectionResponse>(
417+ pre , &MilvusConnection::BatchDescribeCollection, post );
418+ }
419+
420+ Status
421+ MilvusClientV2Impl::DescribeReplicas (const DescribeReplicasRequest& request, DescribeReplicasResponse& response) {
422+ if (request.CollectionName ().empty ()) {
423+ return {StatusCode::INVALID_ARGUMENT, " Invalid collection name" };
424+ }
425+
426+ auto pre = [&request](proto::milvus::GetReplicasRequest& rpc_request) {
427+ rpc_request.set_db_name (request.DatabaseName ());
428+ rpc_request.set_collection_name (request.CollectionName ());
429+ rpc_request.set_with_shard_nodes (true );
430+ return Status::OK ();
431+ };
432+
433+ auto post = [&response](const proto::milvus::GetReplicasResponse& rpc_response) {
434+ std::vector<ReplicaInfo> replicas;
435+ replicas.reserve (rpc_response.replicas_size ());
436+ for (const auto & rpc_replica : rpc_response.replicas ()) {
437+ ReplicaInfo replica;
438+ replica.SetReplicaID (rpc_replica.replicaid ());
439+ replica.SetCollectionID (rpc_replica.collectionid ());
440+
441+ std::vector<int64_t > partition_ids;
442+ partition_ids.reserve (rpc_replica.partition_ids_size ());
443+ partition_ids.insert (partition_ids.end (), rpc_replica.partition_ids ().begin (), rpc_replica.partition_ids ().end ());
444+ replica.SetPartitionIDs (std::move (partition_ids));
445+
446+ std::vector<int64_t > node_ids;
447+ node_ids.reserve (rpc_replica.node_ids_size ());
448+ node_ids.insert (node_ids.end (), rpc_replica.node_ids ().begin (), rpc_replica.node_ids ().end ());
449+ replica.SetNodeIDs (std::move (node_ids));
450+
451+ replica.SetResourceGroupName (rpc_replica.resource_group_name ());
452+
453+ std::unordered_map<std::string, int32_t > num_outbound_node;
454+ num_outbound_node.insert (rpc_replica.num_outbound_node ().begin (), rpc_replica.num_outbound_node ().end ());
455+ replica.SetNumOutboundNode (std::move (num_outbound_node));
456+
457+ std::vector<ShardReplica> shard_replicas;
458+ shard_replicas.reserve (rpc_replica.shard_replicas_size ());
459+ for (const auto & rpc_shard : rpc_replica.shard_replicas ()) {
460+ ShardReplica shard_replica;
461+ shard_replica.SetLeaderID (rpc_shard.leaderid ());
462+ shard_replica.SetLeaderAddress (rpc_shard.leader_addr ());
463+ shard_replica.SetChannelName (rpc_shard.dm_channel_name ());
464+
465+ std::vector<int64_t > shard_node_ids;
466+ shard_node_ids.reserve (rpc_shard.node_ids_size ());
467+ shard_node_ids.insert (shard_node_ids.end (), rpc_shard.node_ids ().begin (), rpc_shard.node_ids ().end ());
468+ shard_replica.SetNodeIDs (std::move (shard_node_ids));
469+
470+ shard_replicas.emplace_back (std::move (shard_replica));
471+ }
472+ replica.SetShardReplicas (std::move (shard_replicas));
473+
474+ replicas.emplace_back (std::move (replica));
475+ }
476+
477+ response.SetReplicas (std::move (replicas));
478+ return Status::OK ();
479+ };
480+
481+ return connection_.Invoke <proto::milvus::GetReplicasRequest, proto::milvus::GetReplicasResponse>(
482+ pre , &MilvusConnection::GetReplicas, post );
483+ }
484+
371485Status
372486MilvusClientV2Impl::RenameCollection (const RenameCollectionRequest& request) {
373487 auto pre = [&request](proto::milvus::RenameCollectionRequest& rpc_request) {
0 commit comments