Skip to content

Commit 77f111d

Browse files
sijie-ni-0214claude
andcommitted
Add TruncateCollection API to Java SDK
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: sijie-ni-0214 <sijie.ni@zilliz.com>
1 parent 7ae12fa commit 77f111d

6 files changed

Lines changed: 146 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: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,20 @@ 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+
return null;
253+
}
254+
241255
public Void alterCollectionProperties(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, AlterCollectionPropertiesReq request) {
242256
String dbName = request.getDatabaseName();
243257
String collectionName = request.getCollectionName();
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
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+
private Long timeout;
26+
27+
private TruncateCollectionReq(TruncateCollectionReqBuilder builder) {
28+
this.databaseName = builder.databaseName;
29+
this.collectionName = builder.collectionName;
30+
this.timeout = builder.timeout != null ? builder.timeout : 60000L;
31+
}
32+
33+
public static TruncateCollectionReqBuilder builder() {
34+
return new TruncateCollectionReqBuilder();
35+
}
36+
37+
// Getters
38+
public String getDatabaseName() {
39+
return databaseName;
40+
}
41+
42+
public String getCollectionName() {
43+
return collectionName;
44+
}
45+
46+
public Long getTimeout() {
47+
return timeout;
48+
}
49+
50+
// Setters
51+
public void setDatabaseName(String databaseName) {
52+
this.databaseName = databaseName;
53+
}
54+
55+
public void setCollectionName(String collectionName) {
56+
this.collectionName = collectionName;
57+
}
58+
59+
public void setTimeout(Long timeout) {
60+
this.timeout = timeout;
61+
}
62+
63+
@Override
64+
public String toString() {
65+
return "TruncateCollectionReq{" +
66+
"databaseName='" + databaseName + '\'' +
67+
", collectionName='" + collectionName + '\'' +
68+
", timeout=" + timeout +
69+
'}';
70+
}
71+
72+
public static class TruncateCollectionReqBuilder {
73+
private String databaseName;
74+
private String collectionName;
75+
private Long timeout;
76+
77+
private TruncateCollectionReqBuilder() {
78+
}
79+
80+
public TruncateCollectionReqBuilder databaseName(String databaseName) {
81+
this.databaseName = databaseName;
82+
return this;
83+
}
84+
85+
public TruncateCollectionReqBuilder collectionName(String collectionName) {
86+
this.collectionName = collectionName;
87+
return this;
88+
}
89+
90+
public TruncateCollectionReqBuilder timeout(Long timeout) {
91+
this.timeout = timeout;
92+
return this;
93+
}
94+
95+
public TruncateCollectionReq build() {
96+
return new TruncateCollectionReq(this);
97+
}
98+
}
99+
}

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)