@@ -2507,6 +2507,41 @@ MilvusClientV2Impl::GetReplicateInfo(const GetReplicateInfoRequest& request, Get
25072507 pre , &MilvusConnection::GetReplicateInfo, post );
25082508}
25092509
2510+ Status
2511+ MilvusClientV2Impl::DumpMessages (const DumpMessagesRequest& request,
2512+ const std::function<Status(const DumpedMessage&)>& on_message) {
2513+ if (!on_message) {
2514+ return {StatusCode::INVALID_ARGUMENT , " DumpMessages callback cannot be empty" };
2515+ }
2516+
2517+ auto connection = connection_.GetConnection ();
2518+ if (connection == nullptr ) {
2519+ return {StatusCode::NOT_CONNECTED , " Connection is not created!" };
2520+ }
2521+
2522+ proto::milvus::DumpMessagesRequest rpc_request;
2523+ rpc_request.set_pchannel (request.PChannel ());
2524+ rpc_request.mutable_start_message_id ()->set_id (request.StartMessageID ().ID ());
2525+ const auto & wal_name_str = request.StartMessageID ().WalName ();
2526+ if (!wal_name_str.empty ()) {
2527+ proto::common::WALName wal_name;
2528+ if (!proto::common::WALName_Parse (wal_name_str, &wal_name)) {
2529+ return {StatusCode::INVALID_ARGUMENT , " Unknown WAL name: " + wal_name_str};
2530+ }
2531+ rpc_request.mutable_start_message_id ()->set_wal_name (wal_name);
2532+ }
2533+ rpc_request.set_start_timetick (request.StartTimeTick ());
2534+ rpc_request.set_end_timetick (request.EndTimeTick ());
2535+
2536+ auto callback = [&on_message](const proto::common::ImmutableMessage& rpc_message) {
2537+ DumpedMessage message;
2538+ ConvertImmutableMessage (rpc_message, message);
2539+ return on_message (message);
2540+ };
2541+
2542+ return connection->DumpMessages (rpc_request, GrpcOpts{}, callback);
2543+ }
2544+
25102545Status
25112546MilvusClientV2Impl::CreateResourceGroup (const CreateResourceGroupRequest& request) {
25122547 auto pre = [&request](proto::milvus::CreateResourceGroupRequest& rpc_request) {
@@ -2656,6 +2691,18 @@ MilvusClientV2Impl::UpdatePassword(const UpdatePasswordRequest& request) {
26562691 pre , &MilvusConnection::UpdateCredential, nullptr );
26572692}
26582693
2694+ Status
2695+ MilvusClientV2Impl::UpdateUser (const UpdateUserRequest& request) {
2696+ auto pre = [&request](proto::milvus::UpdateCredentialRequest& rpc_request) {
2697+ rpc_request.set_username (request.UserName ());
2698+ rpc_request.set_description (request.Description ());
2699+ return Status::OK ();
2700+ };
2701+
2702+ return connection_.Invoke <proto::milvus::UpdateCredentialRequest, proto::common::Status>(
2703+ pre , &MilvusConnection::UpdateCredential, nullptr );
2704+ }
2705+
26592706Status
26602707MilvusClientV2Impl::DropUser (const DropUserRequest& request) {
26612708 auto pre = [&request](proto::milvus::DeleteCredentialRequest& rpc_request) {
@@ -2680,6 +2727,8 @@ MilvusClientV2Impl::DescribeUser(const DescribeUserRequest& request, DescribeUse
26802727 desc.SetName (request.UserName ());
26812728 if (rpc_response.results ().size () > 0 ) {
26822729 auto result = rpc_response.results ().at (0 );
2730+ desc.SetName (result.user ().name ());
2731+ desc.SetDescription (result.description ());
26832732 for (const auto & role : result.roles ()) {
26842733 desc.AddRole (role.name ());
26852734 }
@@ -2719,6 +2768,18 @@ MilvusClientV2Impl::CreateRole(const CreateRoleRequest& request) {
27192768 pre , &MilvusConnection::CreateRole, nullptr );
27202769}
27212770
2771+ Status
2772+ MilvusClientV2Impl::AlterRole (const AlterRoleRequest& request) {
2773+ auto pre = [&request](proto::milvus::AlterRoleRequest& rpc_request) {
2774+ rpc_request.set_role_name (request.RoleName ());
2775+ rpc_request.set_description (request.Description ());
2776+ return Status::OK ();
2777+ };
2778+
2779+ return connection_.Invoke <proto::milvus::AlterRoleRequest, proto::common::Status>(pre , &MilvusConnection::AlterRole,
2780+ nullptr );
2781+ }
2782+
27222783Status
27232784MilvusClientV2Impl::DropRole (const DropRoleRequest& request) {
27242785 auto pre = [&request](proto::milvus::DropRoleRequest& rpc_request) {
@@ -2740,13 +2801,36 @@ MilvusClientV2Impl::DescribeRole(const DescribeRoleRequest& request, DescribeRol
27402801 return Status::OK ();
27412802 };
27422803
2743- auto post = [&request, &response](const proto::milvus::SelectGrantResponse& rpc_response) {
2804+ auto post = [this , &request, &response](const proto::milvus::SelectGrantResponse& rpc_response) {
27442805 RoleDesc desc;
27452806 desc.SetName (request.RoleName ());
27462807 for (const auto & entity : rpc_response.entities ()) {
27472808 desc.AddGrantItem ({entity.object ().name (), entity.object_name (), entity.db_name (), entity.role ().name (),
27482809 entity.grantor ().user ().name (), entity.grantor ().privilege ().name ()});
27492810 }
2811+
2812+ proto::milvus::SelectRoleRequest role_request;
2813+ role_request.set_include_user_info (false );
2814+ role_request.mutable_role ()->set_name (request.RoleName ());
2815+ proto::milvus::SelectRoleResponse role_response;
2816+
2817+ auto connection = connection_.GetConnection ();
2818+ if (connection == nullptr ) {
2819+ return Status{StatusCode::NOT_CONNECTED , " Connection is not created!" };
2820+ }
2821+ auto retry_param = connection_.GetRetryParam ();
2822+ auto caller = [&]() {
2823+ return connection->SelectRole (role_request, role_response, GrpcOpts{connection_.GetRpcDeadlineMs ()});
2824+ };
2825+ auto status = Retry (caller, retry_param);
2826+ if (!status.IsOk ()) {
2827+ return status;
2828+ }
2829+ if (role_response.results_size () > 0 ) {
2830+ desc.SetName (role_response.results (0 ).role ().name ());
2831+ desc.SetDescription (role_response.results (0 ).role ().description ());
2832+ }
2833+
27502834 response.SetDesc (std::move (desc));
27512835 return Status::OK ();
27522836 };
0 commit comments