Skip to content

Commit

Permalink
fix: grant ManualCompact api doesn't work (#2396)
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
weiliu1031 authored Dec 2, 2024
1 parent b2de119 commit 88dfcb8
Show file tree
Hide file tree
Showing 5 changed files with 231 additions and 225 deletions.
3 changes: 2 additions & 1 deletion pymilvus/client/grpc_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -1589,12 +1589,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)
Expand Down
3 changes: 2 additions & 1 deletion pymilvus/client/prepare.py
Original file line number Diff line number Diff line change
Expand Up @@ -1298,7 +1298,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")

Expand All @@ -1307,6 +1307,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
Expand Down
2 changes: 1 addition & 1 deletion pymilvus/grpc_gen/milvus-proto
440 changes: 220 additions & 220 deletions pymilvus/grpc_gen/milvus_pb2.py

Large diffs are not rendered by default.

8 changes: 6 additions & 2 deletions pymilvus/grpc_gen/milvus_pb2.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -1230,14 +1230,18 @@ class LoadBalanceRequest(_message.Message):
def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., src_nodeID: _Optional[int] = ..., dst_nodeIDs: _Optional[_Iterable[int]] = ..., sealed_segmentIDs: _Optional[_Iterable[int]] = ..., collectionName: _Optional[str] = ..., db_name: _Optional[str] = ...) -> None: ...

class ManualCompactionRequest(_message.Message):
__slots__ = ("collectionID", "timetravel", "majorCompaction")
__slots__ = ("collectionID", "timetravel", "majorCompaction", "collection_name", "db_name")
COLLECTIONID_FIELD_NUMBER: _ClassVar[int]
TIMETRAVEL_FIELD_NUMBER: _ClassVar[int]
MAJORCOMPACTION_FIELD_NUMBER: _ClassVar[int]
COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int]
DB_NAME_FIELD_NUMBER: _ClassVar[int]
collectionID: int
timetravel: int
majorCompaction: bool
def __init__(self, collectionID: _Optional[int] = ..., timetravel: _Optional[int] = ..., majorCompaction: bool = ...) -> None: ...
collection_name: str
db_name: str
def __init__(self, collectionID: _Optional[int] = ..., timetravel: _Optional[int] = ..., majorCompaction: bool = ..., collection_name: _Optional[str] = ..., db_name: _Optional[str] = ...) -> None: ...

class ManualCompactionResponse(_message.Message):
__slots__ = ("status", "compactionID", "compactionPlanCount")
Expand Down

0 comments on commit 88dfcb8

Please sign in to comment.