Skip to content

Commit 8e0a27b

Browse files
authored
enhance: enable setting properties during create database (#2168)
issue: milvus-io/milvus#30040 Signed-off-by: Wei Liu <[email protected]>
1 parent 131989a commit 8e0a27b

File tree

10 files changed

+135
-115
lines changed

10 files changed

+135
-115
lines changed

examples/database.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -117,35 +117,38 @@ def collection_read_write(collection, db_name):
117117
# create collection within default
118118
col1_db1 = create_collection("col1_db1", "default")
119119

120+
db1Name = "db1"
120121
# create db1
121-
if "db1" not in db.list_database():
122+
if db1Name not in db.list_database():
122123
print("\ncreate database: db1")
123-
db.create_database(db_name="db1")
124+
db.create_database(db_name=db1Name, properties={"key1":"value1"})
125+
db_info = db.describe_database(db_name=db1Name)
126+
print(db_info)
124127

125128
# use database db1
126-
db.using_database(db_name="db1")
129+
db.using_database(db_name=db1Name)
127130
# create collection within default
128-
col2_db1 = create_collection("col1_db1", "db1")
131+
col2_db1 = create_collection("col1_db1", db1Name)
129132

130133
# verify read and write
131-
collection_read_write(col2_db1, "db1")
134+
collection_read_write(col2_db1, db1Name)
132135

133136
# list collections within db1
134137
print("\nlist collections of database db1:")
135138
print(utility.list_collections())
136139

137140
# set properties of db1
138-
print("\nset properties of db1:")
139-
db_info = db.describe_database(db_name="db1")
141+
db_info = db.describe_database(db_name=db1Name)
140142
print(db_info)
141-
db.set_properties(db_name="db1", properties={"key": "value"})
142-
db_info = db.describe_database(db_name="db1")
143+
print("\nset properties of db1:")
144+
db.set_properties(db_name=db1Name, properties={"key": "value"})
145+
db_info = db.describe_database(db_name=db1Name)
143146
print(db_info)
144147

145148
print("\ndrop collection: col1_db2 from db1")
146149
col2_db1.drop()
147150
print("\ndrop database: db1")
148-
db.drop_database(db_name="db1")
151+
db.drop_database(db_name=db1Name)
149152

150153
# list database
151154
print("\nlist databases:")

pymilvus/client/grpc_handler.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1277,8 +1277,8 @@ def get_loading_progress(
12771277
return response.progress
12781278

12791279
@retry_on_rpc_failure()
1280-
def create_database(self, db_name: str, timeout: Optional[float] = None):
1281-
request = Prepare.create_database_req(db_name)
1280+
def create_database(self, db_name: str, timeout: Optional[float] = None, **kwargs):
1281+
request = Prepare.create_database_req(db_name, **kwargs)
12821282
status = self._stub.CreateDatabase(request, timeout=timeout)
12831283
check_status(status)
12841284

pymilvus/client/prepare.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1233,9 +1233,17 @@ def register_request(cls, user: str, host: str, **kwargs):
12331233
)
12341234

12351235
@classmethod
1236-
def create_database_req(cls, db_name: str):
1236+
def create_database_req(cls, db_name: str, **kwargs):
12371237
check_pass_param(db_name=db_name)
1238-
return milvus_types.CreateDatabaseRequest(db_name=db_name)
1238+
1239+
req = milvus_types.CreateDatabaseRequest(db_name=db_name)
1240+
properties = kwargs.get("properties")
1241+
if is_legal_collection_properties(properties):
1242+
properties = [
1243+
common_types.KeyValuePair(key=str(k), value=str(v)) for k, v in properties.items()
1244+
]
1245+
req.properties.extend(properties)
1246+
return req
12391247

12401248
@classmethod
12411249
def drop_database_req(cls, db_name: str):

pymilvus/grpc_gen/milvus_pb2.py

Lines changed: 39 additions & 37 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pymilvus/grpc_gen/milvus_pb2.pyi

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1863,12 +1863,14 @@ class AllocTimestampResponse(_message.Message):
18631863
def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., timestamp: _Optional[int] = ...) -> None: ...
18641864

18651865
class CreateDatabaseRequest(_message.Message):
1866-
__slots__ = ("base", "db_name")
1866+
__slots__ = ("base", "db_name", "properties")
18671867
BASE_FIELD_NUMBER: _ClassVar[int]
18681868
DB_NAME_FIELD_NUMBER: _ClassVar[int]
1869+
PROPERTIES_FIELD_NUMBER: _ClassVar[int]
18691870
base: _common_pb2.MsgBase
18701871
db_name: str
1871-
def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ...) -> None: ...
1872+
properties: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair]
1873+
def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., properties: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ...) -> None: ...
18721874

18731875
class DropDatabaseRequest(_message.Message):
18741876
__slots__ = ("base", "db_name")

pymilvus/grpc_gen/schema_pb2.py

Lines changed: 44 additions & 44 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pymilvus/grpc_gen/schema_pb2.pyi

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,20 +91,22 @@ class FieldSchema(_message.Message):
9191
def __init__(self, fieldID: _Optional[int] = ..., name: _Optional[str] = ..., is_primary_key: bool = ..., description: _Optional[str] = ..., data_type: _Optional[_Union[DataType, str]] = ..., type_params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., index_params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., autoID: bool = ..., state: _Optional[_Union[FieldState, str]] = ..., element_type: _Optional[_Union[DataType, str]] = ..., default_value: _Optional[_Union[ValueField, _Mapping]] = ..., is_dynamic: bool = ..., is_partition_key: bool = ..., is_clustering_key: bool = ..., nullable: bool = ...) -> None: ...
9292

9393
class CollectionSchema(_message.Message):
94-
__slots__ = ("name", "description", "autoID", "fields", "enable_dynamic_field", "properties")
94+
__slots__ = ("name", "description", "autoID", "fields", "enable_dynamic_field", "properties", "partition_key_isolation")
9595
NAME_FIELD_NUMBER: _ClassVar[int]
9696
DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
9797
AUTOID_FIELD_NUMBER: _ClassVar[int]
9898
FIELDS_FIELD_NUMBER: _ClassVar[int]
9999
ENABLE_DYNAMIC_FIELD_FIELD_NUMBER: _ClassVar[int]
100100
PROPERTIES_FIELD_NUMBER: _ClassVar[int]
101+
PARTITION_KEY_ISOLATION_FIELD_NUMBER: _ClassVar[int]
101102
name: str
102103
description: str
103104
autoID: bool
104105
fields: _containers.RepeatedCompositeFieldContainer[FieldSchema]
105106
enable_dynamic_field: bool
106107
properties: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair]
107-
def __init__(self, name: _Optional[str] = ..., description: _Optional[str] = ..., autoID: bool = ..., fields: _Optional[_Iterable[_Union[FieldSchema, _Mapping]]] = ..., enable_dynamic_field: bool = ..., properties: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ...) -> None: ...
108+
partition_key_isolation: bool
109+
def __init__(self, name: _Optional[str] = ..., description: _Optional[str] = ..., autoID: bool = ..., fields: _Optional[_Iterable[_Union[FieldSchema, _Mapping]]] = ..., enable_dynamic_field: bool = ..., properties: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., partition_key_isolation: bool = ...) -> None: ...
108110

109111
class BoolArray(_message.Message):
110112
__slots__ = ("data",)

pymilvus/orm/collection.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,9 @@ def set_properties(self, properties: dict, timeout: Optional[float] = None, **kw
347347
348348
Args:
349349
properties (``dict``): collection properties.
350-
only support collection TTL with key `collection.ttl.seconds`
350+
support collection TTL with key `collection.ttl.seconds`
351+
support collection replica number with key `collection.replica.number`
352+
support collection resource groups with key `collection.resource_groups`.
351353
timeout (float, optional): an optional duration of time in seconds to allow
352354
for the RPCs. If timeout is not set, the client keeps waiting until the
353355
server responds or an error occurs.

pymilvus/orm/db.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,17 @@ def using_database(db_name: str, using: str = "default"):
1717
_get_connection(using).reset_db_name(db_name)
1818

1919

20-
def create_database(db_name: str, using: str = "default", timeout: Optional[float] = None):
20+
def create_database(
21+
db_name: str, using: str = "default", timeout: Optional[float] = None, **kwargs
22+
):
2123
"""Create a database using provided database name
22-
23-
:param db_name: Database name
24-
:type db_name: str
25-
24+
Args:
25+
db_name (``str``): Database name
26+
properties (``dict``): database properties.
27+
support database replica number with key `database.replica.number`
28+
support database resource groups with key `database.resource_groups`
2629
"""
27-
_get_connection(using).create_database(db_name, timeout=timeout)
30+
_get_connection(using).create_database(db_name, timeout=timeout, **kwargs)
2831

2932

3033
def drop_database(db_name: str, using: str = "default", timeout: Optional[float] = None):
@@ -52,14 +55,12 @@ def set_properties(
5255
using: str = "default",
5356
timeout: Optional[float] = None,
5457
):
55-
"""Alter a database using provided database name
56-
57-
:param db_name: Database name
58-
:type db_name: str
59-
60-
:param properties: Properties to be set
61-
:type properties: dict
62-
58+
"""Set properties for a database using provided database name
59+
Args:
60+
db_name (``str``): Database name
61+
properties (``dict``): database properties.
62+
support database replica number with key `database.replica.number`
63+
support database resource groups with key `database.resource_groups`
6364
"""
6465
_get_connection(using).alter_database(db_name, properties=properties, timeout=timeout)
6566

0 commit comments

Comments
 (0)