From 7b1756be07e99236212bcf6a07677fef2c8e7abd Mon Sep 17 00:00:00 2001 From: sijie-ni-0214 Date: Wed, 18 Mar 2026 16:20:36 +0800 Subject: [PATCH] Add TruncateCollection API to Java SDK Signed-off-by: sijie-ni-0214 --- .../io/milvus/v2/client/MilvusClientV2.java | 9 ++ .../service/collection/CollectionService.java | 18 ++++ .../request/TruncateCollectionReq.java | 82 +++++++++++++++++++ .../milvus/server/MockMilvusServerImpl.java | 15 ++++ .../src/test/java/io/milvus/v2/BaseTest.java | 1 + .../v2/service/collection/CollectionTest.java | 8 ++ 6 files changed, 133 insertions(+) create mode 100644 sdk-core/src/main/java/io/milvus/v2/service/collection/request/TruncateCollectionReq.java diff --git a/sdk-core/src/main/java/io/milvus/v2/client/MilvusClientV2.java b/sdk-core/src/main/java/io/milvus/v2/client/MilvusClientV2.java index 2b35f9a81..5197cce25 100644 --- a/sdk-core/src/main/java/io/milvus/v2/client/MilvusClientV2.java +++ b/sdk-core/src/main/java/io/milvus/v2/client/MilvusClientV2.java @@ -411,6 +411,15 @@ public void dropCollection(DropCollectionReq request) { vectorService.removeCollectionCache(request.getDatabaseName(), request.getCollectionName()); } + /** + * Truncates a collection in Milvus, removing all data while preserving the collection schema. + * + * @param request truncate collection request + */ + public void truncateCollection(TruncateCollectionReq request) { + rpcUtils.retry(() -> collectionService.truncateCollection(this.getRpcStub(), request)); + } + /** * Alter a collection in Milvus. * Deprecated, replaced by alterCollectionProperties from SDK v2.5.3, to keep consistence with other SDKs diff --git a/sdk-core/src/main/java/io/milvus/v2/service/collection/CollectionService.java b/sdk-core/src/main/java/io/milvus/v2/service/collection/CollectionService.java index f653ab138..50226537d 100644 --- a/sdk-core/src/main/java/io/milvus/v2/service/collection/CollectionService.java +++ b/sdk-core/src/main/java/io/milvus/v2/service/collection/CollectionService.java @@ -238,6 +238,24 @@ public Void dropCollection(MilvusServiceGrpc.MilvusServiceBlockingStub blockingS return null; } + public Void truncateCollection(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, TruncateCollectionReq request) { + String dbName = request.getDatabaseName(); + String collectionName = request.getCollectionName(); + String title = String.format("Truncate collection: '%s' in database: '%s'", collectionName, dbName); + TruncateCollectionRequest.Builder builder = TruncateCollectionRequest.newBuilder() + .setCollectionName(collectionName); + if (StringUtils.isNotEmpty(dbName)) { + builder.setDbName(dbName); + } + Status status = blockingStub.truncateCollection(builder.build()).getStatus(); + rpcUtils.handleResponse(title, status); + + // remove the last write timestamp since all data has been cleared + String key = GTsDict.CombineCollectionName(actualDbName(dbName), collectionName); + GTsDict.getInstance().removeCollectionTs(key); + return null; + } + public Void alterCollectionProperties(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, AlterCollectionPropertiesReq request) { String dbName = request.getDatabaseName(); String collectionName = request.getCollectionName(); diff --git a/sdk-core/src/main/java/io/milvus/v2/service/collection/request/TruncateCollectionReq.java b/sdk-core/src/main/java/io/milvus/v2/service/collection/request/TruncateCollectionReq.java new file mode 100644 index 000000000..1e0ce9a4e --- /dev/null +++ b/sdk-core/src/main/java/io/milvus/v2/service/collection/request/TruncateCollectionReq.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package io.milvus.v2.service.collection.request; + +public class TruncateCollectionReq { + private String databaseName; + private String collectionName; + + private TruncateCollectionReq(TruncateCollectionReqBuilder builder) { + this.databaseName = builder.databaseName; + this.collectionName = builder.collectionName; + } + + public static TruncateCollectionReqBuilder builder() { + return new TruncateCollectionReqBuilder(); + } + + // Getters + public String getDatabaseName() { + return databaseName; + } + + public String getCollectionName() { + return collectionName; + } + + // Setters + public void setDatabaseName(String databaseName) { + this.databaseName = databaseName; + } + + public void setCollectionName(String collectionName) { + this.collectionName = collectionName; + } + + @Override + public String toString() { + return "TruncateCollectionReq{" + + "databaseName='" + databaseName + '\'' + + ", collectionName='" + collectionName + '\'' + + '}'; + } + + public static class TruncateCollectionReqBuilder { + private String databaseName; + private String collectionName; + + private TruncateCollectionReqBuilder() { + } + + public TruncateCollectionReqBuilder databaseName(String databaseName) { + this.databaseName = databaseName; + return this; + } + + public TruncateCollectionReqBuilder collectionName(String collectionName) { + this.collectionName = collectionName; + return this; + } + + public TruncateCollectionReq build() { + return new TruncateCollectionReq(this); + } + } +} diff --git a/sdk-core/src/test/java/io/milvus/server/MockMilvusServerImpl.java b/sdk-core/src/test/java/io/milvus/server/MockMilvusServerImpl.java index 7a88bd1f2..e6f0f025e 100644 --- a/sdk-core/src/test/java/io/milvus/server/MockMilvusServerImpl.java +++ b/sdk-core/src/test/java/io/milvus/server/MockMilvusServerImpl.java @@ -135,6 +135,21 @@ public void setDropCollectionResponse(io.milvus.grpc.Status resp) { respDropCollection = resp; } + private io.milvus.grpc.TruncateCollectionResponse respTruncateCollection; + + @Override + public void truncateCollection(io.milvus.grpc.TruncateCollectionRequest request, + io.grpc.stub.StreamObserver responseObserver) { + logger.info("MockServer receive truncateCollection() call"); + + responseObserver.onNext(respTruncateCollection); + responseObserver.onCompleted(); + } + + public void setTruncateCollectionResponse(io.milvus.grpc.TruncateCollectionResponse resp) { + respTruncateCollection = resp; + } + @Override public void getCollectionStatistics(io.milvus.grpc.GetCollectionStatisticsRequest request, io.grpc.stub.StreamObserver responseObserver) { diff --git a/sdk-core/src/test/java/io/milvus/v2/BaseTest.java b/sdk-core/src/test/java/io/milvus/v2/BaseTest.java index fb2e16f19..7c8018a02 100644 --- a/sdk-core/src/test/java/io/milvus/v2/BaseTest.java +++ b/sdk-core/src/test/java/io/milvus/v2/BaseTest.java @@ -111,6 +111,7 @@ public void setUp() { when(blockingStub.releaseCollection(any())).thenReturn(successStatus); when(blockingStub.getLoadState(any())).thenReturn(GetLoadStateResponse.newBuilder().setState(LoadState.LoadStateLoaded).setStatus(successStatus).build()); when(blockingStub.dropCollection(any())).thenReturn(successStatus); + when(blockingStub.truncateCollection(any())).thenReturn(TruncateCollectionResponse.newBuilder().setStatus(successStatus).build()); when(blockingStub.hasCollection(any())).thenReturn(trueResponse); when(blockingStub.describeCollection(any())).thenReturn(describeCollectionResponse); when(blockingStub.renameCollection(any())).thenReturn(successStatus); diff --git a/sdk-core/src/test/java/io/milvus/v2/service/collection/CollectionTest.java b/sdk-core/src/test/java/io/milvus/v2/service/collection/CollectionTest.java index c832ca60d..e9beed976 100644 --- a/sdk-core/src/test/java/io/milvus/v2/service/collection/CollectionTest.java +++ b/sdk-core/src/test/java/io/milvus/v2/service/collection/CollectionTest.java @@ -140,6 +140,14 @@ void testDropCollection() { client_v2.dropCollection(req); } + @Test + void testTruncateCollection() { + TruncateCollectionReq req = TruncateCollectionReq.builder() + .collectionName("test") + .build(); + client_v2.truncateCollection(req); + } + @Test void testHasCollection() { HasCollectionReq req = HasCollectionReq.builder()