From 7edd2c11e6f9f984447e7c0847b53502d27ca73d Mon Sep 17 00:00:00 2001 From: wei liu Date: Mon, 2 Dec 2024 15:20:31 +0800 Subject: [PATCH] fix: grant ManualCompact api doesn't work (#2396) issue: milvus-io/milvus#38086 cause RBAC require to check collection name, but ManualCompact rpc pass collection id in request, so grant ManualCompact api doesn't work. This PR refine compact api impl to pass collection name in request. Signed-off-by: Wei Liu --- pymilvus/client/grpc_handler.py | 3 ++- pymilvus/client/prepare.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pymilvus/client/grpc_handler.py b/pymilvus/client/grpc_handler.py index 56143a7df..258711125 100644 --- a/pymilvus/client/grpc_handler.py +++ b/pymilvus/client/grpc_handler.py @@ -1652,12 +1652,13 @@ def compact( timeout: Optional[float] = None, **kwargs, ) -> int: + # should be removed, but to be compatible with old milvus server, keep it for now. request = Prepare.describe_collection_request(collection_name) rf = self._stub.DescribeCollection.future(request, timeout=timeout) response = rf.result() check_status(response.status) - req = Prepare.manual_compaction(response.collectionID, is_clustering) + req = Prepare.manual_compaction(response.collectionID, collection_name, is_clustering) future = self._stub.ManualCompaction.future(req, timeout=timeout) response = future.result() check_status(response.status) diff --git a/pymilvus/client/prepare.py b/pymilvus/client/prepare.py index 4b1842dee..586d7e5ae 100644 --- a/pymilvus/client/prepare.py +++ b/pymilvus/client/prepare.py @@ -1330,7 +1330,7 @@ def load_balance_request( ) @classmethod - def manual_compaction(cls, collection_id: int, is_clustering: bool): + def manual_compaction(cls, collection_id: int, collection_name: str, is_clustering: bool): if collection_id is None or not isinstance(collection_id, int): raise ParamError(message=f"collection_id value {collection_id} is illegal") @@ -1339,6 +1339,7 @@ def manual_compaction(cls, collection_id: int, is_clustering: bool): request = milvus_types.ManualCompactionRequest() request.collectionID = collection_id + request.collection_name = collection_name request.majorCompaction = is_clustering return request