Skip to content

Commit 32de51e

Browse files
Add TruncateCollection API to Java SDK (#1781)
Signed-off-by: sijie-ni-0214 <[email protected]>
1 parent 33bc614 commit 32de51e

6 files changed

Lines changed: 133 additions & 0 deletions

File tree

sdk-core/src/main/java/io/milvus/v2/client/MilvusClientV2.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,15 @@ public void dropCollection(DropCollectionReq request) {
411411
vectorService.removeCollectionCache(request.getDatabaseName(), request.getCollectionName());
412412
}
413413

414+
/**
415+
* Truncates a collection in Milvus, removing all data while preserving the collection schema.
416+
*
417+
* @param request truncate collection request
418+
*/
419+
public void truncateCollection(TruncateCollectionReq request) {
420+
rpcUtils.retry(() -> collectionService.truncateCollection(this.getRpcStub(), request));
421+
}
422+
414423
/**
415424
* Alter a collection in Milvus.
416425
* Deprecated, replaced by alterCollectionProperties from SDK v2.5.3, to keep consistence with other SDKs

sdk-core/src/main/java/io/milvus/v2/service/collection/CollectionService.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,24 @@ public Void dropCollection(MilvusServiceGrpc.MilvusServiceBlockingStub blockingS
238238
return null;
239239
}
240240

241+
public Void truncateCollection(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, TruncateCollectionReq request) {
242+
String dbName = request.getDatabaseName();
243+
String collectionName = request.getCollectionName();
244+
String title = String.format("Truncate collection: '%s' in database: '%s'", collectionName, dbName);
245+
TruncateCollectionRequest.Builder builder = TruncateCollectionRequest.newBuilder()
246+
.setCollectionName(collectionName);
247+
if (StringUtils.isNotEmpty(dbName)) {
248+
builder.setDbName(dbName);
249+
}
250+
Status status = blockingStub.truncateCollection(builder.build()).getStatus();
251+
rpcUtils.handleResponse(title, status);
252+
253+
// remove the last write timestamp since all data has been cleared
254+
String key = GTsDict.CombineCollectionName(actualDbName(dbName), collectionName);
255+
GTsDict.getInstance().removeCollectionTs(key);
256+
return null;
257+
}
258+
241259
public Void alterCollectionProperties(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, AlterCollectionPropertiesReq request) {
242260
String dbName = request.getDatabaseName();
243261
String collectionName = request.getCollectionName();
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package io.milvus.v2.service.collection.request;
21+
22+
public class TruncateCollectionReq {
23+
private String databaseName;
24+
private String collectionName;
25+
26+
private TruncateCollectionReq(TruncateCollectionReqBuilder builder) {
27+
this.databaseName = builder.databaseName;
28+
this.collectionName = builder.collectionName;
29+
}
30+
31+
public static TruncateCollectionReqBuilder builder() {
32+
return new TruncateCollectionReqBuilder();
33+
}
34+
35+
// Getters
36+
public String getDatabaseName() {
37+
return databaseName;
38+
}
39+
40+
public String getCollectionName() {
41+
return collectionName;
42+
}
43+
44+
// Setters
45+
public void setDatabaseName(String databaseName) {
46+
this.databaseName = databaseName;
47+
}
48+
49+
public void setCollectionName(String collectionName) {
50+
this.collectionName = collectionName;
51+
}
52+
53+
@Override
54+
public String toString() {
55+
return "TruncateCollectionReq{" +
56+
"databaseName='" + databaseName + '\'' +
57+
", collectionName='" + collectionName + '\'' +
58+
'}';
59+
}
60+
61+
public static class TruncateCollectionReqBuilder {
62+
private String databaseName;
63+
private String collectionName;
64+
65+
private TruncateCollectionReqBuilder() {
66+
}
67+
68+
public TruncateCollectionReqBuilder databaseName(String databaseName) {
69+
this.databaseName = databaseName;
70+
return this;
71+
}
72+
73+
public TruncateCollectionReqBuilder collectionName(String collectionName) {
74+
this.collectionName = collectionName;
75+
return this;
76+
}
77+
78+
public TruncateCollectionReq build() {
79+
return new TruncateCollectionReq(this);
80+
}
81+
}
82+
}

sdk-core/src/test/java/io/milvus/server/MockMilvusServerImpl.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,21 @@ public void setDropCollectionResponse(io.milvus.grpc.Status resp) {
135135
respDropCollection = resp;
136136
}
137137

138+
private io.milvus.grpc.TruncateCollectionResponse respTruncateCollection;
139+
140+
@Override
141+
public void truncateCollection(io.milvus.grpc.TruncateCollectionRequest request,
142+
io.grpc.stub.StreamObserver<io.milvus.grpc.TruncateCollectionResponse> responseObserver) {
143+
logger.info("MockServer receive truncateCollection() call");
144+
145+
responseObserver.onNext(respTruncateCollection);
146+
responseObserver.onCompleted();
147+
}
148+
149+
public void setTruncateCollectionResponse(io.milvus.grpc.TruncateCollectionResponse resp) {
150+
respTruncateCollection = resp;
151+
}
152+
138153
@Override
139154
public void getCollectionStatistics(io.milvus.grpc.GetCollectionStatisticsRequest request,
140155
io.grpc.stub.StreamObserver<io.milvus.grpc.GetCollectionStatisticsResponse> responseObserver) {

sdk-core/src/test/java/io/milvus/v2/BaseTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ public void setUp() {
111111
when(blockingStub.releaseCollection(any())).thenReturn(successStatus);
112112
when(blockingStub.getLoadState(any())).thenReturn(GetLoadStateResponse.newBuilder().setState(LoadState.LoadStateLoaded).setStatus(successStatus).build());
113113
when(blockingStub.dropCollection(any())).thenReturn(successStatus);
114+
when(blockingStub.truncateCollection(any())).thenReturn(TruncateCollectionResponse.newBuilder().setStatus(successStatus).build());
114115
when(blockingStub.hasCollection(any())).thenReturn(trueResponse);
115116
when(blockingStub.describeCollection(any())).thenReturn(describeCollectionResponse);
116117
when(blockingStub.renameCollection(any())).thenReturn(successStatus);

sdk-core/src/test/java/io/milvus/v2/service/collection/CollectionTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,14 @@ void testDropCollection() {
140140
client_v2.dropCollection(req);
141141
}
142142

143+
@Test
144+
void testTruncateCollection() {
145+
TruncateCollectionReq req = TruncateCollectionReq.builder()
146+
.collectionName("test")
147+
.build();
148+
client_v2.truncateCollection(req);
149+
}
150+
143151
@Test
144152
void testHasCollection() {
145153
HasCollectionReq req = HasCollectionReq.builder()

0 commit comments

Comments
 (0)