Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -332,17 +332,8 @@ public DeleteResp delete(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStu
DescribeCollectionResp respR = convertUtils.convertDescCollectionResp(descResp);
request.setFilter(vectorUtils.getExprById(respR.getPrimaryFieldName(), request.getIds()));
}
DeleteRequest.Builder builder = DeleteRequest.newBuilder()
.setCollectionName(collectionName)
.setPartitionName(request.getPartitionName())
.setExpr(request.getFilter());
if (request.getFilter() != null && !request.getFilter().isEmpty()) {
Map<String, Object> filterTemplateValues = request.getFilterTemplateValues();
filterTemplateValues.forEach((key, value)->{
builder.putExprTemplateValues(key, VectorUtils.deduceAndCreateTemplateValue(value));
});
}
MutationResult response = blockingStub.delete(builder.build());
DeleteRequest rpcRequest = dataUtils.ConvertToGrpcDeleteRequest(request);
MutationResult response = blockingStub.delete(rpcRequest);

// if illegal data, server fails to process delete, clean the schema cache
// so that the next call of dml can update the cache
Expand Down
19 changes: 19 additions & 0 deletions sdk-core/src/main/java/io/milvus/v2/utils/DataUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import io.milvus.v2.exception.MilvusClientException;
import io.milvus.v2.service.collection.request.CreateCollectionReq;
import io.milvus.v2.service.collection.response.DescribeCollectionResp;
import io.milvus.v2.service.vector.request.DeleteReq;
import io.milvus.v2.service.vector.request.InsertReq;
import io.milvus.v2.service.vector.request.UpsertReq;
import lombok.Builder;
Expand Down Expand Up @@ -238,4 +239,22 @@ public static class InsertDataInfo {
private final CreateCollectionReq.FieldSchema field;
private final LinkedList<Object> data;
}

public DeleteRequest ConvertToGrpcDeleteRequest(DeleteReq request) {
DeleteRequest.Builder builder = DeleteRequest.newBuilder()
.setCollectionName(request.getCollectionName())
.setPartitionName(request.getPartitionName())
.setExpr(request.getFilter());
if (request.getFilter() != null && !request.getFilter().isEmpty()) {
Map<String, Object> filterTemplateValues = request.getFilterTemplateValues();
filterTemplateValues.forEach((key, value)->{
builder.putExprTemplateValues(key, VectorUtils.deduceAndCreateTemplateValue(value));
});
}
String dbName = request.getDatabaseName();
if (StringUtils.isNotEmpty(dbName)) {
builder.setDbName(dbName);
}
return builder.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -283,8 +283,9 @@ private void verifyOutput(JsonObject row, Map<String, Object> entity) {
Assertions.assertEquals(arrStrOri, arrStr);
}

private long getRowCount(String collectionName) {
private long getRowCount(String dbName, String collectionName) {
QueryResp queryResp = client.query(QueryReq.builder()
.databaseName(dbName)
.collectionName(collectionName)
.outputFields(Collections.singletonList("count(*)"))
.consistencyLevel(ConsistencyLevel.STRONG)
Expand Down Expand Up @@ -414,7 +415,7 @@ void testFloatVectors() {
Assertions.assertEquals(1, upsertResp.getUpsertCnt());

// get row count
long rowCount = getRowCount(randomCollectionName);
long rowCount = getRowCount("", randomCollectionName);
Assertions.assertEquals(count + 1, rowCount);

// describe collection
Expand Down Expand Up @@ -638,7 +639,7 @@ void testBinaryVectors() throws InterruptedException {
Assertions.assertEquals(count, insertResp.getInsertCnt());

// get row count
long rowCount = getRowCount(randomCollectionName);
long rowCount = getRowCount("", randomCollectionName);
Assertions.assertEquals(count, rowCount);

// search in collection
Expand Down Expand Up @@ -807,7 +808,7 @@ void testFloat16Vectors() {
}

// get row count
long rowCount = getRowCount(randomCollectionName);
long rowCount = getRowCount("", randomCollectionName);
Assertions.assertEquals(count, rowCount);

client.dropCollection(DropCollectionReq.builder().collectionName(randomCollectionName).build());
Expand Down Expand Up @@ -851,7 +852,7 @@ void testSparseVectors() {
Assertions.assertEquals(count, insertResp.getInsertCnt());

// get row count
long rowCount = getRowCount(randomCollectionName);
long rowCount = getRowCount("", randomCollectionName);
Assertions.assertEquals(count, rowCount);

// search in collection
Expand Down Expand Up @@ -1156,7 +1157,7 @@ void testHybridSearch() {
Assertions.assertEquals(count, insertResp.getInsertCnt());

// get row count
long rowCount = getRowCount(randomCollectionName);
long rowCount = getRowCount("", randomCollectionName);
Assertions.assertEquals(count, rowCount);

// search again, there are results
Expand All @@ -1176,6 +1177,12 @@ void testHybridSearch() {
void testDeleteUpsert() {
String randomCollectionName = generator.generate(10);

// create a new db
String testDbName = "test_delete_db";
client.createDatabase(CreateDatabaseReq.builder()
.databaseName(testDbName)
.build());

CreateCollectionReq.CollectionSchema collectionSchema = CreateCollectionReq.CollectionSchema.builder()
.build();
collectionSchema.addField(AddFieldReq.builder()
Expand All @@ -1196,7 +1203,9 @@ void testDeleteUpsert() {
.metricType(IndexParam.MetricType.L2)
.extraParams(new HashMap<String,Object>(){{put("nlist", 64);}})
.build());
// create collection in the test db
CreateCollectionReq requestCreate = CreateCollectionReq.builder()
.databaseName(testDbName)
.collectionName(randomCollectionName)
.collectionSchema(collectionSchema)
.indexParams(indexParams)
Expand All @@ -1213,20 +1222,22 @@ void testDeleteUpsert() {
}

InsertResp insertResp = client.insert(InsertReq.builder()
.databaseName(testDbName)
.collectionName(randomCollectionName)
.data(data)
.build());
Assertions.assertEquals(10, insertResp.getInsertCnt());

// delete
DeleteResp deleteResp = client.delete(DeleteReq.builder()
.databaseName(testDbName)
.collectionName(randomCollectionName)
.ids(Arrays.asList("pk_5", "pk_8"))
.build());
Assertions.assertEquals(2, deleteResp.getDeleteCnt());

// get row count
long rowCount = getRowCount(randomCollectionName);
long rowCount = getRowCount(testDbName, randomCollectionName);
Assertions.assertEquals(8L, rowCount);

// upsert
Expand All @@ -1240,18 +1251,20 @@ void testDeleteUpsert() {
row2.add("float_vector", JsonUtils.toJsonTree(new float[]{2.0f, 2.0f, 2.0f, 2.0f}));
dataUpdate.add(row2);
UpsertResp upsertResp = client.upsert(UpsertReq.builder()
.databaseName(testDbName)
.collectionName(randomCollectionName)
.data(dataUpdate)
.build());
Assertions.assertEquals(2, upsertResp.getUpsertCnt());
Assertions.assertEquals(2, upsertResp.getPrimaryKeys().size());

// get row count
rowCount = getRowCount(randomCollectionName);
rowCount = getRowCount(testDbName, randomCollectionName);
Assertions.assertEquals(9L, rowCount);

// verify
QueryResp queryResp = client.query(QueryReq.builder()
.databaseName(testDbName)
.collectionName(randomCollectionName)
.ids(Arrays.asList("pk_2", "pk_5"))
.outputFields(Collections.singletonList("*"))
Expand Down Expand Up @@ -1281,7 +1294,10 @@ void testDeleteUpsert() {
Assertions.assertEquals(5.0f, f);
}

client.dropCollection(DropCollectionReq.builder().collectionName(randomCollectionName).build());
client.dropCollection(DropCollectionReq.builder()
.databaseName(testDbName)
.collectionName(randomCollectionName)
.build());
}

@Test
Expand Down Expand Up @@ -1615,7 +1631,7 @@ void testCacheCollectionSchema() throws InterruptedException {
String randomCollectionName = generator.generate(10);

// create a new db
String testDbName = "test_database";
String testDbName = "test_cache_db";
client.createDatabase(CreateDatabaseReq.builder()
.databaseName(testDbName)
.build());
Expand Down Expand Up @@ -1789,7 +1805,7 @@ public void testIterator() {
Assertions.assertEquals(count, insertResp.getInsertCnt());

// get row count
long rowCount = getRowCount(randomCollectionName);
long rowCount = getRowCount("", randomCollectionName);
Assertions.assertEquals(count, rowCount);

// search iterator
Expand Down Expand Up @@ -2113,7 +2129,7 @@ void testDatabase() {
@Test
void testClientPool() {
// create a temp database
String dummyDb = "dummy_db";
String dummyDb = "test_pool_db";
client.createDatabase(CreateDatabaseReq.builder()
.databaseName(dummyDb)
.build());
Expand Down Expand Up @@ -2557,7 +2573,7 @@ void testDocInOut() {
Assertions.assertEquals(3, insertResp.getInsertCnt());

// get row count
long rowCount = getRowCount(randomCollectionName);
long rowCount = getRowCount("", randomCollectionName);
Assertions.assertEquals(texts.size(), rowCount);

// search
Expand Down Expand Up @@ -2901,7 +2917,7 @@ void testConsistencyLevel() throws InterruptedException {
String vectorName = "vector";
int dim = 4;
String defaultDbName = "default";
String tempDbName = "db_for_level";
String tempDbName = "test_level_db";

// create a temp database
client.createDatabase(CreateDatabaseReq.builder()
Expand Down
Loading