Browse Source

AlterCollection/AlterIndex for V2 (#952)

Signed-off-by: yhmo <yihua.mo@zilliz.com>
groot 1 year ago
parent
commit
58f7ffdfbb

+ 21 - 12
src/main/java/io/milvus/v2/client/MilvusClientV2.java

@@ -25,26 +25,19 @@ import io.milvus.orm.iterator.QueryIterator;
 import io.milvus.orm.iterator.SearchIterator;
 import io.milvus.v2.service.collection.CollectionService;
 import io.milvus.v2.service.collection.request.*;
-import io.milvus.v2.service.collection.response.DescribeCollectionResp;
-import io.milvus.v2.service.collection.response.GetCollectionStatsResp;
-import io.milvus.v2.service.collection.response.ListCollectionsResp;
+import io.milvus.v2.service.collection.response.*;
 import io.milvus.v2.service.index.IndexService;
-import io.milvus.v2.service.index.request.CreateIndexReq;
-import io.milvus.v2.service.index.request.DescribeIndexReq;
-import io.milvus.v2.service.index.request.DropIndexReq;
-import io.milvus.v2.service.index.request.ListIndexesReq;
-import io.milvus.v2.service.index.response.DescribeIndexResp;
+import io.milvus.v2.service.index.request.*;
+import io.milvus.v2.service.index.response.*;
 import io.milvus.v2.service.partition.PartitionService;
 import io.milvus.v2.service.partition.request.*;
 import io.milvus.v2.service.rbac.RoleService;
 import io.milvus.v2.service.rbac.UserService;
 import io.milvus.v2.service.rbac.request.*;
-import io.milvus.v2.service.rbac.response.DescribeRoleResp;
-import io.milvus.v2.service.rbac.response.DescribeUserResp;
+import io.milvus.v2.service.rbac.response.*;
 import io.milvus.v2.service.utility.UtilityService;
 import io.milvus.v2.service.utility.request.*;
-import io.milvus.v2.service.utility.response.DescribeAliasResp;
-import io.milvus.v2.service.utility.response.ListAliasResp;
+import io.milvus.v2.service.utility.response.*;
 import io.milvus.v2.service.vector.VectorService;
 import io.milvus.v2.service.vector.request.*;
 import io.milvus.v2.service.vector.response.*;
@@ -161,6 +154,14 @@ public class MilvusClientV2 {
     public void dropCollection(DropCollectionReq request) {
         collectionService.dropCollection(this.blockingStub, request);
     }
+    /**
+     * Alter a collection in Milvus.
+     *
+     * @param request alter collection request
+     */
+    public void alterCollection(AlterCollectionReq request) {
+        collectionService.alterCollection(this.blockingStub, request);
+    }
     /**
      * Checks whether a collection exists in Milvus.
      *
@@ -239,6 +240,14 @@ public class MilvusClientV2 {
     public void dropIndex(DropIndexReq request) {
         indexService.dropIndex(this.blockingStub, request);
     }
+    /**
+     * Alter an index in Milvus.
+     *
+     * @param request alter index request
+     */
+    public void alterIndex(AlterIndexReq request) {
+        indexService.alterIndex(this.blockingStub, request);
+    }
     /**
      * Checks whether an index exists for a specified field in a collection in Milvus.
      *

+ 48 - 28
src/main/java/io/milvus/v2/service/collection/CollectionService.java

@@ -26,14 +26,15 @@ import io.milvus.v2.exception.ErrorCode;
 import io.milvus.v2.exception.MilvusClientException;
 import io.milvus.v2.service.BaseService;
 import io.milvus.v2.service.collection.request.*;
-import io.milvus.v2.service.collection.response.DescribeCollectionResp;
-import io.milvus.v2.service.collection.response.GetCollectionStatsResp;
-import io.milvus.v2.service.collection.response.ListCollectionsResp;
+import io.milvus.v2.service.collection.response.*;
 import io.milvus.v2.service.index.IndexService;
 import io.milvus.v2.service.index.request.CreateIndexReq;
 import io.milvus.v2.utils.SchemaUtils;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 
 import java.util.Collections;
+import java.util.List;
 
 public class CollectionService extends BaseService {
     public IndexService indexService = new IndexService();
@@ -143,10 +144,10 @@ public class CollectionService extends BaseService {
         }
     }
 
-    public ListCollectionsResp listCollections(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub) {
+    public ListCollectionsResp listCollections(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub) {
         ShowCollectionsRequest showCollectionsRequest = ShowCollectionsRequest.newBuilder()
                 .build();
-        ShowCollectionsResponse response = milvusServiceBlockingStub.showCollections(showCollectionsRequest);
+        ShowCollectionsResponse response = blockingStub.showCollections(showCollectionsRequest);
         ListCollectionsResp listCollectionsResp = ListCollectionsResp.builder()
                 .collectionNames(response.getCollectionNamesList())
                 .build();
@@ -154,35 +155,54 @@ public class CollectionService extends BaseService {
         return listCollectionsResp;
     }
 
-    public void dropCollection(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, DropCollectionReq request) {
+    public void dropCollection(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, DropCollectionReq request) {
 
         String title = String.format("DropCollectionRequest collectionName:%s", request.getCollectionName());
         DropCollectionRequest dropCollectionRequest = DropCollectionRequest.newBuilder()
                 .setCollectionName(request.getCollectionName())
                 .build();
-        Status status = milvusServiceBlockingStub.dropCollection(dropCollectionRequest);
+        Status status = blockingStub.dropCollection(dropCollectionRequest);
         rpcUtils.handleResponse(title, status);
 
         if (request.getAsync()) {
-            WaitForDropCollection(milvusServiceBlockingStub, request);
+            WaitForDropCollection(blockingStub, request);
         }
     }
 
-    public Boolean hasCollection(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, HasCollectionReq request) {
+    public void alterCollection(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, AlterCollectionReq request) {
+        String title = String.format("AlterCollectionRequest collectionName:%s", request.getCollectionName());
+        AlterCollectionRequest.Builder builder = AlterCollectionRequest.newBuilder();
+        List<KeyValuePair> propertiesList = ParamUtils.AssembleKvPair(request.getProperties());
+        if (CollectionUtils.isNotEmpty(propertiesList)) {
+            propertiesList.forEach(builder::addProperties);
+        }
+        if (StringUtils.isNotEmpty(request.getDatabaseName())) {
+            builder.setDbName(request.getDatabaseName());
+        }
+
+        AlterCollectionRequest alterCollectionRequest = builder
+                .setCollectionName(request.getCollectionName())
+                .build();
+
+        Status response = blockingStub.alterCollection(alterCollectionRequest);
+        rpcUtils.handleResponse(title, response);
+    }
+
+    public Boolean hasCollection(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, HasCollectionReq request) {
         HasCollectionRequest hasCollectionRequest = HasCollectionRequest.newBuilder()
                 .setCollectionName(request.getCollectionName())
                 .build();
-        BoolResponse response = milvusServiceBlockingStub.hasCollection(hasCollectionRequest);
+        BoolResponse response = blockingStub.hasCollection(hasCollectionRequest);
         rpcUtils.handleResponse("HasCollectionRequest", response.getStatus());
         return response.getValue();
     }
 
-    public DescribeCollectionResp describeCollection(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, DescribeCollectionReq request) {
+    public DescribeCollectionResp describeCollection(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, DescribeCollectionReq request) {
         String title = String.format("DescribeCollectionRequest collectionName:%s", request.getCollectionName());
         DescribeCollectionRequest describeCollectionRequest = DescribeCollectionRequest.newBuilder()
                 .setCollectionName(request.getCollectionName())
                 .build();
-        DescribeCollectionResponse response = milvusServiceBlockingStub.describeCollection(describeCollectionRequest);
+        DescribeCollectionResponse response = blockingStub.describeCollection(describeCollectionRequest);
         rpcUtils.handleResponse(title, response.getStatus());
         return convertDescCollectionResp(response);
     }
@@ -203,42 +223,42 @@ public class CollectionService extends BaseService {
         return describeCollectionResp;
     }
 
-    public void renameCollection(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, RenameCollectionReq request) {
+    public void renameCollection(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, RenameCollectionReq request) {
         String title = String.format("RenameCollectionRequest collectionName:%s", request.getCollectionName());
         RenameCollectionRequest renameCollectionRequest = RenameCollectionRequest.newBuilder()
                 .setOldName(request.getCollectionName())
                 .setNewName(request.getNewCollectionName())
                 .build();
-        Status status = milvusServiceBlockingStub.renameCollection(renameCollectionRequest);
+        Status status = blockingStub.renameCollection(renameCollectionRequest);
         rpcUtils.handleResponse(title, status);
     }
 
-    public void loadCollection(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, LoadCollectionReq request) {
+    public void loadCollection(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, LoadCollectionReq request) {
         String title = String.format("LoadCollectionRequest collectionName:%s", request.getCollectionName());
         LoadCollectionRequest loadCollectionRequest = LoadCollectionRequest.newBuilder()
                 .setCollectionName(request.getCollectionName())
                 .setReplicaNumber(request.getNumReplicas())
                 .build();
-        Status status = milvusServiceBlockingStub.loadCollection(loadCollectionRequest);
+        Status status = blockingStub.loadCollection(loadCollectionRequest);
         rpcUtils.handleResponse(title, status);
         if (request.getAsync()) {
-            WaitForLoadCollection(milvusServiceBlockingStub, request);
+            WaitForLoadCollection(blockingStub, request);
         }
     }
 
-    public void releaseCollection(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, ReleaseCollectionReq request) {
+    public void releaseCollection(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, ReleaseCollectionReq request) {
         String title = String.format("ReleaseCollectionRequest collectionName:%s", request.getCollectionName());
         ReleaseCollectionRequest releaseCollectionRequest = ReleaseCollectionRequest.newBuilder()
                 .setCollectionName(request.getCollectionName())
                 .build();
-        Status status = milvusServiceBlockingStub.releaseCollection(releaseCollectionRequest);
+        Status status = blockingStub.releaseCollection(releaseCollectionRequest);
         rpcUtils.handleResponse(title, status);
         if (request.getAsync()) {
-            waitForCollectionRelease(milvusServiceBlockingStub, request);
+            waitForCollectionRelease(blockingStub, request);
         }
     }
 
-    public Boolean getLoadState(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, GetLoadStateReq request) {
+    public Boolean getLoadState(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, GetLoadStateReq request) {
         // getLoadState
         String title = String.format("GetLoadStateRequest collectionName:%s", request.getCollectionName());
         GetLoadStateRequest getLoadStateRequest = GetLoadStateRequest.newBuilder()
@@ -247,7 +267,7 @@ public class CollectionService extends BaseService {
         if(request.getPartitionName() != null) {
             getLoadStateRequest = getLoadStateRequest.toBuilder().addPartitionNames(request.getPartitionName()).build();
         }
-        GetLoadStateResponse response = milvusServiceBlockingStub.getLoadState(getLoadStateRequest);
+        GetLoadStateResponse response = blockingStub.getLoadState(getLoadStateRequest);
         rpcUtils.handleResponse(title, response.getStatus());
         return response.getState() == LoadState.LoadStateLoaded;
     }
@@ -271,13 +291,13 @@ public class CollectionService extends BaseService {
                 .build();
     }
 
-    public void waitForCollectionRelease(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, ReleaseCollectionReq request) {
+    public void waitForCollectionRelease(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, ReleaseCollectionReq request) {
         boolean isLoaded = true;
         long startTime = System.currentTimeMillis(); // Capture start time/ Timeout in milliseconds (60 seconds)
 
         while (isLoaded) {
             // Call the getLoadState method
-            isLoaded = getLoadState(milvusServiceBlockingStub, GetLoadStateReq.builder().collectionName(request.getCollectionName()).build());
+            isLoaded = getLoadState(blockingStub, GetLoadStateReq.builder().collectionName(request.getCollectionName()).build());
             if (isLoaded) {
                 // Check if timeout is exceeded
                 if (System.currentTimeMillis() - startTime > request.getTimeout()) {
@@ -295,13 +315,13 @@ public class CollectionService extends BaseService {
         }
     }
 
-    private void WaitForLoadCollection(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, LoadCollectionReq request) {
+    private void WaitForLoadCollection(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, LoadCollectionReq request) {
         boolean isLoaded = false;
         long startTime = System.currentTimeMillis(); // Capture start time/ Timeout in milliseconds (60 seconds)
 
         while (!isLoaded) {
             // Call the getLoadState method
-            isLoaded = getLoadState(milvusServiceBlockingStub, GetLoadStateReq.builder().collectionName(request.getCollectionName()).build());
+            isLoaded = getLoadState(blockingStub, GetLoadStateReq.builder().collectionName(request.getCollectionName()).build());
             if (!isLoaded) {
                 // Check if timeout is exceeded
                 if (System.currentTimeMillis() - startTime > request.getTimeout()) {
@@ -319,13 +339,13 @@ public class CollectionService extends BaseService {
         }
     }
 
-    private void WaitForDropCollection(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, DropCollectionReq request) {
+    private void WaitForDropCollection(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, DropCollectionReq request) {
         boolean hasCollection = true;
         long startTime = System.currentTimeMillis(); // Capture start time/ Timeout in milliseconds (60 seconds)
 
         while (hasCollection) {
             // Call the getLoadState method
-            hasCollection = hasCollection(milvusServiceBlockingStub, HasCollectionReq.builder().collectionName(request.getCollectionName()).build());
+            hasCollection = hasCollection(blockingStub, HasCollectionReq.builder().collectionName(request.getCollectionName()).build());
             if (hasCollection) {
                 // Check if timeout is exceeded
                 if (System.currentTimeMillis() - startTime > request.getTimeout()) {

+ 19 - 0
src/main/java/io/milvus/v2/service/collection/request/AlterCollectionReq.java

@@ -0,0 +1,19 @@
+package io.milvus.v2.service.collection.request;
+
+import io.milvus.exception.ParamException;
+import io.milvus.param.Constant;
+import lombok.Builder;
+import lombok.Data;
+import lombok.experimental.SuperBuilder;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Data
+@SuperBuilder
+public class AlterCollectionReq {
+    private String collectionName;
+    private String databaseName;
+    @Builder.Default
+    private final Map<String, String> properties = new HashMap<>();
+}

+ 32 - 11
src/main/java/io/milvus/v2/service/index/IndexService.java

@@ -20,15 +20,15 @@
 package io.milvus.v2.service.index;
 
 import io.milvus.grpc.*;
+import io.milvus.param.ParamUtils;
 import io.milvus.v2.common.IndexParam;
 import io.milvus.v2.exception.ErrorCode;
 import io.milvus.v2.exception.MilvusClientException;
 import io.milvus.v2.service.BaseService;
-import io.milvus.v2.service.index.request.CreateIndexReq;
-import io.milvus.v2.service.index.request.DescribeIndexReq;
-import io.milvus.v2.service.index.request.DropIndexReq;
-import io.milvus.v2.service.index.request.ListIndexesReq;
-import io.milvus.v2.service.index.response.DescribeIndexResp;
+import io.milvus.v2.service.index.request.*;
+import io.milvus.v2.service.index.response.*;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -36,7 +36,7 @@ import java.util.stream.Collectors;
 
 public class IndexService extends BaseService {
 
-    public void createIndex(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, CreateIndexReq request) {
+    public void createIndex(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, CreateIndexReq request) {
         for(IndexParam indexParam : request.getIndexParams()) {
             String title = String.format("CreateIndexRequest collectionName:%s, fieldName:%s",
                     request.getCollectionName(), indexParam.getFieldName());
@@ -69,12 +69,12 @@ public class IndexService extends BaseService {
                 }
             }
 
-            Status status = milvusServiceBlockingStub.createIndex(createIndexRequest);
+            Status status = blockingStub.createIndex(createIndexRequest);
             rpcUtils.handleResponse(title, status);
         }
     }
 
-    public void dropIndex(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, DropIndexReq request) {
+    public void dropIndex(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, DropIndexReq request) {
         String title = String.format("DropIndexRequest collectionName:%s, fieldName:%s, indexName:%s",
                 request.getCollectionName(), request.getFieldName(), request.getIndexName());
         DropIndexRequest dropIndexRequest = DropIndexRequest.newBuilder()
@@ -83,11 +83,32 @@ public class IndexService extends BaseService {
                 .setIndexName(request.getIndexName() == null ? "" : request.getIndexName())
                 .build();
 
-        Status status = milvusServiceBlockingStub.dropIndex(dropIndexRequest);
+        Status status = blockingStub.dropIndex(dropIndexRequest);
         rpcUtils.handleResponse(title, status);
     }
+    
+    public void alterIndex(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, AlterIndexReq request) {
+        String title = String.format("AlterIndexRequest collectionName:%s, indexName:%s",
+                request.getCollectionName(), request.getIndexName());
+        AlterIndexRequest.Builder builder = AlterIndexRequest.newBuilder();
+        List<KeyValuePair> propertiesList = ParamUtils.AssembleKvPair(request.getProperties());
+        if (CollectionUtils.isNotEmpty(propertiesList)) {
+            propertiesList.forEach(builder::addExtraParams);
+        }
+        if (StringUtils.isNotEmpty(request.getDatabaseName())) {
+            builder.setDbName(request.getDatabaseName());
+        }
+
+        AlterIndexRequest alterIndexRequest = builder
+                .setCollectionName(request.getCollectionName())
+                .setIndexName(request.getIndexName())
+                .build();
+
+        Status response = blockingStub.alterIndex(alterIndexRequest);
+        rpcUtils.handleResponse(title, response);
+    }
 
-    public DescribeIndexResp describeIndex(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, DescribeIndexReq request) {
+    public DescribeIndexResp describeIndex(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, DescribeIndexReq request) {
         String title = String.format("DescribeIndexRequest collectionName:%s, fieldName:%s, indexName:%s",
                 request.getCollectionName(), request.getFieldName(), request.getIndexName());
         DescribeIndexRequest describeIndexRequest = DescribeIndexRequest.newBuilder()
@@ -96,7 +117,7 @@ public class IndexService extends BaseService {
                 .setIndexName(request.getIndexName() == null ? "" : request.getIndexName())
                 .build();
 
-        DescribeIndexResponse response = milvusServiceBlockingStub.describeIndex(describeIndexRequest);
+        DescribeIndexResponse response = blockingStub.describeIndex(describeIndexRequest);
         rpcUtils.handleResponse(title, response.getStatus());
         List<IndexDescription> indexs = response.getIndexDescriptionsList().stream().filter(index -> index.getIndexName().equals(request.getIndexName()) || index.getFieldName().equals(request.getFieldName())).collect(Collectors.toList());
         if (indexs.isEmpty()) {

+ 19 - 0
src/main/java/io/milvus/v2/service/index/request/AlterIndexReq.java

@@ -0,0 +1,19 @@
+package io.milvus.v2.service.index.request;
+
+import io.milvus.param.Constant;
+import lombok.Builder;
+import lombok.Data;
+import lombok.experimental.SuperBuilder;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Data
+@SuperBuilder
+public class AlterIndexReq {
+    private String collectionName;
+    private String databaseName;
+    private String indexName;
+    @Builder.Default
+    private Map<String, String> properties = new HashMap<>();
+}

+ 14 - 14
src/main/java/io/milvus/v2/service/vector/VectorService.java

@@ -124,7 +124,7 @@ public class VectorService extends BaseService {
                 .build();
     }
 
-    public QueryResp query(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, QueryReq request) {
+    public QueryResp query(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, QueryReq request) {
         String title = String.format("QueryRequest collectionName:%s", request.getCollectionName());
         if (request.getFilter() == null && request.getIds() == null) {
             throw new MilvusClientException(ErrorCode.INVALID_PARAMS, "filter and ids can't be null at the same time");
@@ -132,12 +132,12 @@ public class VectorService extends BaseService {
             throw new MilvusClientException(ErrorCode.INVALID_PARAMS, "filter and ids can't be set at the same time");
         }
 
-        DescribeCollectionResp descR = collectionService.describeCollection(milvusServiceBlockingStub, DescribeCollectionReq.builder().collectionName(request.getCollectionName()).build());
+        DescribeCollectionResp descR = collectionService.describeCollection(blockingStub, DescribeCollectionReq.builder().collectionName(request.getCollectionName()).build());
 
         if (request.getIds() != null && request.getFilter() == null) {
             request.setFilter(vectorUtils.getExprById(descR.getPrimaryFieldName(), request.getIds()));
         }
-        QueryResults response = milvusServiceBlockingStub.query(vectorUtils.ConvertToGrpcQueryRequest(request));
+        QueryResults response = blockingStub.query(vectorUtils.ConvertToGrpcQueryRequest(request));
         rpcUtils.handleResponse(title, response.getStatus());
 
         return QueryResp.builder()
@@ -146,14 +146,14 @@ public class VectorService extends BaseService {
 
     }
 
-    public SearchResp search(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, SearchReq request) {
+    public SearchResp search(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, SearchReq request) {
         String title = String.format("SearchRequest collectionName:%s", request.getCollectionName());
 
-        //checkCollectionExist(milvusServiceBlockingStub, request.getCollectionName());
+        //checkCollectionExist(blockingStub, request.getCollectionName());
 
         SearchRequest searchRequest = vectorUtils.ConvertToGrpcSearchRequest(request);
 
-        SearchResults response = milvusServiceBlockingStub.search(searchRequest);
+        SearchResults response = blockingStub.search(searchRequest);
 
         rpcUtils.handleResponse(title, response.getStatus());
 
@@ -162,14 +162,14 @@ public class VectorService extends BaseService {
                 .build();
     }
 
-    public SearchResp hybridSearch(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, HybridSearchReq request) {
+    public SearchResp hybridSearch(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, HybridSearchReq request) {
         String title = String.format("HybridSearchRequest collectionName:%s", request.getCollectionName());
 
-        //checkCollectionExist(milvusServiceBlockingStub, request.getCollectionName());
+        //checkCollectionExist(blockingStub, request.getCollectionName());
 
         HybridSearchRequest searchRequest = vectorUtils.ConvertToGrpcHybridSearchRequest(request);
 
-        SearchResults response = milvusServiceBlockingStub.hybridSearch(searchRequest);
+        SearchResults response = blockingStub.hybridSearch(searchRequest);
 
         rpcUtils.handleResponse(title, response.getStatus());
 
@@ -194,14 +194,14 @@ public class VectorService extends BaseService {
         return new SearchIterator(request, blockingStub, pkField);
     }
 
-    public DeleteResp delete(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, DeleteReq request) {
+    public DeleteResp delete(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, DeleteReq request) {
         String title = String.format("DeleteRequest collectionName:%s", request.getCollectionName());
 
         if (request.getFilter() != null && request.getIds() != null) {
             throw new MilvusClientException(ErrorCode.INVALID_PARAMS, "filter and ids can't be set at the same time");
         }
 
-        DescribeCollectionResponse descResp = getCollectionInfo(milvusServiceBlockingStub, "", request.getCollectionName());
+        DescribeCollectionResponse descResp = getCollectionInfo(blockingStub, "", request.getCollectionName());
         DescribeCollectionResp respR = CollectionService.convertDescCollectionResp(descResp);
         if (request.getFilter() == null) {
             request.setFilter(vectorUtils.getExprById(respR.getPrimaryFieldName(), request.getIds()));
@@ -211,14 +211,14 @@ public class VectorService extends BaseService {
                 .setPartitionName(request.getPartitionName())
                 .setExpr(request.getFilter())
                 .build();
-        MutationResult response = milvusServiceBlockingStub.delete(deleteRequest);
+        MutationResult response = blockingStub.delete(deleteRequest);
         rpcUtils.handleResponse(title, response.getStatus());
         return DeleteResp.builder()
                 .deleteCnt(response.getDeleteCnt())
                 .build();
     }
 
-    public GetResp get(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, GetReq request) {
+    public GetResp get(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, GetReq request) {
         String title = String.format("GetRequest collectionName:%s", request.getCollectionName());
         logger.debug(title);
         QueryReq queryReq = QueryReq.builder()
@@ -229,7 +229,7 @@ public class VectorService extends BaseService {
             queryReq.setOutputFields(request.getOutputFields());
         }
         // call query to get the result
-        QueryResp queryResp = query(milvusServiceBlockingStub, queryReq);
+        QueryResp queryResp = query(blockingStub, queryReq);
 
         return GetResp.builder()
                 .getResults(queryResp.getQueryResults())

+ 18 - 0
src/test/java/io/milvus/v2/client/MilvusClientV2DockerTest.java

@@ -27,6 +27,7 @@ import io.milvus.common.clientenum.ConsistencyLevelEnum;
 import io.milvus.common.utils.Float16Utils;
 import io.milvus.orm.iterator.QueryIterator;
 import io.milvus.orm.iterator.SearchIterator;
+import io.milvus.param.Constant;
 import io.milvus.response.QueryResultsWrapper;
 import io.milvus.v2.common.ConsistencyLevel;
 import io.milvus.v2.common.DataType;
@@ -34,6 +35,7 @@ import io.milvus.v2.common.IndexParam;
 import io.milvus.v2.exception.MilvusClientException;
 import io.milvus.v2.service.collection.request.*;
 import io.milvus.v2.service.collection.response.DescribeCollectionResp;
+import io.milvus.v2.service.index.request.AlterIndexReq;
 import io.milvus.v2.service.index.request.CreateIndexReq;
 import io.milvus.v2.service.index.request.DescribeIndexReq;
 import io.milvus.v2.service.index.request.DropIndexReq;
@@ -1183,12 +1185,28 @@ class MilvusClientV2DockerTest {
                 .collectionName(randomCollectionName)
                 .build());
 
+        Map<String, String> properties = new HashMap<>();
+        properties.put(Constant.TTL_SECONDS, "10");
+        properties.put(Constant.MMAP_ENABLED, "true");
+        client.alterCollection(AlterCollectionReq.builder()
+                .collectionName(randomCollectionName)
+                .properties(properties)
+                .build());
+
         DescribeIndexResp descResp = client.describeIndex(DescribeIndexReq.builder()
                 .collectionName(randomCollectionName)
                 .fieldName("vector")
                 .build());
         Assertions.assertEquals(IndexParam.IndexType.AUTOINDEX.name(), descResp.getIndexType());
 
+        properties.clear();
+        properties.put(Constant.MMAP_ENABLED, "true");
+        client.alterIndex(AlterIndexReq.builder()
+                .collectionName(randomCollectionName)
+                .indexName(descResp.getIndexName())
+                .properties(properties)
+                .build());
+
         client.dropIndex(DropIndexReq.builder()
                 .collectionName(randomCollectionName)
                 .fieldName("vector")