milvus icon indicating copy to clipboard operation
milvus copied to clipboard

[Bug]: Query on a released partition will return data

Open NicoYuan1986 opened this issue 1 year ago • 0 comments

Is there an existing issue for this?

  • [X] I have searched the existing issues

Environment

- Milvus version:master-20230423-092d7439
- Deployment mode(standalone or cluster):standalone
- MQ type(rocksmq, pulsar or kafka):    rocksmq
- SDK version(e.g. pymilvus v2.0.0rc2):2.4.0.dev12
- OS(Ubuntu or CentOS): 
- CPU/Memory: 
- GPU: 
- Others:

Current Behavior

Query on a released partition will return data. image

Expected Behavior

An empty result should be returned, cause the partition was released.

Steps To Reproduce

1. create a collection and 3 partitions, create index
2. insert data into the 3 partitions
3. load the collection
4. release partition2
5. query on partition2 ❌

Milvus Log

from pymilvus import CollectionSchema, FieldSchema, Collection, connections, DataType, Partition, utility
import numpy as np
import random
connections.connect()

# create collection
dim = 128
fields = [
    FieldSchema(name="int64", dtype=DataType.INT64, is_primary=True, description='pk'),
    FieldSchema(name="float", dtype=DataType.FLOAT),
    FieldSchema(name="float_vector", dtype=DataType.FLOAT_VECTOR, dim=dim)
]
schema = CollectionSchema(fields=fields)

collection = Collection("test_load", schema=schema)
index = {"index_type": "IVF_FLAT", "params": {"nlist": 128}, "metric_type": "L2"}
collection.create_index("float_vector", index)
partition1 = Partition(collection, "partition1")
partition2 = Partition(collection, "partition2")
# 3 partitions: _default, partition1, partition2

# insert data
nb = 100
vectors = [[random.random() for _ in range(dim)] for _ in range(nb)]
collection.insert([[i for i in range(nb)], [np.float32(i) for i in range(nb)], vectors], "_default")
collection.insert([[(i+1000) for i in range(nb)], [np.float32(i+1000) for i in range(nb)], vectors], "partition1")
collection.insert([[(i+10000) for i in range(nb)], [np.float32(i+10000) for i in range(nb)], vectors], "partition2")

collection.load()
partition2.release()
res = collection.query('int64 >= 10000', partition_names=['partition2'])
print(res)

Anything else?

No response

NicoYuan1986 avatar Apr 23 '23 10:04 NicoYuan1986