From a8b78f11c36ee39f238d4eeffc8977c50d8d8d92 Mon Sep 17 00:00:00 2001
From: "cai.zhang" <cai.zhang@zilliz.com>
Date: Wed, 23 Dec 2020 19:06:11 +0800
Subject: [PATCH] Update proto about index

Signed-off-by: cai.zhang <cai.zhang@zilliz.com>
---
 internal/core/src/pb/service_msg.pb.cc     | 1203 +++++++++++++++-----
 internal/core/src/pb/service_msg.pb.h      |  598 ++++++++--
 internal/proto/service.proto               |    4 +-
 internal/proto/service_msg.proto           |   14 +-
 internal/proto/servicepb/service.pb.go     |   83 +-
 internal/proto/servicepb/service_msg.pb.go |  219 ++--
 internal/proxy/grpc_service.go             |  103 +-
 internal/proxy/proxy_test.go               |   39 +
 internal/proxy/task.go                     |    4 +-
 9 files changed, 1811 insertions(+), 456 deletions(-)

diff --git a/internal/core/src/pb/service_msg.pb.cc b/internal/core/src/pb/service_msg.pb.cc
index e9a22fb39..3df052810 100644
--- a/internal/core/src/pb/service_msg.pb.cc
+++ b/internal/core/src/pb/service_msg.pb.cc
@@ -92,6 +92,14 @@ class IndexParamDefaultTypeInternal {
  public:
   ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<IndexParam> _instance;
 } _IndexParam_default_instance_;
+class DescribeIndexRequestDefaultTypeInternal {
+ public:
+  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<DescribeIndexRequest> _instance;
+} _DescribeIndexRequest_default_instance_;
+class DescribeIndexProgressRequestDefaultTypeInternal {
+ public:
+  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<DescribeIndexProgressRequest> _instance;
+} _DescribeIndexProgressRequest_default_instance_;
 class DescribeIndexResponseDefaultTypeInternal {
  public:
   ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<DescribeIndexResponse> _instance;
@@ -145,6 +153,34 @@ static void InitDefaultsscc_info_CollectionName_service_5fmsg_2eproto() {
 ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_CollectionName_service_5fmsg_2eproto =
     {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsscc_info_CollectionName_service_5fmsg_2eproto}, {}};
 
+static void InitDefaultsscc_info_DescribeIndexProgressRequest_service_5fmsg_2eproto() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::milvus::proto::service::_DescribeIndexProgressRequest_default_instance_;
+    new (ptr) ::milvus::proto::service::DescribeIndexProgressRequest();
+    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::milvus::proto::service::DescribeIndexProgressRequest::InitAsDefaultInstance();
+}
+
+::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_DescribeIndexProgressRequest_service_5fmsg_2eproto =
+    {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsscc_info_DescribeIndexProgressRequest_service_5fmsg_2eproto}, {}};
+
+static void InitDefaultsscc_info_DescribeIndexRequest_service_5fmsg_2eproto() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::milvus::proto::service::_DescribeIndexRequest_default_instance_;
+    new (ptr) ::milvus::proto::service::DescribeIndexRequest();
+    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::milvus::proto::service::DescribeIndexRequest::InitAsDefaultInstance();
+}
+
+::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_DescribeIndexRequest_service_5fmsg_2eproto =
+    {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsscc_info_DescribeIndexRequest_service_5fmsg_2eproto}, {}};
+
 static void InitDefaultsscc_info_DescribeIndexResponse_service_5fmsg_2eproto() {
   GOOGLE_PROTOBUF_VERIFY_VERSION;
 
@@ -369,7 +405,7 @@ static void InitDefaultsscc_info_SysConfigResponse_service_5fmsg_2eproto() {
     {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsscc_info_SysConfigResponse_service_5fmsg_2eproto}, {
       &scc_info_Status_common_2eproto.base,}};
 
-static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_service_5fmsg_2eproto[18];
+static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_service_5fmsg_2eproto[20];
 static const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* file_level_enum_descriptors_service_5fmsg_2eproto[1];
 static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_service_5fmsg_2eproto = nullptr;
 
@@ -503,6 +539,20 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_service_5fmsg_2eproto::offsets
   PROTOBUF_FIELD_OFFSET(::milvus::proto::service::IndexParam, field_name_),
   PROTOBUF_FIELD_OFFSET(::milvus::proto::service::IndexParam, extra_params_),
   ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexRequest, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexRequest, collection_name_),
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexRequest, field_name_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexProgressRequest, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexProgressRequest, collection_name_),
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexProgressRequest, field_name_),
+  ~0u,  // no _has_bits_
   PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexResponse, _internal_metadata_),
   ~0u,  // no _extensions_
   ~0u,  // no _oneof_case_
@@ -510,7 +560,6 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_service_5fmsg_2eproto::offsets
   PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexResponse, status_),
   PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexResponse, collection_name_),
   PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexResponse, field_name_),
-  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexResponse, index_name_),
   PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexResponse, extra_params_),
 };
 static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
@@ -531,7 +580,9 @@ static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOB
   { 105, -1, sizeof(::milvus::proto::service::Hits)},
   { 113, -1, sizeof(::milvus::proto::service::QueryResult)},
   { 120, -1, sizeof(::milvus::proto::service::IndexParam)},
-  { 128, -1, sizeof(::milvus::proto::service::DescribeIndexResponse)},
+  { 128, -1, sizeof(::milvus::proto::service::DescribeIndexRequest)},
+  { 135, -1, sizeof(::milvus::proto::service::DescribeIndexProgressRequest)},
+  { 142, -1, sizeof(::milvus::proto::service::DescribeIndexResponse)},
 };
 
 static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
@@ -552,6 +603,8 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] =
   reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::service::_Hits_default_instance_),
   reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::service::_QueryResult_default_instance_),
   reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::service::_IndexParam_default_instance_),
+  reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::service::_DescribeIndexRequest_default_instance_),
+  reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::service::_DescribeIndexProgressRequest_default_instance_),
   reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::service::_DescribeIndexResponse_default_instance_),
 };
 
@@ -598,24 +651,29 @@ const char descriptor_table_protodef_service_5fmsg_2eproto[] PROTOBUF_SECTION_VA
   "\014\n\004hits\030\002 \003(\014\"r\n\nIndexParam\022\027\n\017collectio"
   "n_name\030\001 \001(\t\022\022\n\nfield_name\030\002 \001(\t\0227\n\014extr"
   "a_params\030\003 \003(\0132!.milvus.proto.common.Key"
-  "ValuePair\"\276\001\n\025DescribeIndexResponse\022+\n\006s"
-  "tatus\030\001 \001(\0132\033.milvus.proto.common.Status"
-  "\022\027\n\017collection_name\030\002 \001(\t\022\022\n\nfield_name\030"
-  "\003 \001(\t\022\022\n\nindex_name\030\004 \001(\t\0227\n\014extra_param"
-  "s\030\005 \003(\0132!.milvus.proto.common.KeyValuePa"
-  "ir*@\n\017PlaceholderType\022\010\n\004NONE\020\000\022\021\n\rVECTO"
-  "R_BINARY\020d\022\020\n\014VECTOR_FLOAT\020eBCZAgithub.c"
-  "om/zilliztech/milvus-distributed/interna"
-  "l/proto/servicepbb\006proto3"
+  "ValuePair\"C\n\024DescribeIndexRequest\022\027\n\017col"
+  "lection_name\030\001 \001(\t\022\022\n\nfield_name\030\002 \001(\t\"K"
+  "\n\034DescribeIndexProgressRequest\022\027\n\017collec"
+  "tion_name\030\001 \001(\t\022\022\n\nfield_name\030\002 \001(\t\"\252\001\n\025"
+  "DescribeIndexResponse\022+\n\006status\030\001 \001(\0132\033."
+  "milvus.proto.common.Status\022\027\n\017collection"
+  "_name\030\002 \001(\t\022\022\n\nfield_name\030\003 \001(\t\0227\n\014extra"
+  "_params\030\004 \003(\0132!.milvus.proto.common.KeyV"
+  "aluePair*@\n\017PlaceholderType\022\010\n\004NONE\020\000\022\021\n"
+  "\rVECTOR_BINARY\020d\022\020\n\014VECTOR_FLOAT\020eBCZAgi"
+  "thub.com/zilliztech/milvus-distributed/i"
+  "nternal/proto/servicepbb\006proto3"
   ;
 static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_service_5fmsg_2eproto_deps[2] = {
   &::descriptor_table_common_2eproto,
   &::descriptor_table_schema_2eproto,
 };
-static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_service_5fmsg_2eproto_sccs[18] = {
+static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_service_5fmsg_2eproto_sccs[20] = {
   &scc_info_BoolResponse_service_5fmsg_2eproto.base,
   &scc_info_CollectionDescription_service_5fmsg_2eproto.base,
   &scc_info_CollectionName_service_5fmsg_2eproto.base,
+  &scc_info_DescribeIndexProgressRequest_service_5fmsg_2eproto.base,
+  &scc_info_DescribeIndexRequest_service_5fmsg_2eproto.base,
   &scc_info_DescribeIndexResponse_service_5fmsg_2eproto.base,
   &scc_info_Hits_service_5fmsg_2eproto.base,
   &scc_info_IndexParam_service_5fmsg_2eproto.base,
@@ -635,10 +693,10 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_ser
 static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_service_5fmsg_2eproto_once;
 static bool descriptor_table_service_5fmsg_2eproto_initialized = false;
 const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_service_5fmsg_2eproto = {
-  &descriptor_table_service_5fmsg_2eproto_initialized, descriptor_table_protodef_service_5fmsg_2eproto, "service_msg.proto", 2025,
-  &descriptor_table_service_5fmsg_2eproto_once, descriptor_table_service_5fmsg_2eproto_sccs, descriptor_table_service_5fmsg_2eproto_deps, 18, 2,
+  &descriptor_table_service_5fmsg_2eproto_initialized, descriptor_table_protodef_service_5fmsg_2eproto, "service_msg.proto", 2151,
+  &descriptor_table_service_5fmsg_2eproto_once, descriptor_table_service_5fmsg_2eproto_sccs, descriptor_table_service_5fmsg_2eproto_deps, 20, 2,
   schemas, file_default_instances, TableStruct_service_5fmsg_2eproto::offsets,
-  file_level_metadata_service_5fmsg_2eproto, 18, file_level_enum_descriptors_service_5fmsg_2eproto, file_level_service_descriptors_service_5fmsg_2eproto,
+  file_level_metadata_service_5fmsg_2eproto, 20, file_level_enum_descriptors_service_5fmsg_2eproto, file_level_service_descriptors_service_5fmsg_2eproto,
 };
 
 // Force running AddDescriptors() at dynamic initialization time.
@@ -6754,37 +6812,20 @@ void IndexParam::InternalSwap(IndexParam* other) {
 
 // ===================================================================
 
-void DescribeIndexResponse::InitAsDefaultInstance() {
-  ::milvus::proto::service::_DescribeIndexResponse_default_instance_._instance.get_mutable()->status_ = const_cast< ::milvus::proto::common::Status*>(
-      ::milvus::proto::common::Status::internal_default_instance());
+void DescribeIndexRequest::InitAsDefaultInstance() {
 }
-class DescribeIndexResponse::_Internal {
+class DescribeIndexRequest::_Internal {
  public:
-  static const ::milvus::proto::common::Status& status(const DescribeIndexResponse* msg);
 };
 
-const ::milvus::proto::common::Status&
-DescribeIndexResponse::_Internal::status(const DescribeIndexResponse* msg) {
-  return *msg->status_;
-}
-void DescribeIndexResponse::clear_status() {
-  if (GetArenaNoVirtual() == nullptr && status_ != nullptr) {
-    delete status_;
-  }
-  status_ = nullptr;
-}
-void DescribeIndexResponse::clear_extra_params() {
-  extra_params_.Clear();
-}
-DescribeIndexResponse::DescribeIndexResponse()
+DescribeIndexRequest::DescribeIndexRequest()
   : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
   SharedCtor();
-  // @@protoc_insertion_point(constructor:milvus.proto.service.DescribeIndexResponse)
+  // @@protoc_insertion_point(constructor:milvus.proto.service.DescribeIndexRequest)
 }
-DescribeIndexResponse::DescribeIndexResponse(const DescribeIndexResponse& from)
+DescribeIndexRequest::DescribeIndexRequest(const DescribeIndexRequest& from)
   : ::PROTOBUF_NAMESPACE_ID::Message(),
-      _internal_metadata_(nullptr),
-      extra_params_(from.extra_params_) {
+      _internal_metadata_(nullptr) {
   _internal_metadata_.MergeFrom(from._internal_metadata_);
   collection_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
   if (!from.collection_name().empty()) {
@@ -6794,112 +6835,67 @@ DescribeIndexResponse::DescribeIndexResponse(const DescribeIndexResponse& from)
   if (!from.field_name().empty()) {
     field_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.field_name_);
   }
-  index_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-  if (!from.index_name().empty()) {
-    index_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.index_name_);
-  }
-  if (from.has_status()) {
-    status_ = new ::milvus::proto::common::Status(*from.status_);
-  } else {
-    status_ = nullptr;
-  }
-  // @@protoc_insertion_point(copy_constructor:milvus.proto.service.DescribeIndexResponse)
+  // @@protoc_insertion_point(copy_constructor:milvus.proto.service.DescribeIndexRequest)
 }
 
-void DescribeIndexResponse::SharedCtor() {
-  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_DescribeIndexResponse_service_5fmsg_2eproto.base);
+void DescribeIndexRequest::SharedCtor() {
+  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_DescribeIndexRequest_service_5fmsg_2eproto.base);
   collection_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
   field_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-  index_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-  status_ = nullptr;
 }
 
-DescribeIndexResponse::~DescribeIndexResponse() {
-  // @@protoc_insertion_point(destructor:milvus.proto.service.DescribeIndexResponse)
+DescribeIndexRequest::~DescribeIndexRequest() {
+  // @@protoc_insertion_point(destructor:milvus.proto.service.DescribeIndexRequest)
   SharedDtor();
 }
 
-void DescribeIndexResponse::SharedDtor() {
+void DescribeIndexRequest::SharedDtor() {
   collection_name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
   field_name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-  index_name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-  if (this != internal_default_instance()) delete status_;
 }
 
-void DescribeIndexResponse::SetCachedSize(int size) const {
+void DescribeIndexRequest::SetCachedSize(int size) const {
   _cached_size_.Set(size);
 }
-const DescribeIndexResponse& DescribeIndexResponse::default_instance() {
-  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_DescribeIndexResponse_service_5fmsg_2eproto.base);
+const DescribeIndexRequest& DescribeIndexRequest::default_instance() {
+  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_DescribeIndexRequest_service_5fmsg_2eproto.base);
   return *internal_default_instance();
 }
 
 
-void DescribeIndexResponse::Clear() {
-// @@protoc_insertion_point(message_clear_start:milvus.proto.service.DescribeIndexResponse)
+void DescribeIndexRequest::Clear() {
+// @@protoc_insertion_point(message_clear_start:milvus.proto.service.DescribeIndexRequest)
   ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  extra_params_.Clear();
   collection_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
   field_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-  index_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-  if (GetArenaNoVirtual() == nullptr && status_ != nullptr) {
-    delete status_;
-  }
-  status_ = nullptr;
   _internal_metadata_.Clear();
 }
 
 #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
-const char* DescribeIndexResponse::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
+const char* DescribeIndexRequest::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
 #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
   while (!ctx->Done(&ptr)) {
     ::PROTOBUF_NAMESPACE_ID::uint32 tag;
     ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
     CHK_(ptr);
     switch (tag >> 3) {
-      // .milvus.proto.common.Status status = 1;
+      // string collection_name = 1;
       case 1:
         if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
-          ptr = ctx->ParseMessage(mutable_status(), ptr);
+          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_collection_name(), ptr, ctx, "milvus.proto.service.DescribeIndexRequest.collection_name");
           CHK_(ptr);
         } else goto handle_unusual;
         continue;
-      // string collection_name = 2;
+      // string field_name = 2;
       case 2:
         if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
-          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_collection_name(), ptr, ctx, "milvus.proto.service.DescribeIndexResponse.collection_name");
-          CHK_(ptr);
-        } else goto handle_unusual;
-        continue;
-      // string field_name = 3;
-      case 3:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
-          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_field_name(), ptr, ctx, "milvus.proto.service.DescribeIndexResponse.field_name");
+          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_field_name(), ptr, ctx, "milvus.proto.service.DescribeIndexRequest.field_name");
           CHK_(ptr);
         } else goto handle_unusual;
         continue;
-      // string index_name = 4;
-      case 4:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) {
-          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_index_name(), ptr, ctx, "milvus.proto.service.DescribeIndexResponse.index_name");
-          CHK_(ptr);
-        } else goto handle_unusual;
-        continue;
-      // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
-      case 5:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 42)) {
-          ptr -= 1;
-          do {
-            ptr += 1;
-            ptr = ctx->ParseMessage(add_extra_params(), ptr);
-            CHK_(ptr);
-            if (!ctx->DataAvailable(ptr)) break;
-          } while (::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<::PROTOBUF_NAMESPACE_ID::uint8>(ptr) == 42);
-        } else goto handle_unusual;
-        continue;
       default: {
       handle_unusual:
         if ((tag & 7) == 4 || tag == 0) {
@@ -6920,77 +6916,40 @@ failure:
 #undef CHK_
 }
 #else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
-bool DescribeIndexResponse::MergePartialFromCodedStream(
+bool DescribeIndexRequest::MergePartialFromCodedStream(
     ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) {
 #define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
   ::PROTOBUF_NAMESPACE_ID::uint32 tag;
-  // @@protoc_insertion_point(parse_start:milvus.proto.service.DescribeIndexResponse)
+  // @@protoc_insertion_point(parse_start:milvus.proto.service.DescribeIndexRequest)
   for (;;) {
     ::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
     tag = p.first;
     if (!p.second) goto handle_unusual;
     switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // .milvus.proto.common.Status status = 1;
+      // string collection_name = 1;
       case 1: {
         if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (10 & 0xFF)) {
-          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage(
-               input, mutable_status()));
-        } else {
-          goto handle_unusual;
-        }
-        break;
-      }
-
-      // string collection_name = 2;
-      case 2: {
-        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (18 & 0xFF)) {
           DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
                 input, this->mutable_collection_name()));
           DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
             this->collection_name().data(), static_cast<int>(this->collection_name().length()),
             ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
-            "milvus.proto.service.DescribeIndexResponse.collection_name"));
+            "milvus.proto.service.DescribeIndexRequest.collection_name"));
         } else {
           goto handle_unusual;
         }
         break;
       }
 
-      // string field_name = 3;
-      case 3: {
-        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (26 & 0xFF)) {
+      // string field_name = 2;
+      case 2: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (18 & 0xFF)) {
           DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
                 input, this->mutable_field_name()));
           DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
             this->field_name().data(), static_cast<int>(this->field_name().length()),
             ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
-            "milvus.proto.service.DescribeIndexResponse.field_name"));
-        } else {
-          goto handle_unusual;
-        }
-        break;
-      }
-
-      // string index_name = 4;
-      case 4: {
-        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (34 & 0xFF)) {
-          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
-                input, this->mutable_index_name()));
-          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-            this->index_name().data(), static_cast<int>(this->index_name().length()),
-            ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
-            "milvus.proto.service.DescribeIndexResponse.index_name"));
-        } else {
-          goto handle_unusual;
-        }
-        break;
-      }
-
-      // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
-      case 5: {
-        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (42 & 0xFF)) {
-          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage(
-                input, add_extra_params()));
+            "milvus.proto.service.DescribeIndexRequest.field_name"));
         } else {
           goto handle_unusual;
         }
@@ -7009,137 +6968,86 @@ bool DescribeIndexResponse::MergePartialFromCodedStream(
     }
   }
 success:
-  // @@protoc_insertion_point(parse_success:milvus.proto.service.DescribeIndexResponse)
+  // @@protoc_insertion_point(parse_success:milvus.proto.service.DescribeIndexRequest)
   return true;
 failure:
-  // @@protoc_insertion_point(parse_failure:milvus.proto.service.DescribeIndexResponse)
+  // @@protoc_insertion_point(parse_failure:milvus.proto.service.DescribeIndexRequest)
   return false;
 #undef DO_
 }
 #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
 
-void DescribeIndexResponse::SerializeWithCachedSizes(
+void DescribeIndexRequest::SerializeWithCachedSizes(
     ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:milvus.proto.service.DescribeIndexResponse)
+  // @@protoc_insertion_point(serialize_start:milvus.proto.service.DescribeIndexRequest)
   ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
   (void) cached_has_bits;
 
-  // .milvus.proto.common.Status status = 1;
-  if (this->has_status()) {
-    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray(
-      1, _Internal::status(this), output);
-  }
-
-  // string collection_name = 2;
+  // string collection_name = 1;
   if (this->collection_name().size() > 0) {
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
       this->collection_name().data(), static_cast<int>(this->collection_name().length()),
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "milvus.proto.service.DescribeIndexResponse.collection_name");
+      "milvus.proto.service.DescribeIndexRequest.collection_name");
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
-      2, this->collection_name(), output);
+      1, this->collection_name(), output);
   }
 
-  // string field_name = 3;
+  // string field_name = 2;
   if (this->field_name().size() > 0) {
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
       this->field_name().data(), static_cast<int>(this->field_name().length()),
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "milvus.proto.service.DescribeIndexResponse.field_name");
-    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
-      3, this->field_name(), output);
-  }
-
-  // string index_name = 4;
-  if (this->index_name().size() > 0) {
-    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->index_name().data(), static_cast<int>(this->index_name().length()),
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "milvus.proto.service.DescribeIndexResponse.index_name");
+      "milvus.proto.service.DescribeIndexRequest.field_name");
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
-      4, this->index_name(), output);
-  }
-
-  // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
-  for (unsigned int i = 0,
-      n = static_cast<unsigned int>(this->extra_params_size()); i < n; i++) {
-    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray(
-      5,
-      this->extra_params(static_cast<int>(i)),
-      output);
+      2, this->field_name(), output);
   }
 
   if (_internal_metadata_.have_unknown_fields()) {
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields(
         _internal_metadata_.unknown_fields(), output);
   }
-  // @@protoc_insertion_point(serialize_end:milvus.proto.service.DescribeIndexResponse)
+  // @@protoc_insertion_point(serialize_end:milvus.proto.service.DescribeIndexRequest)
 }
 
-::PROTOBUF_NAMESPACE_ID::uint8* DescribeIndexResponse::InternalSerializeWithCachedSizesToArray(
+::PROTOBUF_NAMESPACE_ID::uint8* DescribeIndexRequest::InternalSerializeWithCachedSizesToArray(
     ::PROTOBUF_NAMESPACE_ID::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:milvus.proto.service.DescribeIndexResponse)
+  // @@protoc_insertion_point(serialize_to_array_start:milvus.proto.service.DescribeIndexRequest)
   ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
   (void) cached_has_bits;
 
-  // .milvus.proto.common.Status status = 1;
-  if (this->has_status()) {
-    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessageToArray(
-        1, _Internal::status(this), target);
-  }
-
-  // string collection_name = 2;
+  // string collection_name = 1;
   if (this->collection_name().size() > 0) {
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
       this->collection_name().data(), static_cast<int>(this->collection_name().length()),
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "milvus.proto.service.DescribeIndexResponse.collection_name");
+      "milvus.proto.service.DescribeIndexRequest.collection_name");
     target =
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
-        2, this->collection_name(), target);
+        1, this->collection_name(), target);
   }
 
-  // string field_name = 3;
+  // string field_name = 2;
   if (this->field_name().size() > 0) {
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
       this->field_name().data(), static_cast<int>(this->field_name().length()),
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "milvus.proto.service.DescribeIndexResponse.field_name");
-    target =
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
-        3, this->field_name(), target);
-  }
-
-  // string index_name = 4;
-  if (this->index_name().size() > 0) {
-    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->index_name().data(), static_cast<int>(this->index_name().length()),
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "milvus.proto.service.DescribeIndexResponse.index_name");
+      "milvus.proto.service.DescribeIndexRequest.field_name");
     target =
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
-        4, this->index_name(), target);
-  }
-
-  // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
-  for (unsigned int i = 0,
-      n = static_cast<unsigned int>(this->extra_params_size()); i < n; i++) {
-    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessageToArray(
-        5, this->extra_params(static_cast<int>(i)), target);
+        2, this->field_name(), target);
   }
 
   if (_internal_metadata_.have_unknown_fields()) {
     target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields(), target);
   }
-  // @@protoc_insertion_point(serialize_to_array_end:milvus.proto.service.DescribeIndexResponse)
+  // @@protoc_insertion_point(serialize_to_array_end:milvus.proto.service.DescribeIndexRequest)
   return target;
 }
 
-size_t DescribeIndexResponse::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:milvus.proto.service.DescribeIndexResponse)
+size_t DescribeIndexRequest::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:milvus.proto.service.DescribeIndexRequest)
   size_t total_size = 0;
 
   if (_internal_metadata_.have_unknown_fields()) {
@@ -7151,73 +7059,47 @@ size_t DescribeIndexResponse::ByteSizeLong() const {
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
-  {
-    unsigned int count = static_cast<unsigned int>(this->extra_params_size());
-    total_size += 1UL * count;
-    for (unsigned int i = 0; i < count; i++) {
-      total_size +=
-        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-          this->extra_params(static_cast<int>(i)));
-    }
-  }
-
-  // string collection_name = 2;
+  // string collection_name = 1;
   if (this->collection_name().size() > 0) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
         this->collection_name());
   }
 
-  // string field_name = 3;
+  // string field_name = 2;
   if (this->field_name().size() > 0) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
         this->field_name());
   }
 
-  // string index_name = 4;
-  if (this->index_name().size() > 0) {
-    total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-        this->index_name());
-  }
-
-  // .milvus.proto.common.Status status = 1;
-  if (this->has_status()) {
-    total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-        *status_);
-  }
-
   int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
   SetCachedSize(cached_size);
   return total_size;
 }
 
-void DescribeIndexResponse::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-// @@protoc_insertion_point(generalized_merge_from_start:milvus.proto.service.DescribeIndexResponse)
+void DescribeIndexRequest::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:milvus.proto.service.DescribeIndexRequest)
   GOOGLE_DCHECK_NE(&from, this);
-  const DescribeIndexResponse* source =
-      ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<DescribeIndexResponse>(
+  const DescribeIndexRequest* source =
+      ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<DescribeIndexRequest>(
           &from);
   if (source == nullptr) {
-  // @@protoc_insertion_point(generalized_merge_from_cast_fail:milvus.proto.service.DescribeIndexResponse)
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:milvus.proto.service.DescribeIndexRequest)
     ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
   } else {
-  // @@protoc_insertion_point(generalized_merge_from_cast_success:milvus.proto.service.DescribeIndexResponse)
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:milvus.proto.service.DescribeIndexRequest)
     MergeFrom(*source);
   }
 }
 
-void DescribeIndexResponse::MergeFrom(const DescribeIndexResponse& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:milvus.proto.service.DescribeIndexResponse)
+void DescribeIndexRequest::MergeFrom(const DescribeIndexRequest& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:milvus.proto.service.DescribeIndexRequest)
   GOOGLE_DCHECK_NE(&from, this);
   _internal_metadata_.MergeFrom(from._internal_metadata_);
   ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
   (void) cached_has_bits;
 
-  extra_params_.MergeFrom(from.extra_params_);
   if (from.collection_name().size() > 0) {
 
     collection_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.collection_name_);
@@ -7226,42 +7108,819 @@ void DescribeIndexResponse::MergeFrom(const DescribeIndexResponse& from) {
 
     field_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.field_name_);
   }
-  if (from.index_name().size() > 0) {
-
-    index_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.index_name_);
-  }
-  if (from.has_status()) {
-    mutable_status()->::milvus::proto::common::Status::MergeFrom(from.status());
-  }
 }
 
-void DescribeIndexResponse::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-// @@protoc_insertion_point(generalized_copy_from_start:milvus.proto.service.DescribeIndexResponse)
+void DescribeIndexRequest::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:milvus.proto.service.DescribeIndexRequest)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-void DescribeIndexResponse::CopyFrom(const DescribeIndexResponse& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:milvus.proto.service.DescribeIndexResponse)
+void DescribeIndexRequest::CopyFrom(const DescribeIndexRequest& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:milvus.proto.service.DescribeIndexRequest)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool DescribeIndexResponse::IsInitialized() const {
+bool DescribeIndexRequest::IsInitialized() const {
   return true;
 }
 
-void DescribeIndexResponse::InternalSwap(DescribeIndexResponse* other) {
+void DescribeIndexRequest::InternalSwap(DescribeIndexRequest* other) {
   using std::swap;
   _internal_metadata_.Swap(&other->_internal_metadata_);
-  CastToBase(&extra_params_)->InternalSwap(CastToBase(&other->extra_params_));
   collection_name_.Swap(&other->collection_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
     GetArenaNoVirtual());
   field_name_.Swap(&other->field_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
     GetArenaNoVirtual());
-  index_name_.Swap(&other->index_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata DescribeIndexRequest::GetMetadata() const {
+  return GetMetadataStatic();
+}
+
+
+// ===================================================================
+
+void DescribeIndexProgressRequest::InitAsDefaultInstance() {
+}
+class DescribeIndexProgressRequest::_Internal {
+ public:
+};
+
+DescribeIndexProgressRequest::DescribeIndexProgressRequest()
+  : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:milvus.proto.service.DescribeIndexProgressRequest)
+}
+DescribeIndexProgressRequest::DescribeIndexProgressRequest(const DescribeIndexProgressRequest& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message(),
+      _internal_metadata_(nullptr) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  collection_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (!from.collection_name().empty()) {
+    collection_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.collection_name_);
+  }
+  field_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (!from.field_name().empty()) {
+    field_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.field_name_);
+  }
+  // @@protoc_insertion_point(copy_constructor:milvus.proto.service.DescribeIndexProgressRequest)
+}
+
+void DescribeIndexProgressRequest::SharedCtor() {
+  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_DescribeIndexProgressRequest_service_5fmsg_2eproto.base);
+  collection_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  field_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+
+DescribeIndexProgressRequest::~DescribeIndexProgressRequest() {
+  // @@protoc_insertion_point(destructor:milvus.proto.service.DescribeIndexProgressRequest)
+  SharedDtor();
+}
+
+void DescribeIndexProgressRequest::SharedDtor() {
+  collection_name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  field_name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+
+void DescribeIndexProgressRequest::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const DescribeIndexProgressRequest& DescribeIndexProgressRequest::default_instance() {
+  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_DescribeIndexProgressRequest_service_5fmsg_2eproto.base);
+  return *internal_default_instance();
+}
+
+
+void DescribeIndexProgressRequest::Clear() {
+// @@protoc_insertion_point(message_clear_start:milvus.proto.service.DescribeIndexProgressRequest)
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  collection_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  field_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  _internal_metadata_.Clear();
+}
+
+#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+const char* DescribeIndexProgressRequest::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
+    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
+    CHK_(ptr);
+    switch (tag >> 3) {
+      // string collection_name = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
+          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_collection_name(), ptr, ctx, "milvus.proto.service.DescribeIndexProgressRequest.collection_name");
+          CHK_(ptr);
+        } else goto handle_unusual;
+        continue;
+      // string field_name = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
+          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_field_name(), ptr, ctx, "milvus.proto.service.DescribeIndexProgressRequest.field_name");
+          CHK_(ptr);
+        } else goto handle_unusual;
+        continue;
+      default: {
+      handle_unusual:
+        if ((tag & 7) == 4 || tag == 0) {
+          ctx->SetLastTag(tag);
+          goto success;
+        }
+        ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
+        CHK_(ptr != nullptr);
+        continue;
+      }
+    }  // switch
+  }  // while
+success:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto success;
+#undef CHK_
+}
+#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+bool DescribeIndexProgressRequest::MergePartialFromCodedStream(
+    ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::PROTOBUF_NAMESPACE_ID::uint32 tag;
+  // @@protoc_insertion_point(parse_start:milvus.proto.service.DescribeIndexProgressRequest)
+  for (;;) {
+    ::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // string collection_name = 1;
+      case 1: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (10 & 0xFF)) {
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
+                input, this->mutable_collection_name()));
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+            this->collection_name().data(), static_cast<int>(this->collection_name().length()),
+            ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
+            "milvus.proto.service.DescribeIndexProgressRequest.collection_name"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string field_name = 2;
+      case 2: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (18 & 0xFF)) {
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
+                input, this->mutable_field_name()));
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+            this->field_name().data(), static_cast<int>(this->field_name().length()),
+            ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
+            "milvus.proto.service.DescribeIndexProgressRequest.field_name"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:milvus.proto.service.DescribeIndexProgressRequest)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:milvus.proto.service.DescribeIndexProgressRequest)
+  return false;
+#undef DO_
+}
+#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+
+void DescribeIndexProgressRequest::SerializeWithCachedSizes(
+    ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:milvus.proto.service.DescribeIndexProgressRequest)
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string collection_name = 1;
+  if (this->collection_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->collection_name().data(), static_cast<int>(this->collection_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.DescribeIndexProgressRequest.collection_name");
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
+      1, this->collection_name(), output);
+  }
+
+  // string field_name = 2;
+  if (this->field_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->field_name().data(), static_cast<int>(this->field_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.DescribeIndexProgressRequest.field_name");
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
+      2, this->field_name(), output);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields(
+        _internal_metadata_.unknown_fields(), output);
+  }
+  // @@protoc_insertion_point(serialize_end:milvus.proto.service.DescribeIndexProgressRequest)
+}
+
+::PROTOBUF_NAMESPACE_ID::uint8* DescribeIndexProgressRequest::InternalSerializeWithCachedSizesToArray(
+    ::PROTOBUF_NAMESPACE_ID::uint8* target) const {
+  // @@protoc_insertion_point(serialize_to_array_start:milvus.proto.service.DescribeIndexProgressRequest)
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string collection_name = 1;
+  if (this->collection_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->collection_name().data(), static_cast<int>(this->collection_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.DescribeIndexProgressRequest.collection_name");
+    target =
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
+        1, this->collection_name(), target);
+  }
+
+  // string field_name = 2;
+  if (this->field_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->field_name().data(), static_cast<int>(this->field_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.DescribeIndexProgressRequest.field_name");
+    target =
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
+        2, this->field_name(), target);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields(), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:milvus.proto.service.DescribeIndexProgressRequest)
+  return target;
+}
+
+size_t DescribeIndexProgressRequest::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:milvus.proto.service.DescribeIndexProgressRequest)
+  size_t total_size = 0;
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::ComputeUnknownFieldsSize(
+        _internal_metadata_.unknown_fields());
+  }
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // string collection_name = 1;
+  if (this->collection_name().size() > 0) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->collection_name());
+  }
+
+  // string field_name = 2;
+  if (this->field_name().size() > 0) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->field_name());
+  }
+
+  int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void DescribeIndexProgressRequest::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:milvus.proto.service.DescribeIndexProgressRequest)
+  GOOGLE_DCHECK_NE(&from, this);
+  const DescribeIndexProgressRequest* source =
+      ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<DescribeIndexProgressRequest>(
+          &from);
+  if (source == nullptr) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:milvus.proto.service.DescribeIndexProgressRequest)
+    ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:milvus.proto.service.DescribeIndexProgressRequest)
+    MergeFrom(*source);
+  }
+}
+
+void DescribeIndexProgressRequest::MergeFrom(const DescribeIndexProgressRequest& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:milvus.proto.service.DescribeIndexProgressRequest)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from.collection_name().size() > 0) {
+
+    collection_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.collection_name_);
+  }
+  if (from.field_name().size() > 0) {
+
+    field_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.field_name_);
+  }
+}
+
+void DescribeIndexProgressRequest::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:milvus.proto.service.DescribeIndexProgressRequest)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void DescribeIndexProgressRequest::CopyFrom(const DescribeIndexProgressRequest& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:milvus.proto.service.DescribeIndexProgressRequest)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool DescribeIndexProgressRequest::IsInitialized() const {
+  return true;
+}
+
+void DescribeIndexProgressRequest::InternalSwap(DescribeIndexProgressRequest* other) {
+  using std::swap;
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+  collection_name_.Swap(&other->collection_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  field_name_.Swap(&other->field_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata DescribeIndexProgressRequest::GetMetadata() const {
+  return GetMetadataStatic();
+}
+
+
+// ===================================================================
+
+void DescribeIndexResponse::InitAsDefaultInstance() {
+  ::milvus::proto::service::_DescribeIndexResponse_default_instance_._instance.get_mutable()->status_ = const_cast< ::milvus::proto::common::Status*>(
+      ::milvus::proto::common::Status::internal_default_instance());
+}
+class DescribeIndexResponse::_Internal {
+ public:
+  static const ::milvus::proto::common::Status& status(const DescribeIndexResponse* msg);
+};
+
+const ::milvus::proto::common::Status&
+DescribeIndexResponse::_Internal::status(const DescribeIndexResponse* msg) {
+  return *msg->status_;
+}
+void DescribeIndexResponse::clear_status() {
+  if (GetArenaNoVirtual() == nullptr && status_ != nullptr) {
+    delete status_;
+  }
+  status_ = nullptr;
+}
+void DescribeIndexResponse::clear_extra_params() {
+  extra_params_.Clear();
+}
+DescribeIndexResponse::DescribeIndexResponse()
+  : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:milvus.proto.service.DescribeIndexResponse)
+}
+DescribeIndexResponse::DescribeIndexResponse(const DescribeIndexResponse& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message(),
+      _internal_metadata_(nullptr),
+      extra_params_(from.extra_params_) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  collection_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (!from.collection_name().empty()) {
+    collection_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.collection_name_);
+  }
+  field_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (!from.field_name().empty()) {
+    field_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.field_name_);
+  }
+  if (from.has_status()) {
+    status_ = new ::milvus::proto::common::Status(*from.status_);
+  } else {
+    status_ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:milvus.proto.service.DescribeIndexResponse)
+}
+
+void DescribeIndexResponse::SharedCtor() {
+  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_DescribeIndexResponse_service_5fmsg_2eproto.base);
+  collection_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  field_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  status_ = nullptr;
+}
+
+DescribeIndexResponse::~DescribeIndexResponse() {
+  // @@protoc_insertion_point(destructor:milvus.proto.service.DescribeIndexResponse)
+  SharedDtor();
+}
+
+void DescribeIndexResponse::SharedDtor() {
+  collection_name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  field_name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (this != internal_default_instance()) delete status_;
+}
+
+void DescribeIndexResponse::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const DescribeIndexResponse& DescribeIndexResponse::default_instance() {
+  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_DescribeIndexResponse_service_5fmsg_2eproto.base);
+  return *internal_default_instance();
+}
+
+
+void DescribeIndexResponse::Clear() {
+// @@protoc_insertion_point(message_clear_start:milvus.proto.service.DescribeIndexResponse)
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  extra_params_.Clear();
+  collection_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  field_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (GetArenaNoVirtual() == nullptr && status_ != nullptr) {
+    delete status_;
+  }
+  status_ = nullptr;
+  _internal_metadata_.Clear();
+}
+
+#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+const char* DescribeIndexResponse::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
+    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
+    CHK_(ptr);
+    switch (tag >> 3) {
+      // .milvus.proto.common.Status status = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
+          ptr = ctx->ParseMessage(mutable_status(), ptr);
+          CHK_(ptr);
+        } else goto handle_unusual;
+        continue;
+      // string collection_name = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
+          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_collection_name(), ptr, ctx, "milvus.proto.service.DescribeIndexResponse.collection_name");
+          CHK_(ptr);
+        } else goto handle_unusual;
+        continue;
+      // string field_name = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
+          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_field_name(), ptr, ctx, "milvus.proto.service.DescribeIndexResponse.field_name");
+          CHK_(ptr);
+        } else goto handle_unusual;
+        continue;
+      // repeated .milvus.proto.common.KeyValuePair extra_params = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(add_extra_params(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<::PROTOBUF_NAMESPACE_ID::uint8>(ptr) == 34);
+        } else goto handle_unusual;
+        continue;
+      default: {
+      handle_unusual:
+        if ((tag & 7) == 4 || tag == 0) {
+          ctx->SetLastTag(tag);
+          goto success;
+        }
+        ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
+        CHK_(ptr != nullptr);
+        continue;
+      }
+    }  // switch
+  }  // while
+success:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto success;
+#undef CHK_
+}
+#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+bool DescribeIndexResponse::MergePartialFromCodedStream(
+    ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::PROTOBUF_NAMESPACE_ID::uint32 tag;
+  // @@protoc_insertion_point(parse_start:milvus.proto.service.DescribeIndexResponse)
+  for (;;) {
+    ::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // .milvus.proto.common.Status status = 1;
+      case 1: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (10 & 0xFF)) {
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage(
+               input, mutable_status()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string collection_name = 2;
+      case 2: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (18 & 0xFF)) {
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
+                input, this->mutable_collection_name()));
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+            this->collection_name().data(), static_cast<int>(this->collection_name().length()),
+            ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
+            "milvus.proto.service.DescribeIndexResponse.collection_name"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string field_name = 3;
+      case 3: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (26 & 0xFF)) {
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
+                input, this->mutable_field_name()));
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+            this->field_name().data(), static_cast<int>(this->field_name().length()),
+            ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
+            "milvus.proto.service.DescribeIndexResponse.field_name"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // repeated .milvus.proto.common.KeyValuePair extra_params = 4;
+      case 4: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (34 & 0xFF)) {
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage(
+                input, add_extra_params()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:milvus.proto.service.DescribeIndexResponse)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:milvus.proto.service.DescribeIndexResponse)
+  return false;
+#undef DO_
+}
+#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+
+void DescribeIndexResponse::SerializeWithCachedSizes(
+    ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:milvus.proto.service.DescribeIndexResponse)
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .milvus.proto.common.Status status = 1;
+  if (this->has_status()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray(
+      1, _Internal::status(this), output);
+  }
+
+  // string collection_name = 2;
+  if (this->collection_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->collection_name().data(), static_cast<int>(this->collection_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.DescribeIndexResponse.collection_name");
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
+      2, this->collection_name(), output);
+  }
+
+  // string field_name = 3;
+  if (this->field_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->field_name().data(), static_cast<int>(this->field_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.DescribeIndexResponse.field_name");
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
+      3, this->field_name(), output);
+  }
+
+  // repeated .milvus.proto.common.KeyValuePair extra_params = 4;
+  for (unsigned int i = 0,
+      n = static_cast<unsigned int>(this->extra_params_size()); i < n; i++) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray(
+      4,
+      this->extra_params(static_cast<int>(i)),
+      output);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields(
+        _internal_metadata_.unknown_fields(), output);
+  }
+  // @@protoc_insertion_point(serialize_end:milvus.proto.service.DescribeIndexResponse)
+}
+
+::PROTOBUF_NAMESPACE_ID::uint8* DescribeIndexResponse::InternalSerializeWithCachedSizesToArray(
+    ::PROTOBUF_NAMESPACE_ID::uint8* target) const {
+  // @@protoc_insertion_point(serialize_to_array_start:milvus.proto.service.DescribeIndexResponse)
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .milvus.proto.common.Status status = 1;
+  if (this->has_status()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        1, _Internal::status(this), target);
+  }
+
+  // string collection_name = 2;
+  if (this->collection_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->collection_name().data(), static_cast<int>(this->collection_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.DescribeIndexResponse.collection_name");
+    target =
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
+        2, this->collection_name(), target);
+  }
+
+  // string field_name = 3;
+  if (this->field_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->field_name().data(), static_cast<int>(this->field_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.DescribeIndexResponse.field_name");
+    target =
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
+        3, this->field_name(), target);
+  }
+
+  // repeated .milvus.proto.common.KeyValuePair extra_params = 4;
+  for (unsigned int i = 0,
+      n = static_cast<unsigned int>(this->extra_params_size()); i < n; i++) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        4, this->extra_params(static_cast<int>(i)), target);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields(), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:milvus.proto.service.DescribeIndexResponse)
+  return target;
+}
+
+size_t DescribeIndexResponse::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:milvus.proto.service.DescribeIndexResponse)
+  size_t total_size = 0;
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::ComputeUnknownFieldsSize(
+        _internal_metadata_.unknown_fields());
+  }
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // repeated .milvus.proto.common.KeyValuePair extra_params = 4;
+  {
+    unsigned int count = static_cast<unsigned int>(this->extra_params_size());
+    total_size += 1UL * count;
+    for (unsigned int i = 0; i < count; i++) {
+      total_size +=
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+          this->extra_params(static_cast<int>(i)));
+    }
+  }
+
+  // string collection_name = 2;
+  if (this->collection_name().size() > 0) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->collection_name());
+  }
+
+  // string field_name = 3;
+  if (this->field_name().size() > 0) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->field_name());
+  }
+
+  // .milvus.proto.common.Status status = 1;
+  if (this->has_status()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *status_);
+  }
+
+  int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void DescribeIndexResponse::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:milvus.proto.service.DescribeIndexResponse)
+  GOOGLE_DCHECK_NE(&from, this);
+  const DescribeIndexResponse* source =
+      ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<DescribeIndexResponse>(
+          &from);
+  if (source == nullptr) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:milvus.proto.service.DescribeIndexResponse)
+    ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:milvus.proto.service.DescribeIndexResponse)
+    MergeFrom(*source);
+  }
+}
+
+void DescribeIndexResponse::MergeFrom(const DescribeIndexResponse& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:milvus.proto.service.DescribeIndexResponse)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  extra_params_.MergeFrom(from.extra_params_);
+  if (from.collection_name().size() > 0) {
+
+    collection_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.collection_name_);
+  }
+  if (from.field_name().size() > 0) {
+
+    field_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.field_name_);
+  }
+  if (from.has_status()) {
+    mutable_status()->::milvus::proto::common::Status::MergeFrom(from.status());
+  }
+}
+
+void DescribeIndexResponse::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:milvus.proto.service.DescribeIndexResponse)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void DescribeIndexResponse::CopyFrom(const DescribeIndexResponse& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:milvus.proto.service.DescribeIndexResponse)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool DescribeIndexResponse::IsInitialized() const {
+  return true;
+}
+
+void DescribeIndexResponse::InternalSwap(DescribeIndexResponse* other) {
+  using std::swap;
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+  CastToBase(&extra_params_)->InternalSwap(CastToBase(&other->extra_params_));
+  collection_name_.Swap(&other->collection_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  field_name_.Swap(&other->field_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
     GetArenaNoVirtual());
   swap(status_, other->status_);
 }
@@ -7327,6 +7986,12 @@ template<> PROTOBUF_NOINLINE ::milvus::proto::service::QueryResult* Arena::Creat
 template<> PROTOBUF_NOINLINE ::milvus::proto::service::IndexParam* Arena::CreateMaybeMessage< ::milvus::proto::service::IndexParam >(Arena* arena) {
   return Arena::CreateInternal< ::milvus::proto::service::IndexParam >(arena);
 }
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::DescribeIndexRequest* Arena::CreateMaybeMessage< ::milvus::proto::service::DescribeIndexRequest >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::DescribeIndexRequest >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::DescribeIndexProgressRequest* Arena::CreateMaybeMessage< ::milvus::proto::service::DescribeIndexProgressRequest >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::DescribeIndexProgressRequest >(arena);
+}
 template<> PROTOBUF_NOINLINE ::milvus::proto::service::DescribeIndexResponse* Arena::CreateMaybeMessage< ::milvus::proto::service::DescribeIndexResponse >(Arena* arena) {
   return Arena::CreateInternal< ::milvus::proto::service::DescribeIndexResponse >(arena);
 }
diff --git a/internal/core/src/pb/service_msg.pb.h b/internal/core/src/pb/service_msg.pb.h
index c813ded83..668377f2a 100644
--- a/internal/core/src/pb/service_msg.pb.h
+++ b/internal/core/src/pb/service_msg.pb.h
@@ -50,7 +50,7 @@ struct TableStruct_service_5fmsg_2eproto {
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
   static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[]
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
-  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[18]
+  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[20]
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
   static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
   static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
@@ -69,6 +69,12 @@ extern CollectionDescriptionDefaultTypeInternal _CollectionDescription_default_i
 class CollectionName;
 class CollectionNameDefaultTypeInternal;
 extern CollectionNameDefaultTypeInternal _CollectionName_default_instance_;
+class DescribeIndexProgressRequest;
+class DescribeIndexProgressRequestDefaultTypeInternal;
+extern DescribeIndexProgressRequestDefaultTypeInternal _DescribeIndexProgressRequest_default_instance_;
+class DescribeIndexRequest;
+class DescribeIndexRequestDefaultTypeInternal;
+extern DescribeIndexRequestDefaultTypeInternal _DescribeIndexRequest_default_instance_;
 class DescribeIndexResponse;
 class DescribeIndexResponseDefaultTypeInternal;
 extern DescribeIndexResponseDefaultTypeInternal _DescribeIndexResponse_default_instance_;
@@ -121,6 +127,8 @@ PROTOBUF_NAMESPACE_OPEN
 template<> ::milvus::proto::service::BoolResponse* Arena::CreateMaybeMessage<::milvus::proto::service::BoolResponse>(Arena*);
 template<> ::milvus::proto::service::CollectionDescription* Arena::CreateMaybeMessage<::milvus::proto::service::CollectionDescription>(Arena*);
 template<> ::milvus::proto::service::CollectionName* Arena::CreateMaybeMessage<::milvus::proto::service::CollectionName>(Arena*);
+template<> ::milvus::proto::service::DescribeIndexProgressRequest* Arena::CreateMaybeMessage<::milvus::proto::service::DescribeIndexProgressRequest>(Arena*);
+template<> ::milvus::proto::service::DescribeIndexRequest* Arena::CreateMaybeMessage<::milvus::proto::service::DescribeIndexRequest>(Arena*);
 template<> ::milvus::proto::service::DescribeIndexResponse* Arena::CreateMaybeMessage<::milvus::proto::service::DescribeIndexResponse>(Arena*);
 template<> ::milvus::proto::service::Hits* Arena::CreateMaybeMessage<::milvus::proto::service::Hits>(Arena*);
 template<> ::milvus::proto::service::IndexParam* Arena::CreateMaybeMessage<::milvus::proto::service::IndexParam>(Arena*);
@@ -2825,6 +2833,306 @@ class IndexParam :
 };
 // -------------------------------------------------------------------
 
+class DescribeIndexRequest :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:milvus.proto.service.DescribeIndexRequest) */ {
+ public:
+  DescribeIndexRequest();
+  virtual ~DescribeIndexRequest();
+
+  DescribeIndexRequest(const DescribeIndexRequest& from);
+  DescribeIndexRequest(DescribeIndexRequest&& from) noexcept
+    : DescribeIndexRequest() {
+    *this = ::std::move(from);
+  }
+
+  inline DescribeIndexRequest& operator=(const DescribeIndexRequest& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline DescribeIndexRequest& operator=(DescribeIndexRequest&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return GetMetadataStatic().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return GetMetadataStatic().reflection;
+  }
+  static const DescribeIndexRequest& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const DescribeIndexRequest* internal_default_instance() {
+    return reinterpret_cast<const DescribeIndexRequest*>(
+               &_DescribeIndexRequest_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    17;
+
+  friend void swap(DescribeIndexRequest& a, DescribeIndexRequest& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(DescribeIndexRequest* other) {
+    if (other == this) return;
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline DescribeIndexRequest* New() const final {
+    return CreateMaybeMessage<DescribeIndexRequest>(nullptr);
+  }
+
+  DescribeIndexRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
+    return CreateMaybeMessage<DescribeIndexRequest>(arena);
+  }
+  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
+  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
+  void CopyFrom(const DescribeIndexRequest& from);
+  void MergeFrom(const DescribeIndexRequest& from);
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  #else
+  bool MergePartialFromCodedStream(
+      ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
+  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  void SerializeWithCachedSizes(
+      ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
+  ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
+      ::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  inline void SharedCtor();
+  inline void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(DescribeIndexRequest* other);
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "milvus.proto.service.DescribeIndexRequest";
+  }
+  private:
+  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
+    return nullptr;
+  }
+  inline void* MaybeArenaPtr() const {
+    return nullptr;
+  }
+  public:
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+  private:
+  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
+    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_service_5fmsg_2eproto);
+    return ::descriptor_table_service_5fmsg_2eproto.file_level_metadata[kIndexInFileMessages];
+  }
+
+  public:
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kCollectionNameFieldNumber = 1,
+    kFieldNameFieldNumber = 2,
+  };
+  // string collection_name = 1;
+  void clear_collection_name();
+  const std::string& collection_name() const;
+  void set_collection_name(const std::string& value);
+  void set_collection_name(std::string&& value);
+  void set_collection_name(const char* value);
+  void set_collection_name(const char* value, size_t size);
+  std::string* mutable_collection_name();
+  std::string* release_collection_name();
+  void set_allocated_collection_name(std::string* collection_name);
+
+  // string field_name = 2;
+  void clear_field_name();
+  const std::string& field_name() const;
+  void set_field_name(const std::string& value);
+  void set_field_name(std::string&& value);
+  void set_field_name(const char* value);
+  void set_field_name(const char* value, size_t size);
+  std::string* mutable_field_name();
+  std::string* release_field_name();
+  void set_allocated_field_name(std::string* field_name);
+
+  // @@protoc_insertion_point(class_scope:milvus.proto.service.DescribeIndexRequest)
+ private:
+  class _Internal;
+
+  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr collection_name_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr field_name_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_service_5fmsg_2eproto;
+};
+// -------------------------------------------------------------------
+
+class DescribeIndexProgressRequest :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:milvus.proto.service.DescribeIndexProgressRequest) */ {
+ public:
+  DescribeIndexProgressRequest();
+  virtual ~DescribeIndexProgressRequest();
+
+  DescribeIndexProgressRequest(const DescribeIndexProgressRequest& from);
+  DescribeIndexProgressRequest(DescribeIndexProgressRequest&& from) noexcept
+    : DescribeIndexProgressRequest() {
+    *this = ::std::move(from);
+  }
+
+  inline DescribeIndexProgressRequest& operator=(const DescribeIndexProgressRequest& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline DescribeIndexProgressRequest& operator=(DescribeIndexProgressRequest&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return GetMetadataStatic().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return GetMetadataStatic().reflection;
+  }
+  static const DescribeIndexProgressRequest& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const DescribeIndexProgressRequest* internal_default_instance() {
+    return reinterpret_cast<const DescribeIndexProgressRequest*>(
+               &_DescribeIndexProgressRequest_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    18;
+
+  friend void swap(DescribeIndexProgressRequest& a, DescribeIndexProgressRequest& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(DescribeIndexProgressRequest* other) {
+    if (other == this) return;
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline DescribeIndexProgressRequest* New() const final {
+    return CreateMaybeMessage<DescribeIndexProgressRequest>(nullptr);
+  }
+
+  DescribeIndexProgressRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
+    return CreateMaybeMessage<DescribeIndexProgressRequest>(arena);
+  }
+  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
+  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
+  void CopyFrom(const DescribeIndexProgressRequest& from);
+  void MergeFrom(const DescribeIndexProgressRequest& from);
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  #else
+  bool MergePartialFromCodedStream(
+      ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
+  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  void SerializeWithCachedSizes(
+      ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
+  ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
+      ::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  inline void SharedCtor();
+  inline void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(DescribeIndexProgressRequest* other);
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "milvus.proto.service.DescribeIndexProgressRequest";
+  }
+  private:
+  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
+    return nullptr;
+  }
+  inline void* MaybeArenaPtr() const {
+    return nullptr;
+  }
+  public:
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+  private:
+  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
+    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_service_5fmsg_2eproto);
+    return ::descriptor_table_service_5fmsg_2eproto.file_level_metadata[kIndexInFileMessages];
+  }
+
+  public:
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kCollectionNameFieldNumber = 1,
+    kFieldNameFieldNumber = 2,
+  };
+  // string collection_name = 1;
+  void clear_collection_name();
+  const std::string& collection_name() const;
+  void set_collection_name(const std::string& value);
+  void set_collection_name(std::string&& value);
+  void set_collection_name(const char* value);
+  void set_collection_name(const char* value, size_t size);
+  std::string* mutable_collection_name();
+  std::string* release_collection_name();
+  void set_allocated_collection_name(std::string* collection_name);
+
+  // string field_name = 2;
+  void clear_field_name();
+  const std::string& field_name() const;
+  void set_field_name(const std::string& value);
+  void set_field_name(std::string&& value);
+  void set_field_name(const char* value);
+  void set_field_name(const char* value, size_t size);
+  std::string* mutable_field_name();
+  std::string* release_field_name();
+  void set_allocated_field_name(std::string* field_name);
+
+  // @@protoc_insertion_point(class_scope:milvus.proto.service.DescribeIndexProgressRequest)
+ private:
+  class _Internal;
+
+  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr collection_name_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr field_name_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_service_5fmsg_2eproto;
+};
+// -------------------------------------------------------------------
+
 class DescribeIndexResponse :
     public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:milvus.proto.service.DescribeIndexResponse) */ {
  public:
@@ -2867,7 +3175,7 @@ class DescribeIndexResponse :
                &_DescribeIndexResponse_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    17;
+    19;
 
   friend void swap(DescribeIndexResponse& a, DescribeIndexResponse& b) {
     a.Swap(&b);
@@ -2938,13 +3246,12 @@ class DescribeIndexResponse :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kExtraParamsFieldNumber = 5,
+    kExtraParamsFieldNumber = 4,
     kCollectionNameFieldNumber = 2,
     kFieldNameFieldNumber = 3,
-    kIndexNameFieldNumber = 4,
     kStatusFieldNumber = 1,
   };
-  // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+  // repeated .milvus.proto.common.KeyValuePair extra_params = 4;
   int extra_params_size() const;
   void clear_extra_params();
   ::milvus::proto::common::KeyValuePair* mutable_extra_params(int index);
@@ -2977,17 +3284,6 @@ class DescribeIndexResponse :
   std::string* release_field_name();
   void set_allocated_field_name(std::string* field_name);
 
-  // string index_name = 4;
-  void clear_index_name();
-  const std::string& index_name() const;
-  void set_index_name(const std::string& value);
-  void set_index_name(std::string&& value);
-  void set_index_name(const char* value);
-  void set_index_name(const char* value, size_t size);
-  std::string* mutable_index_name();
-  std::string* release_index_name();
-  void set_allocated_index_name(std::string* index_name);
-
   // .milvus.proto.common.Status status = 1;
   bool has_status() const;
   void clear_status();
@@ -3004,7 +3300,6 @@ class DescribeIndexResponse :
   ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair > extra_params_;
   ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr collection_name_;
   ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr field_name_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr index_name_;
   ::milvus::proto::common::Status* status_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_service_5fmsg_2eproto;
@@ -4968,6 +5263,218 @@ IndexParam::extra_params() const {
 
 // -------------------------------------------------------------------
 
+// DescribeIndexRequest
+
+// string collection_name = 1;
+inline void DescribeIndexRequest::clear_collection_name() {
+  collection_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline const std::string& DescribeIndexRequest::collection_name() const {
+  // @@protoc_insertion_point(field_get:milvus.proto.service.DescribeIndexRequest.collection_name)
+  return collection_name_.GetNoArena();
+}
+inline void DescribeIndexRequest::set_collection_name(const std::string& value) {
+  
+  collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:milvus.proto.service.DescribeIndexRequest.collection_name)
+}
+inline void DescribeIndexRequest::set_collection_name(std::string&& value) {
+  
+  collection_name_.SetNoArena(
+    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:milvus.proto.service.DescribeIndexRequest.collection_name)
+}
+inline void DescribeIndexRequest::set_collection_name(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  
+  collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:milvus.proto.service.DescribeIndexRequest.collection_name)
+}
+inline void DescribeIndexRequest::set_collection_name(const char* value, size_t size) {
+  
+  collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:milvus.proto.service.DescribeIndexRequest.collection_name)
+}
+inline std::string* DescribeIndexRequest::mutable_collection_name() {
+  
+  // @@protoc_insertion_point(field_mutable:milvus.proto.service.DescribeIndexRequest.collection_name)
+  return collection_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline std::string* DescribeIndexRequest::release_collection_name() {
+  // @@protoc_insertion_point(field_release:milvus.proto.service.DescribeIndexRequest.collection_name)
+  
+  return collection_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline void DescribeIndexRequest::set_allocated_collection_name(std::string* collection_name) {
+  if (collection_name != nullptr) {
+    
+  } else {
+    
+  }
+  collection_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), collection_name);
+  // @@protoc_insertion_point(field_set_allocated:milvus.proto.service.DescribeIndexRequest.collection_name)
+}
+
+// string field_name = 2;
+inline void DescribeIndexRequest::clear_field_name() {
+  field_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline const std::string& DescribeIndexRequest::field_name() const {
+  // @@protoc_insertion_point(field_get:milvus.proto.service.DescribeIndexRequest.field_name)
+  return field_name_.GetNoArena();
+}
+inline void DescribeIndexRequest::set_field_name(const std::string& value) {
+  
+  field_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:milvus.proto.service.DescribeIndexRequest.field_name)
+}
+inline void DescribeIndexRequest::set_field_name(std::string&& value) {
+  
+  field_name_.SetNoArena(
+    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:milvus.proto.service.DescribeIndexRequest.field_name)
+}
+inline void DescribeIndexRequest::set_field_name(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  
+  field_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:milvus.proto.service.DescribeIndexRequest.field_name)
+}
+inline void DescribeIndexRequest::set_field_name(const char* value, size_t size) {
+  
+  field_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:milvus.proto.service.DescribeIndexRequest.field_name)
+}
+inline std::string* DescribeIndexRequest::mutable_field_name() {
+  
+  // @@protoc_insertion_point(field_mutable:milvus.proto.service.DescribeIndexRequest.field_name)
+  return field_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline std::string* DescribeIndexRequest::release_field_name() {
+  // @@protoc_insertion_point(field_release:milvus.proto.service.DescribeIndexRequest.field_name)
+  
+  return field_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline void DescribeIndexRequest::set_allocated_field_name(std::string* field_name) {
+  if (field_name != nullptr) {
+    
+  } else {
+    
+  }
+  field_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), field_name);
+  // @@protoc_insertion_point(field_set_allocated:milvus.proto.service.DescribeIndexRequest.field_name)
+}
+
+// -------------------------------------------------------------------
+
+// DescribeIndexProgressRequest
+
+// string collection_name = 1;
+inline void DescribeIndexProgressRequest::clear_collection_name() {
+  collection_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline const std::string& DescribeIndexProgressRequest::collection_name() const {
+  // @@protoc_insertion_point(field_get:milvus.proto.service.DescribeIndexProgressRequest.collection_name)
+  return collection_name_.GetNoArena();
+}
+inline void DescribeIndexProgressRequest::set_collection_name(const std::string& value) {
+  
+  collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:milvus.proto.service.DescribeIndexProgressRequest.collection_name)
+}
+inline void DescribeIndexProgressRequest::set_collection_name(std::string&& value) {
+  
+  collection_name_.SetNoArena(
+    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:milvus.proto.service.DescribeIndexProgressRequest.collection_name)
+}
+inline void DescribeIndexProgressRequest::set_collection_name(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  
+  collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:milvus.proto.service.DescribeIndexProgressRequest.collection_name)
+}
+inline void DescribeIndexProgressRequest::set_collection_name(const char* value, size_t size) {
+  
+  collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:milvus.proto.service.DescribeIndexProgressRequest.collection_name)
+}
+inline std::string* DescribeIndexProgressRequest::mutable_collection_name() {
+  
+  // @@protoc_insertion_point(field_mutable:milvus.proto.service.DescribeIndexProgressRequest.collection_name)
+  return collection_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline std::string* DescribeIndexProgressRequest::release_collection_name() {
+  // @@protoc_insertion_point(field_release:milvus.proto.service.DescribeIndexProgressRequest.collection_name)
+  
+  return collection_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline void DescribeIndexProgressRequest::set_allocated_collection_name(std::string* collection_name) {
+  if (collection_name != nullptr) {
+    
+  } else {
+    
+  }
+  collection_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), collection_name);
+  // @@protoc_insertion_point(field_set_allocated:milvus.proto.service.DescribeIndexProgressRequest.collection_name)
+}
+
+// string field_name = 2;
+inline void DescribeIndexProgressRequest::clear_field_name() {
+  field_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline const std::string& DescribeIndexProgressRequest::field_name() const {
+  // @@protoc_insertion_point(field_get:milvus.proto.service.DescribeIndexProgressRequest.field_name)
+  return field_name_.GetNoArena();
+}
+inline void DescribeIndexProgressRequest::set_field_name(const std::string& value) {
+  
+  field_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:milvus.proto.service.DescribeIndexProgressRequest.field_name)
+}
+inline void DescribeIndexProgressRequest::set_field_name(std::string&& value) {
+  
+  field_name_.SetNoArena(
+    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:milvus.proto.service.DescribeIndexProgressRequest.field_name)
+}
+inline void DescribeIndexProgressRequest::set_field_name(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  
+  field_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:milvus.proto.service.DescribeIndexProgressRequest.field_name)
+}
+inline void DescribeIndexProgressRequest::set_field_name(const char* value, size_t size) {
+  
+  field_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:milvus.proto.service.DescribeIndexProgressRequest.field_name)
+}
+inline std::string* DescribeIndexProgressRequest::mutable_field_name() {
+  
+  // @@protoc_insertion_point(field_mutable:milvus.proto.service.DescribeIndexProgressRequest.field_name)
+  return field_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline std::string* DescribeIndexProgressRequest::release_field_name() {
+  // @@protoc_insertion_point(field_release:milvus.proto.service.DescribeIndexProgressRequest.field_name)
+  
+  return field_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline void DescribeIndexProgressRequest::set_allocated_field_name(std::string* field_name) {
+  if (field_name != nullptr) {
+    
+  } else {
+    
+  }
+  field_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), field_name);
+  // @@protoc_insertion_point(field_set_allocated:milvus.proto.service.DescribeIndexProgressRequest.field_name)
+}
+
+// -------------------------------------------------------------------
+
 // DescribeIndexResponse
 
 // .milvus.proto.common.Status status = 1;
@@ -5117,58 +5624,7 @@ inline void DescribeIndexResponse::set_allocated_field_name(std::string* field_n
   // @@protoc_insertion_point(field_set_allocated:milvus.proto.service.DescribeIndexResponse.field_name)
 }
 
-// string index_name = 4;
-inline void DescribeIndexResponse::clear_index_name() {
-  index_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-}
-inline const std::string& DescribeIndexResponse::index_name() const {
-  // @@protoc_insertion_point(field_get:milvus.proto.service.DescribeIndexResponse.index_name)
-  return index_name_.GetNoArena();
-}
-inline void DescribeIndexResponse::set_index_name(const std::string& value) {
-  
-  index_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
-  // @@protoc_insertion_point(field_set:milvus.proto.service.DescribeIndexResponse.index_name)
-}
-inline void DescribeIndexResponse::set_index_name(std::string&& value) {
-  
-  index_name_.SetNoArena(
-    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
-  // @@protoc_insertion_point(field_set_rvalue:milvus.proto.service.DescribeIndexResponse.index_name)
-}
-inline void DescribeIndexResponse::set_index_name(const char* value) {
-  GOOGLE_DCHECK(value != nullptr);
-  
-  index_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
-  // @@protoc_insertion_point(field_set_char:milvus.proto.service.DescribeIndexResponse.index_name)
-}
-inline void DescribeIndexResponse::set_index_name(const char* value, size_t size) {
-  
-  index_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
-      ::std::string(reinterpret_cast<const char*>(value), size));
-  // @@protoc_insertion_point(field_set_pointer:milvus.proto.service.DescribeIndexResponse.index_name)
-}
-inline std::string* DescribeIndexResponse::mutable_index_name() {
-  
-  // @@protoc_insertion_point(field_mutable:milvus.proto.service.DescribeIndexResponse.index_name)
-  return index_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-}
-inline std::string* DescribeIndexResponse::release_index_name() {
-  // @@protoc_insertion_point(field_release:milvus.proto.service.DescribeIndexResponse.index_name)
-  
-  return index_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-}
-inline void DescribeIndexResponse::set_allocated_index_name(std::string* index_name) {
-  if (index_name != nullptr) {
-    
-  } else {
-    
-  }
-  index_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), index_name);
-  // @@protoc_insertion_point(field_set_allocated:milvus.proto.service.DescribeIndexResponse.index_name)
-}
-
-// repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+// repeated .milvus.proto.common.KeyValuePair extra_params = 4;
 inline int DescribeIndexResponse::extra_params_size() const {
   return extra_params_.size();
 }
@@ -5232,6 +5688,10 @@ DescribeIndexResponse::extra_params() const {
 
 // -------------------------------------------------------------------
 
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
 
 // @@protoc_insertion_point(namespace_scope)
 
diff --git a/internal/proto/service.proto b/internal/proto/service.proto
index bde0dbdde..60564690a 100644
--- a/internal/proto/service.proto
+++ b/internal/proto/service.proto
@@ -122,7 +122,7 @@ service MilvusService {
      *
      * @return IndexParam
      */
-    rpc DescribeIndex(IndexParam) returns (DescribeIndexResponse) {}
+    rpc DescribeIndex(DescribeIndexRequest) returns (DescribeIndexResponse) {}
 
     /**
      * @brief This method is used to query index building progress
@@ -131,5 +131,5 @@ service MilvusService {
      *
      * @return IndexParam
      */
-    rpc DescribeIndexProgress(IndexParam) returns (BoolResponse) {}
+    rpc DescribeIndexProgress(DescribeIndexProgressRequest) returns (BoolResponse) {}
 }
\ No newline at end of file
diff --git a/internal/proto/service_msg.proto b/internal/proto/service_msg.proto
index 642ae3f61..dd8a983b9 100644
--- a/internal/proto/service_msg.proto
+++ b/internal/proto/service_msg.proto
@@ -184,11 +184,19 @@ message QueryResult {
     repeated common.KeyValuePair extra_params = 3;
 }
 
+message DescribeIndexRequest {
+    string collection_name = 1;
+    string field_name = 2;
+}
+
+message DescribeIndexProgressRequest {
+    string collection_name = 1;
+    string field_name = 2;
+}
+
 message DescribeIndexResponse {
     common.Status status = 1;
     string collection_name = 2;
     string field_name = 3;
-    string index_name = 4;
-    repeated common.KeyValuePair extra_params = 5;
+    repeated common.KeyValuePair extra_params = 4;
 }
-
diff --git a/internal/proto/servicepb/service.pb.go b/internal/proto/servicepb/service.pb.go
index 92277112d..b98624a10 100644
--- a/internal/proto/servicepb/service.pb.go
+++ b/internal/proto/servicepb/service.pb.go
@@ -29,36 +29,37 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 func init() { proto.RegisterFile("service.proto", fileDescriptor_a0b84a42fa06f626) }
 
 var fileDescriptor_a0b84a42fa06f626 = []byte{
-	// 464 bytes of a gzipped FileDescriptorProto
+	// 479 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0xcf, 0x6e, 0xd3, 0x40,
-	0x10, 0xc6, 0x73, 0xca, 0x61, 0x88, 0x5b, 0xba, 0x82, 0x8b, 0x2b, 0x21, 0x30, 0x20, 0x21, 0x10,
-	0xb1, 0x04, 0x4f, 0x40, 0x52, 0xa4, 0x06, 0x41, 0x15, 0x62, 0x15, 0x51, 0x38, 0x94, 0xb5, 0x33,
-	0xd8, 0x2b, 0xd9, 0xbb, 0xd6, 0xce, 0xb8, 0xff, 0xde, 0x99, 0x77, 0x40, 0xb1, 0xdd, 0xd6, 0x96,
-	0x1c, 0x62, 0x4b, 0xdc, 0xb2, 0x33, 0xdf, 0xfc, 0x76, 0xbf, 0x7c, 0x63, 0x70, 0x08, 0xed, 0x85,
-	0x8a, 0x70, 0x9a, 0x5b, 0xc3, 0x46, 0x3c, 0xca, 0x54, 0x7a, 0x51, 0x50, 0x75, 0x9a, 0xd6, 0x3d,
-	0x77, 0x12, 0x99, 0x2c, 0x33, 0xba, 0xaa, 0xba, 0x07, 0x75, 0xf9, 0x3c, 0xa3, 0xb8, 0x2e, 0x4d,
-	0x28, 0x4a, 0x30, 0x93, 0xd5, 0xe9, 0xdd, 0x1f, 0x00, 0xe7, 0x4b, 0xc9, 0x09, 0x2a, 0xa5, 0xf8,
-	0x0e, 0x0f, 0xe7, 0x16, 0x25, 0xe3, 0xdc, 0xa4, 0x29, 0x46, 0xac, 0x8c, 0x16, 0x2f, 0xa7, 0xed,
-	0xbb, 0x2a, 0xc2, 0xbd, 0x20, 0x28, 0x0b, 0xee, 0x61, 0x5b, 0x56, 0xbf, 0x24, 0x60, 0xc9, 0x05,
-	0x79, 0x23, 0x71, 0x0a, 0x7b, 0x47, 0xd6, 0xe4, 0x0d, 0xee, 0x8b, 0x69, 0x97, 0x87, 0x06, 0xf8,
-	0x44, 0x66, 0xb8, 0x0b, 0xfb, 0x13, 0x9c, 0x63, 0x49, 0x83, 0xa9, 0x5e, 0xb7, 0x6a, 0x66, 0x4c,
-	0xba, 0x42, 0xca, 0x8d, 0x26, 0xf4, 0x46, 0x42, 0x81, 0x38, 0x42, 0x8a, 0xac, 0x0a, 0x71, 0xf0,
-	0x0d, 0x6f, 0x76, 0xa9, 0x2a, 0x72, 0xbe, 0xf9, 0xe9, 0x8d, 0xc4, 0x19, 0xec, 0x07, 0x89, 0xb9,
-	0xbc, 0x6f, 0x93, 0x70, 0x3b, 0x9d, 0x7f, 0xcc, 0x72, 0xbe, 0x76, 0x5f, 0x75, 0xd3, 0x03, 0xb6,
-	0x4a, 0xc7, 0x9f, 0x15, 0x71, 0xc3, 0xc5, 0x29, 0xec, 0x57, 0x99, 0x2e, 0xa5, 0x65, 0x55, 0x5a,
-	0x78, 0xde, 0x3d, 0x7e, 0x27, 0xe8, 0xf3, 0xcf, 0x07, 0xe0, 0x6c, 0x02, 0xfd, 0xbf, 0xd0, 0x33,
-	0x98, 0x1c, 0x4b, 0x1a, 0xc8, 0xec, 0x17, 0xe6, 0x6f, 0x38, 0xb8, 0x0d, 0x73, 0x20, 0xff, 0xf5,
-	0x0e, 0x51, 0x3b, 0xc9, 0x10, 0xf6, 0x36, 0x49, 0xde, 0x75, 0xa9, 0xe7, 0xc2, 0x0c, 0x89, 0xf4,
-	0x1b, 0x8c, 0x17, 0x9a, 0xd0, 0xb2, 0x78, 0xd2, 0x3d, 0xb5, 0x32, 0x97, 0x33, 0xc9, 0x51, 0xb2,
-	0xed, 0xed, 0x0b, 0xcd, 0x18, 0xa3, 0x5d, 0x49, 0x1d, 0x63, 0x83, 0xfb, 0x09, 0xc6, 0x01, 0x4a,
-	0x1b, 0x25, 0xe2, 0xb0, 0x7b, 0xee, 0x6b, 0x81, 0xf6, 0xda, 0x7d, 0xf6, 0x8f, 0xe6, 0x0a, 0xa9,
-	0x48, 0xd9, 0x1b, 0x89, 0x13, 0x78, 0x50, 0xad, 0xdd, 0x42, 0xaf, 0xf1, 0x4a, 0x3c, 0xdd, 0xf6,
-	0x90, 0x35, 0x5e, 0x2d, 0xa5, 0x95, 0xd9, 0xae, 0xd5, 0xf8, 0x05, 0xce, 0x6d, 0x7e, 0x7d, 0x89,
-	0x5b, 0xbe, 0xc1, 0x16, 0xa6, 0xe1, 0xfe, 0x1c, 0x1e, 0xb7, 0x5a, 0x4b, 0x6b, 0x62, 0x8b, 0x44,
-	0x3d, 0x6e, 0xea, 0xb5, 0x82, 0xb3, 0xf9, 0x8f, 0x0f, 0xb1, 0xe2, 0xa4, 0x08, 0x37, 0xe6, 0xfc,
-	0x1b, 0x95, 0xa6, 0xea, 0x86, 0x31, 0x4a, 0xfc, 0x6a, 0xf8, 0xed, 0x5a, 0x11, 0x5b, 0x15, 0x16,
-	0x8c, 0x6b, 0x5f, 0x69, 0x46, 0xab, 0x65, 0xea, 0x97, 0x44, 0xbf, 0x26, 0xe6, 0x61, 0x38, 0x2e,
-	0x0b, 0xef, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x9b, 0xf8, 0xbc, 0x74, 0x11, 0x06, 0x00, 0x00,
+	0x10, 0xc6, 0x73, 0xca, 0x61, 0x1b, 0xb7, 0x74, 0x05, 0x17, 0x57, 0x42, 0x60, 0x40, 0x42, 0x20,
+	0x62, 0xa9, 0x3c, 0x01, 0x49, 0x91, 0x1a, 0x04, 0x55, 0xb0, 0x55, 0x44, 0xe1, 0x80, 0xd6, 0xce,
+	0x60, 0x2f, 0xb2, 0x77, 0xdd, 0x9d, 0x71, 0xff, 0xbd, 0x01, 0x6f, 0x8d, 0xe2, 0x75, 0xd2, 0x18,
+	0x39, 0xc4, 0x96, 0xb8, 0x79, 0x67, 0xbe, 0xf9, 0xed, 0xcc, 0x7e, 0x63, 0xe6, 0x20, 0x98, 0x2b,
+	0x19, 0xc3, 0xb8, 0x30, 0x9a, 0x34, 0x7f, 0x98, 0xcb, 0xec, 0xaa, 0x44, 0x7b, 0x1a, 0xd7, 0x39,
+	0x77, 0x14, 0xeb, 0x3c, 0xd7, 0xca, 0x46, 0xdd, 0xc3, 0x3a, 0xfc, 0x23, 0xc7, 0xa4, 0x0e, 0x8d,
+	0x30, 0x4e, 0x21, 0x17, 0xf6, 0x74, 0xfc, 0x7b, 0x8f, 0x39, 0x9f, 0x2a, 0x4e, 0x68, 0x95, 0xfc,
+	0x2b, 0x7b, 0x30, 0x35, 0x20, 0x08, 0xa6, 0x3a, 0xcb, 0x20, 0x26, 0xa9, 0x15, 0x7f, 0x31, 0x6e,
+	0xde, 0x65, 0x09, 0xf7, 0x82, 0xb0, 0x0a, 0xb8, 0x47, 0x4d, 0x59, 0xdd, 0x49, 0x48, 0x82, 0x4a,
+	0xf4, 0x06, 0xfc, 0x9c, 0xed, 0x9f, 0x18, 0x5d, 0x6c, 0x70, 0x9f, 0x8f, 0xdb, 0x66, 0xd8, 0x00,
+	0x9f, 0x89, 0x1c, 0x76, 0x61, 0xbf, 0x33, 0xe7, 0x54, 0x60, 0x6f, 0xaa, 0xd7, 0xae, 0x9a, 0x68,
+	0x9d, 0x05, 0x80, 0x85, 0x56, 0x08, 0xde, 0x80, 0x4b, 0xc6, 0x4f, 0x00, 0x63, 0x23, 0x23, 0xe8,
+	0x7d, 0xc3, 0xeb, 0x5d, 0x2a, 0x4b, 0x2e, 0x96, 0x9f, 0xde, 0x80, 0x5f, 0xb0, 0x83, 0x30, 0xd5,
+	0xd7, 0xf7, 0x69, 0xe4, 0x6e, 0xeb, 0xe4, 0xef, 0xf3, 0x82, 0x6e, 0xdd, 0x97, 0xed, 0xf4, 0x90,
+	0x8c, 0x54, 0xc9, 0x47, 0x89, 0xb4, 0x31, 0xc5, 0x39, 0x3b, 0xb0, 0x9e, 0xce, 0x85, 0x21, 0x59,
+	0x8d, 0xf0, 0xac, 0xbd, 0x7c, 0x2d, 0xe8, 0xf2, 0xf2, 0x21, 0x73, 0x96, 0x86, 0xfe, 0x5f, 0xe8,
+	0x05, 0x1b, 0x9d, 0x0a, 0xec, 0xc9, 0xec, 0x66, 0xe6, 0x4f, 0x76, 0xb8, 0x32, 0xb3, 0x27, 0xff,
+	0xd5, 0x0e, 0x51, 0xd3, 0xc9, 0x88, 0xed, 0x2f, 0x9d, 0x5c, 0x67, 0xb1, 0xe3, 0xc2, 0xf4, 0xb1,
+	0xf4, 0x0b, 0x1b, 0xce, 0x14, 0x82, 0x21, 0xfe, 0xb8, 0xbd, 0x2a, 0xd0, 0xd7, 0x13, 0x41, 0x71,
+	0xba, 0xad, 0xf7, 0x99, 0x22, 0x48, 0xc0, 0x04, 0x42, 0x25, 0xb0, 0xc1, 0xfd, 0xc0, 0x86, 0x21,
+	0x08, 0x13, 0xa7, 0xfc, 0xa8, 0xbd, 0xee, 0x73, 0x09, 0xe6, 0xd6, 0x7d, 0xfa, 0x8f, 0x64, 0x00,
+	0x58, 0x66, 0xe4, 0x0d, 0xf8, 0x19, 0xdb, 0xb3, 0x6b, 0x37, 0x53, 0x0b, 0xb8, 0xe1, 0x4f, 0xb6,
+	0x35, 0xb2, 0x80, 0x9b, 0xb9, 0x30, 0x22, 0xdf, 0xb5, 0x1a, 0xbf, 0x98, 0xb3, 0xf2, 0xcf, 0x12,
+	0xb7, 0x8c, 0xd6, 0x10, 0x05, 0x70, 0x59, 0x02, 0xd2, 0xb6, 0xbf, 0xf1, 0x2f, 0xed, 0xfa, 0x1d,
+	0x2e, 0xd9, 0xa3, 0x46, 0x6a, 0x6e, 0x74, 0x62, 0x00, 0x91, 0x1f, 0x77, 0xe0, 0xac, 0xc4, 0xab,
+	0xbb, 0x3b, 0xad, 0xe7, 0x64, 0xfa, 0xed, 0x5d, 0x22, 0x29, 0x2d, 0xa3, 0xe5, 0xe0, 0xfe, 0x9d,
+	0xcc, 0x32, 0x79, 0x47, 0x10, 0xa7, 0xbe, 0x2d, 0x7e, 0xb3, 0x90, 0x48, 0x46, 0x46, 0x25, 0xc1,
+	0xc2, 0x97, 0x8a, 0xc0, 0x28, 0x91, 0xf9, 0x15, 0xd1, 0xaf, 0x89, 0x45, 0x14, 0x0d, 0xab, 0xc0,
+	0xdb, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x71, 0xd7, 0x7f, 0xec, 0x2d, 0x06, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -160,14 +161,14 @@ type MilvusServiceClient interface {
 	// @param IndexParam, target index.
 	//
 	// @return IndexParam
-	DescribeIndex(ctx context.Context, in *IndexParam, opts ...grpc.CallOption) (*DescribeIndexResponse, error)
+	DescribeIndex(ctx context.Context, in *DescribeIndexRequest, opts ...grpc.CallOption) (*DescribeIndexResponse, error)
 	//*
 	// @brief This method is used to query index building progress
 	//
 	// @param IndexParam, target index.
 	//
 	// @return IndexParam
-	DescribeIndexProgress(ctx context.Context, in *IndexParam, opts ...grpc.CallOption) (*BoolResponse, error)
+	DescribeIndexProgress(ctx context.Context, in *DescribeIndexProgressRequest, opts ...grpc.CallOption) (*BoolResponse, error)
 }
 
 type milvusServiceClient struct {
@@ -295,7 +296,7 @@ func (c *milvusServiceClient) CreateIndex(ctx context.Context, in *IndexParam, o
 	return out, nil
 }
 
-func (c *milvusServiceClient) DescribeIndex(ctx context.Context, in *IndexParam, opts ...grpc.CallOption) (*DescribeIndexResponse, error) {
+func (c *milvusServiceClient) DescribeIndex(ctx context.Context, in *DescribeIndexRequest, opts ...grpc.CallOption) (*DescribeIndexResponse, error) {
 	out := new(DescribeIndexResponse)
 	err := c.cc.Invoke(ctx, "/milvus.proto.service.MilvusService/DescribeIndex", in, out, opts...)
 	if err != nil {
@@ -304,7 +305,7 @@ func (c *milvusServiceClient) DescribeIndex(ctx context.Context, in *IndexParam,
 	return out, nil
 }
 
-func (c *milvusServiceClient) DescribeIndexProgress(ctx context.Context, in *IndexParam, opts ...grpc.CallOption) (*BoolResponse, error) {
+func (c *milvusServiceClient) DescribeIndexProgress(ctx context.Context, in *DescribeIndexProgressRequest, opts ...grpc.CallOption) (*BoolResponse, error) {
 	out := new(BoolResponse)
 	err := c.cc.Invoke(ctx, "/milvus.proto.service.MilvusService/DescribeIndexProgress", in, out, opts...)
 	if err != nil {
@@ -402,14 +403,14 @@ type MilvusServiceServer interface {
 	// @param IndexParam, target index.
 	//
 	// @return IndexParam
-	DescribeIndex(context.Context, *IndexParam) (*DescribeIndexResponse, error)
+	DescribeIndex(context.Context, *DescribeIndexRequest) (*DescribeIndexResponse, error)
 	//*
 	// @brief This method is used to query index building progress
 	//
 	// @param IndexParam, target index.
 	//
 	// @return IndexParam
-	DescribeIndexProgress(context.Context, *IndexParam) (*BoolResponse, error)
+	DescribeIndexProgress(context.Context, *DescribeIndexProgressRequest) (*BoolResponse, error)
 }
 
 // UnimplementedMilvusServiceServer can be embedded to have forward compatible implementations.
@@ -455,10 +456,10 @@ func (*UnimplementedMilvusServiceServer) Search(ctx context.Context, req *Query)
 func (*UnimplementedMilvusServiceServer) CreateIndex(ctx context.Context, req *IndexParam) (*commonpb.Status, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method CreateIndex not implemented")
 }
-func (*UnimplementedMilvusServiceServer) DescribeIndex(ctx context.Context, req *IndexParam) (*DescribeIndexResponse, error) {
+func (*UnimplementedMilvusServiceServer) DescribeIndex(ctx context.Context, req *DescribeIndexRequest) (*DescribeIndexResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method DescribeIndex not implemented")
 }
-func (*UnimplementedMilvusServiceServer) DescribeIndexProgress(ctx context.Context, req *IndexParam) (*BoolResponse, error) {
+func (*UnimplementedMilvusServiceServer) DescribeIndexProgress(ctx context.Context, req *DescribeIndexProgressRequest) (*BoolResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method DescribeIndexProgress not implemented")
 }
 
@@ -701,7 +702,7 @@ func _MilvusService_CreateIndex_Handler(srv interface{}, ctx context.Context, de
 }
 
 func _MilvusService_DescribeIndex_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(IndexParam)
+	in := new(DescribeIndexRequest)
 	if err := dec(in); err != nil {
 		return nil, err
 	}
@@ -713,13 +714,13 @@ func _MilvusService_DescribeIndex_Handler(srv interface{}, ctx context.Context,
 		FullMethod: "/milvus.proto.service.MilvusService/DescribeIndex",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(MilvusServiceServer).DescribeIndex(ctx, req.(*IndexParam))
+		return srv.(MilvusServiceServer).DescribeIndex(ctx, req.(*DescribeIndexRequest))
 	}
 	return interceptor(ctx, in, info, handler)
 }
 
 func _MilvusService_DescribeIndexProgress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(IndexParam)
+	in := new(DescribeIndexProgressRequest)
 	if err := dec(in); err != nil {
 		return nil, err
 	}
@@ -731,7 +732,7 @@ func _MilvusService_DescribeIndexProgress_Handler(srv interface{}, ctx context.C
 		FullMethod: "/milvus.proto.service.MilvusService/DescribeIndexProgress",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(MilvusServiceServer).DescribeIndexProgress(ctx, req.(*IndexParam))
+		return srv.(MilvusServiceServer).DescribeIndexProgress(ctx, req.(*DescribeIndexProgressRequest))
 	}
 	return interceptor(ctx, in, info, handler)
 }
diff --git a/internal/proto/servicepb/service_msg.pb.go b/internal/proto/servicepb/service_msg.pb.go
index 4377d99aa..d7deb85d9 100644
--- a/internal/proto/servicepb/service_msg.pb.go
+++ b/internal/proto/servicepb/service_msg.pb.go
@@ -969,12 +969,105 @@ func (m *IndexParam) GetExtraParams() []*commonpb.KeyValuePair {
 	return nil
 }
 
+type DescribeIndexRequest struct {
+	CollectionName       string   `protobuf:"bytes,1,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"`
+	FieldName            string   `protobuf:"bytes,2,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DescribeIndexRequest) Reset()         { *m = DescribeIndexRequest{} }
+func (m *DescribeIndexRequest) String() string { return proto.CompactTextString(m) }
+func (*DescribeIndexRequest) ProtoMessage()    {}
+func (*DescribeIndexRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b4b40b84dd2f74cb, []int{17}
+}
+
+func (m *DescribeIndexRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DescribeIndexRequest.Unmarshal(m, b)
+}
+func (m *DescribeIndexRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DescribeIndexRequest.Marshal(b, m, deterministic)
+}
+func (m *DescribeIndexRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DescribeIndexRequest.Merge(m, src)
+}
+func (m *DescribeIndexRequest) XXX_Size() int {
+	return xxx_messageInfo_DescribeIndexRequest.Size(m)
+}
+func (m *DescribeIndexRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DescribeIndexRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DescribeIndexRequest proto.InternalMessageInfo
+
+func (m *DescribeIndexRequest) GetCollectionName() string {
+	if m != nil {
+		return m.CollectionName
+	}
+	return ""
+}
+
+func (m *DescribeIndexRequest) GetFieldName() string {
+	if m != nil {
+		return m.FieldName
+	}
+	return ""
+}
+
+type DescribeIndexProgressRequest struct {
+	CollectionName       string   `protobuf:"bytes,1,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"`
+	FieldName            string   `protobuf:"bytes,2,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DescribeIndexProgressRequest) Reset()         { *m = DescribeIndexProgressRequest{} }
+func (m *DescribeIndexProgressRequest) String() string { return proto.CompactTextString(m) }
+func (*DescribeIndexProgressRequest) ProtoMessage()    {}
+func (*DescribeIndexProgressRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b4b40b84dd2f74cb, []int{18}
+}
+
+func (m *DescribeIndexProgressRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DescribeIndexProgressRequest.Unmarshal(m, b)
+}
+func (m *DescribeIndexProgressRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DescribeIndexProgressRequest.Marshal(b, m, deterministic)
+}
+func (m *DescribeIndexProgressRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DescribeIndexProgressRequest.Merge(m, src)
+}
+func (m *DescribeIndexProgressRequest) XXX_Size() int {
+	return xxx_messageInfo_DescribeIndexProgressRequest.Size(m)
+}
+func (m *DescribeIndexProgressRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DescribeIndexProgressRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DescribeIndexProgressRequest proto.InternalMessageInfo
+
+func (m *DescribeIndexProgressRequest) GetCollectionName() string {
+	if m != nil {
+		return m.CollectionName
+	}
+	return ""
+}
+
+func (m *DescribeIndexProgressRequest) GetFieldName() string {
+	if m != nil {
+		return m.FieldName
+	}
+	return ""
+}
+
 type DescribeIndexResponse struct {
 	Status               *commonpb.Status         `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
 	CollectionName       string                   `protobuf:"bytes,2,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"`
 	FieldName            string                   `protobuf:"bytes,3,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"`
-	IndexName            string                   `protobuf:"bytes,4,opt,name=index_name,json=indexName,proto3" json:"index_name,omitempty"`
-	ExtraParams          []*commonpb.KeyValuePair `protobuf:"bytes,5,rep,name=extra_params,json=extraParams,proto3" json:"extra_params,omitempty"`
+	ExtraParams          []*commonpb.KeyValuePair `protobuf:"bytes,4,rep,name=extra_params,json=extraParams,proto3" json:"extra_params,omitempty"`
 	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
 	XXX_unrecognized     []byte                   `json:"-"`
 	XXX_sizecache        int32                    `json:"-"`
@@ -984,7 +1077,7 @@ func (m *DescribeIndexResponse) Reset()         { *m = DescribeIndexResponse{} }
 func (m *DescribeIndexResponse) String() string { return proto.CompactTextString(m) }
 func (*DescribeIndexResponse) ProtoMessage()    {}
 func (*DescribeIndexResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_b4b40b84dd2f74cb, []int{17}
+	return fileDescriptor_b4b40b84dd2f74cb, []int{19}
 }
 
 func (m *DescribeIndexResponse) XXX_Unmarshal(b []byte) error {
@@ -1026,13 +1119,6 @@ func (m *DescribeIndexResponse) GetFieldName() string {
 	return ""
 }
 
-func (m *DescribeIndexResponse) GetIndexName() string {
-	if m != nil {
-		return m.IndexName
-	}
-	return ""
-}
-
 func (m *DescribeIndexResponse) GetExtraParams() []*commonpb.KeyValuePair {
 	if m != nil {
 		return m.ExtraParams
@@ -1059,65 +1145,68 @@ func init() {
 	proto.RegisterType((*Hits)(nil), "milvus.proto.service.Hits")
 	proto.RegisterType((*QueryResult)(nil), "milvus.proto.service.QueryResult")
 	proto.RegisterType((*IndexParam)(nil), "milvus.proto.service.IndexParam")
+	proto.RegisterType((*DescribeIndexRequest)(nil), "milvus.proto.service.DescribeIndexRequest")
+	proto.RegisterType((*DescribeIndexProgressRequest)(nil), "milvus.proto.service.DescribeIndexProgressRequest")
 	proto.RegisterType((*DescribeIndexResponse)(nil), "milvus.proto.service.DescribeIndexResponse")
 }
 
 func init() { proto.RegisterFile("service_msg.proto", fileDescriptor_b4b40b84dd2f74cb) }
 
 var fileDescriptor_b4b40b84dd2f74cb = []byte{
-	// 854 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xdd, 0x6e, 0xdb, 0x36,
-	0x14, 0x9e, 0x2c, 0x27, 0xb3, 0x8f, 0x65, 0xd7, 0xe1, 0xd2, 0xc2, 0x6d, 0x51, 0xc0, 0x53, 0xd1,
-	0xcd, 0xd8, 0x30, 0x1b, 0x48, 0x07, 0x0c, 0xbd, 0x18, 0xb0, 0x38, 0xe9, 0xb6, 0x34, 0x45, 0x92,
-	0x31, 0x41, 0x80, 0x6e, 0xc0, 0x04, 0x5a, 0x62, 0x25, 0x62, 0x92, 0x28, 0x90, 0x54, 0x52, 0xf7,
-	0x41, 0x76, 0xb1, 0x57, 0xd8, 0x83, 0xec, 0x6e, 0xef, 0xb3, 0xbb, 0x41, 0xa4, 0x22, 0xdb, 0x99,
-	0x87, 0x3a, 0x71, 0xee, 0xc8, 0x43, 0x9d, 0xf3, 0x9d, 0xef, 0xfc, 0x7c, 0x82, 0x2d, 0x49, 0xc5,
-	0x05, 0xf3, 0xa9, 0x97, 0xc8, 0x70, 0x98, 0x09, 0xae, 0x38, 0xda, 0x4e, 0x58, 0x7c, 0x91, 0x4b,
-	0x73, 0x1b, 0x96, 0xef, 0x8f, 0x1c, 0x9f, 0x27, 0x09, 0x4f, 0x8d, 0xf5, 0x91, 0x23, 0xfd, 0x88,
-	0x26, 0xc4, 0xdc, 0xdc, 0x17, 0xd0, 0xd9, 0xe3, 0x71, 0x4c, 0x7d, 0xc5, 0x78, 0x7a, 0x44, 0x12,
-	0x8a, 0x3e, 0x87, 0x7b, 0x7e, 0x65, 0xf1, 0x52, 0x92, 0xd0, 0x9e, 0xd5, 0xb7, 0x06, 0x4d, 0xdc,
-	0xf1, 0x17, 0x3e, 0x74, 0x5f, 0x41, 0xfb, 0x84, 0x08, 0xc5, 0x6e, 0xec, 0x89, 0xba, 0x60, 0x2b,
-	0x12, 0xf6, 0x6a, 0xfa, 0xb1, 0x38, 0xba, 0x7f, 0x5a, 0xd0, 0xc0, 0xfc, 0x72, 0x4c, 0x94, 0x1f,
-	0xad, 0x1e, 0xe7, 0x29, 0xb4, 0xb3, 0xab, 0x0c, 0xbc, 0x59, 0x44, 0xa7, 0x32, 0x9e, 0x91, 0x10,
-	0x7d, 0x0d, 0x0d, 0xc1, 0x2f, 0xbd, 0x80, 0x28, 0xd2, 0xb3, 0xfb, 0xf6, 0xa0, 0xb5, 0xf3, 0x70,
-	0xb8, 0x50, 0xa6, 0xb2, 0x3a, 0xe3, 0x98, 0x4f, 0xf0, 0xc7, 0x82, 0x5f, 0xee, 0x13, 0x45, 0xd0,
-	0x63, 0x68, 0x46, 0x44, 0x46, 0xde, 0x6f, 0x74, 0x2a, 0x7b, 0xf5, 0xbe, 0x3d, 0x68, 0xe3, 0x46,
-	0x61, 0x38, 0xa4, 0x53, 0xe9, 0x5e, 0x42, 0xf7, 0x24, 0x26, 0x3e, 0x8d, 0x78, 0x1c, 0x50, 0x71,
-	0x4e, 0xe2, 0xbc, 0xe2, 0x64, 0x55, 0x9c, 0xd0, 0x0b, 0xa8, 0xab, 0x69, 0x46, 0x75, 0x52, 0x9d,
-	0x9d, 0x67, 0xc3, 0x65, 0xbd, 0x19, 0xce, 0xc5, 0x39, 0x9b, 0x66, 0x14, 0x6b, 0x17, 0xf4, 0x00,
-	0x36, 0x2f, 0x8a, 0xa8, 0x52, 0x67, 0xec, 0xe0, 0xf2, 0xe6, 0xfe, 0xba, 0x00, 0xfc, 0x83, 0xe0,
-	0x79, 0x86, 0x5e, 0x81, 0x93, 0xcd, 0x6c, 0xb2, 0x67, 0x69, 0x8e, 0x9f, 0x7d, 0x10, 0x4e, 0xa7,
-	0x8d, 0x17, 0x7c, 0xdd, 0xdf, 0x2d, 0xd8, 0xf8, 0x29, 0xa7, 0x62, 0xba, 0x7a, 0x0f, 0x9e, 0x41,
-	0x67, 0xa1, 0x07, 0xb2, 0x57, 0xeb, 0xdb, 0x83, 0x26, 0x6e, 0xcf, 0x37, 0x41, 0x16, 0xe5, 0x09,
-	0x64, 0xdc, 0xb3, 0x4d, 0x79, 0x02, 0x19, 0xa3, 0x2f, 0x61, 0x6b, 0x0e, 0xdb, 0x0b, 0x0b, 0x32,
-	0xbd, 0x7a, 0xdf, 0x1a, 0x38, 0xb8, 0x9b, 0x5d, 0x23, 0xe9, 0xfe, 0x02, 0x9d, 0x53, 0x25, 0x58,
-	0x1a, 0x62, 0x2a, 0x33, 0x9e, 0x4a, 0x8a, 0x9e, 0xc3, 0xa6, 0x54, 0x44, 0xe5, 0x52, 0xe7, 0xd5,
-	0xda, 0x79, 0xbc, 0xb4, 0xa9, 0xa7, 0xfa, 0x13, 0x5c, 0x7e, 0x8a, 0xb6, 0x61, 0x43, 0x57, 0xb2,
-	0x1c, 0x14, 0x73, 0x71, 0xdf, 0x80, 0x33, 0xe6, 0x3c, 0xbe, 0xc3, 0xd0, 0x8d, 0xab, 0xd0, 0x04,
-	0x90, 0xc9, 0xfb, 0x35, 0x93, 0x6a, 0x3d, 0x80, 0xd9, 0x4c, 0x98, 0x02, 0x5f, 0xcd, 0xc4, 0x04,
-	0x3e, 0x39, 0x48, 0x15, 0x0d, 0xa9, 0xb8, 0x6b, 0x0c, 0xbb, 0xc2, 0x90, 0xb0, 0x5d, 0x62, 0x60,
-	0x92, 0x86, 0x74, 0xed, 0x4a, 0x4d, 0x68, 0xc8, 0x52, 0x5d, 0x29, 0x1b, 0x9b, 0x4b, 0x31, 0x20,
-	0x34, 0x0d, 0xf4, 0x80, 0xd8, 0xb8, 0x38, 0xba, 0x7f, 0x5b, 0x70, 0x7f, 0xa6, 0x4d, 0xfb, 0x54,
-	0xfa, 0x82, 0x65, 0xc5, 0xf1, 0x76, 0xb0, 0xdf, 0xc2, 0xa6, 0x51, 0x3e, 0x8d, 0xdb, 0xfa, 0xcf,
-	0x42, 0x1a, 0x55, 0x9c, 0x01, 0x9e, 0x6a, 0x03, 0x2e, 0x9d, 0xd0, 0x2e, 0x40, 0x11, 0x88, 0x49,
-	0xc5, 0x7c, 0x59, 0x0a, 0xc9, 0xa7, 0x4b, 0x71, 0x0f, 0xe9, 0x54, 0xef, 0xd6, 0x09, 0x61, 0x02,
-	0xcf, 0x39, 0xb9, 0x7f, 0x59, 0xb0, 0x5d, 0x29, 0xe6, 0xda, 0x7c, 0xbe, 0x81, 0xba, 0x5e, 0x4b,
-	0xc3, 0xe6, 0xe9, 0xff, 0xec, 0xfb, 0xbc, 0x40, 0x63, 0xed, 0x70, 0x17, 0x4c, 0x14, 0x6c, 0x9d,
-	0x4e, 0xe5, 0x1e, 0x4f, 0xdf, 0xb2, 0x35, 0x37, 0x12, 0x41, 0x5d, 0x4b, 0xac, 0x99, 0x69, 0x7d,
-	0xbe, 0xa6, 0x7e, 0xb3, 0x49, 0x3f, 0x84, 0xfa, 0x8f, 0x4c, 0x69, 0x2d, 0x39, 0xd8, 0x37, 0x42,
-	0x67, 0xe3, 0xe2, 0x88, 0x1e, 0xce, 0x69, 0x7c, 0x4d, 0x2b, 0x66, 0x25, 0xe4, 0x0f, 0x8a, 0xb6,
-	0x73, 0x51, 0x06, 0xab, 0xe1, 0xf2, 0xe6, 0x9e, 0x43, 0x4b, 0x2b, 0x1d, 0xa6, 0x32, 0x8f, 0xd5,
-	0xad, 0x93, 0x8f, 0x98, 0x92, 0x25, 0xa4, 0x3e, 0xbb, 0x7f, 0x58, 0x00, 0x07, 0x69, 0x40, 0xdf,
-	0x9d, 0x10, 0x41, 0x92, 0xd5, 0x75, 0xf4, 0x09, 0xc0, 0x5b, 0x46, 0xe3, 0xc0, 0xab, 0x9a, 0xda,
-	0xc4, 0x4d, 0x6d, 0xd1, 0xcf, 0xfb, 0xe0, 0xd0, 0x77, 0x4a, 0x10, 0x2f, 0x2b, 0xc2, 0xde, 0xa0,
-	0x6d, 0x2d, 0xed, 0xa6, 0x93, 0x91, 0xee, 0x3f, 0x16, 0xdc, 0x37, 0x83, 0x37, 0xa1, 0x3a, 0xc9,
-	0xf5, 0x9a, 0xb7, 0x84, 0x5c, 0x6d, 0x05, 0x72, 0xf6, 0x75, 0x72, 0x4f, 0x00, 0x58, 0x91, 0x8d,
-	0x79, 0xae, 0x9b, 0x67, 0x6d, 0x59, 0xca, 0x7d, 0xe3, 0x36, 0xdc, 0xbf, 0xf8, 0x0e, 0xee, 0x5d,
-	0xfb, 0xd9, 0xa2, 0x06, 0xd4, 0x8f, 0x8e, 0x8f, 0x5e, 0x76, 0x3f, 0x42, 0x5b, 0xd0, 0x3e, 0x7f,
-	0xb9, 0x77, 0x76, 0x8c, 0xbd, 0xf1, 0xc1, 0xd1, 0x2e, 0x7e, 0xd3, 0x0d, 0x50, 0x17, 0x9c, 0xd2,
-	0xf4, 0xfd, 0xeb, 0xe3, 0xdd, 0xb3, 0x2e, 0x1d, 0xef, 0xfd, 0xbc, 0x1b, 0x32, 0x15, 0xe5, 0x93,
-	0x02, 0x6c, 0xf4, 0x9e, 0xc5, 0x31, 0x7b, 0xaf, 0xa8, 0x1f, 0x8d, 0x4c, 0x22, 0x5f, 0x05, 0x4c,
-	0x2a, 0xc1, 0x26, 0xb9, 0xa2, 0xc1, 0x88, 0xa5, 0x8a, 0x8a, 0x94, 0xc4, 0x23, 0x9d, 0xdd, 0xa8,
-	0xdc, 0xc7, 0x6c, 0x32, 0xd9, 0xd4, 0x86, 0xe7, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x2b, 0x24,
-	0x3d, 0xc8, 0xbe, 0x09, 0x00, 0x00,
+	// 868 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x6e, 0x1b, 0x45,
+	0x14, 0x66, 0xbd, 0x6e, 0xb0, 0x8f, 0xd7, 0xae, 0x33, 0xb8, 0x95, 0xdb, 0x82, 0x64, 0xb6, 0x2a,
+	0x58, 0x20, 0x6c, 0x29, 0x45, 0x42, 0xbd, 0x40, 0x22, 0x4e, 0x0a, 0xa4, 0xa9, 0x12, 0x33, 0x89,
+	0x22, 0x15, 0x24, 0x56, 0xe3, 0xdd, 0x93, 0xf5, 0x88, 0xf5, 0xce, 0x32, 0x33, 0x9b, 0xd4, 0x7d,
+	0x10, 0x2e, 0x78, 0x05, 0x1e, 0x84, 0x3b, 0x1e, 0x80, 0xa7, 0x41, 0x3b, 0xbb, 0xf1, 0x4f, 0x48,
+	0x55, 0x37, 0xf6, 0xdd, 0x9c, 0xb3, 0x73, 0xce, 0xf7, 0x9d, 0x9f, 0xf9, 0x6c, 0xd8, 0x56, 0x28,
+	0x2f, 0xb8, 0x8f, 0xde, 0x44, 0x85, 0xbd, 0x44, 0x0a, 0x2d, 0x48, 0x6b, 0xc2, 0xa3, 0x8b, 0x54,
+	0xe5, 0x56, 0xaf, 0xf8, 0xfe, 0xd0, 0xf1, 0xc5, 0x64, 0x22, 0xe2, 0xdc, 0xfb, 0xd0, 0x51, 0xfe,
+	0x18, 0x27, 0x2c, 0xb7, 0xdc, 0x67, 0xd0, 0xd8, 0x13, 0x51, 0x84, 0xbe, 0xe6, 0x22, 0x3e, 0x62,
+	0x13, 0x24, 0x9f, 0xc3, 0x5d, 0x7f, 0xe6, 0xf1, 0x62, 0x36, 0xc1, 0xb6, 0xd5, 0xb1, 0xba, 0x55,
+	0xda, 0xf0, 0x97, 0x2e, 0xba, 0x2f, 0xa0, 0x3e, 0x64, 0x52, 0xf3, 0xf7, 0x8e, 0x24, 0x4d, 0xb0,
+	0x35, 0x0b, 0xdb, 0x25, 0xf3, 0x31, 0x3b, 0xba, 0x7f, 0x59, 0x50, 0xa1, 0xe2, 0x72, 0xc0, 0xb4,
+	0x3f, 0x5e, 0x3d, 0xcf, 0x63, 0xa8, 0x27, 0x57, 0x0c, 0xbc, 0x79, 0x46, 0x67, 0xe6, 0x3c, 0x65,
+	0x21, 0xf9, 0x1a, 0x2a, 0x52, 0x5c, 0x7a, 0x01, 0xd3, 0xac, 0x6d, 0x77, 0xec, 0x6e, 0x6d, 0xe7,
+	0x41, 0x6f, 0xa9, 0x4d, 0x45, 0x77, 0x06, 0x91, 0x18, 0xd1, 0x0f, 0xa5, 0xb8, 0xdc, 0x67, 0x9a,
+	0x91, 0x47, 0x50, 0x1d, 0x33, 0x35, 0xf6, 0x7e, 0xc3, 0xa9, 0x6a, 0x97, 0x3b, 0x76, 0xb7, 0x4e,
+	0x2b, 0x99, 0xe3, 0x10, 0xa7, 0xca, 0xbd, 0x84, 0xe6, 0x30, 0x62, 0x3e, 0x8e, 0x45, 0x14, 0xa0,
+	0x3c, 0x63, 0x51, 0x3a, 0xab, 0xc9, 0x9a, 0xd5, 0x44, 0x9e, 0x41, 0x59, 0x4f, 0x13, 0x34, 0xa4,
+	0x1a, 0x3b, 0x4f, 0x7a, 0x37, 0xcd, 0xa6, 0xb7, 0x90, 0xe7, 0x74, 0x9a, 0x20, 0x35, 0x21, 0xe4,
+	0x3e, 0x6c, 0x5d, 0x64, 0x59, 0x95, 0x61, 0xec, 0xd0, 0xc2, 0x72, 0x7f, 0x5d, 0x02, 0xfe, 0x41,
+	0x8a, 0x34, 0x21, 0x2f, 0xc0, 0x49, 0xe6, 0x3e, 0xd5, 0xb6, 0x4c, 0x8d, 0x9f, 0xbd, 0x13, 0xce,
+	0xd0, 0xa6, 0x4b, 0xb1, 0xee, 0x1f, 0x16, 0xdc, 0xf9, 0x29, 0x45, 0x39, 0x5d, 0x7d, 0x06, 0x4f,
+	0xa0, 0xb1, 0x34, 0x03, 0xd5, 0x2e, 0x75, 0xec, 0x6e, 0x95, 0xd6, 0x17, 0x87, 0xa0, 0xb2, 0xf6,
+	0x04, 0x2a, 0x6a, 0xdb, 0x79, 0x7b, 0x02, 0x15, 0x91, 0x2f, 0x61, 0x7b, 0x01, 0xdb, 0x0b, 0xb3,
+	0x62, 0xda, 0xe5, 0x8e, 0xd5, 0x75, 0x68, 0x33, 0xb9, 0x56, 0xa4, 0xfb, 0x0b, 0x34, 0x4e, 0xb4,
+	0xe4, 0x71, 0x48, 0x51, 0x25, 0x22, 0x56, 0x48, 0x9e, 0xc2, 0x96, 0xd2, 0x4c, 0xa7, 0xca, 0xf0,
+	0xaa, 0xed, 0x3c, 0xba, 0x71, 0xa8, 0x27, 0xe6, 0x0a, 0x2d, 0xae, 0x92, 0x16, 0xdc, 0x31, 0x9d,
+	0x2c, 0x16, 0x25, 0x37, 0xdc, 0x57, 0xe0, 0x0c, 0x84, 0x88, 0x36, 0x98, 0xba, 0x72, 0x95, 0x9a,
+	0x01, 0xc9, 0x79, 0xbf, 0xe4, 0x4a, 0xaf, 0x07, 0x30, 0xdf, 0x89, 0xbc, 0xc1, 0x57, 0x3b, 0x31,
+	0x82, 0x8f, 0x0e, 0x62, 0x8d, 0x21, 0xca, 0x4d, 0x63, 0xd8, 0x33, 0x0c, 0x05, 0xad, 0x02, 0x83,
+	0xb2, 0x38, 0xc4, 0xb5, 0x3b, 0x35, 0xc2, 0x90, 0xc7, 0xa6, 0x53, 0x36, 0xcd, 0x8d, 0x6c, 0x41,
+	0x30, 0x0e, 0xcc, 0x82, 0xd8, 0x34, 0x3b, 0xba, 0xff, 0x58, 0x70, 0x6f, 0xae, 0x4d, 0xfb, 0xa8,
+	0x7c, 0xc9, 0x93, 0xec, 0x78, 0x3b, 0xd8, 0x6f, 0x61, 0x2b, 0x57, 0x3e, 0x83, 0x5b, 0xfb, 0xdf,
+	0x83, 0xcc, 0x55, 0x71, 0x0e, 0x78, 0x62, 0x1c, 0xb4, 0x08, 0x22, 0xbb, 0x00, 0x59, 0x22, 0xae,
+	0x34, 0xf7, 0x55, 0x21, 0x24, 0x9f, 0xde, 0x88, 0x7b, 0x88, 0x53, 0xf3, 0xb6, 0x86, 0x8c, 0x4b,
+	0xba, 0x10, 0xe4, 0xfe, 0x6d, 0x41, 0x6b, 0xa6, 0x98, 0x6b, 0xd7, 0xf3, 0x0d, 0x94, 0xcd, 0xb3,
+	0xcc, 0xab, 0x79, 0xfc, 0x96, 0xf7, 0xbe, 0x28, 0xd0, 0xd4, 0x04, 0x6c, 0xa2, 0x12, 0x0d, 0xdb,
+	0x27, 0x53, 0xb5, 0x27, 0xe2, 0x73, 0xbe, 0xe6, 0x8b, 0x24, 0x50, 0x36, 0x12, 0x9b, 0xef, 0xb4,
+	0x39, 0x5f, 0x53, 0xbf, 0xf9, 0xa6, 0x1f, 0x42, 0xf9, 0x47, 0xae, 0x8d, 0x96, 0x1c, 0xec, 0xe7,
+	0x42, 0x67, 0xd3, 0xec, 0x48, 0x1e, 0x2c, 0x68, 0x7c, 0xc9, 0x28, 0xe6, 0x4c, 0xc8, 0xef, 0x67,
+	0x63, 0x17, 0xb2, 0x48, 0x56, 0xa2, 0x85, 0xe5, 0x9e, 0x41, 0xcd, 0x28, 0x1d, 0x45, 0x95, 0x46,
+	0xfa, 0xd6, 0xe4, 0xc7, 0x5c, 0xab, 0x02, 0xd2, 0x9c, 0xdd, 0x3f, 0x2d, 0x80, 0x83, 0x38, 0xc0,
+	0xd7, 0x43, 0x26, 0xd9, 0x64, 0x75, 0x1d, 0xfd, 0x04, 0xe0, 0x9c, 0x63, 0x14, 0x78, 0xb3, 0xa1,
+	0x56, 0x69, 0xd5, 0x78, 0xcc, 0xe7, 0x7d, 0x70, 0xf0, 0xb5, 0x96, 0xcc, 0x4b, 0xb2, 0xb4, 0xef,
+	0x31, 0xb6, 0x9a, 0x09, 0x33, 0x64, 0xb2, 0xdf, 0x8f, 0x56, 0xbe, 0x77, 0x23, 0x34, 0x1c, 0x29,
+	0xfe, 0x9e, 0xa2, 0xd2, 0x9b, 0x62, 0xe9, 0x9e, 0xc3, 0xc7, 0x4b, 0xf9, 0x87, 0x52, 0x84, 0x12,
+	0x95, 0xda, 0x34, 0xce, 0xbf, 0x16, 0xdc, 0xbb, 0x56, 0xc8, 0x3a, 0x4b, 0x78, 0x03, 0xad, 0xd2,
+	0x0a, 0xb4, 0xec, 0x77, 0x0d, 0xa9, 0x7c, 0x9b, 0x21, 0x7d, 0xf1, 0x1d, 0xdc, 0xbd, 0xf6, 0xaf,
+	0x80, 0x54, 0xa0, 0x7c, 0x74, 0x7c, 0xf4, 0xbc, 0xf9, 0x01, 0xd9, 0x86, 0xfa, 0xd9, 0xf3, 0xbd,
+	0xd3, 0x63, 0xea, 0x0d, 0x0e, 0x8e, 0x76, 0xe9, 0xab, 0x66, 0x40, 0x9a, 0xe0, 0x14, 0xae, 0xef,
+	0x5f, 0x1e, 0xef, 0x9e, 0x36, 0x71, 0xb0, 0xf7, 0xf3, 0x6e, 0xc8, 0xf5, 0x38, 0x1d, 0x65, 0x60,
+	0xfd, 0x37, 0x3c, 0x8a, 0xf8, 0x1b, 0x8d, 0xfe, 0xb8, 0x9f, 0x13, 0xf9, 0x2a, 0xe0, 0x4a, 0x4b,
+	0x3e, 0x4a, 0x35, 0x06, 0x7d, 0x1e, 0x6b, 0x94, 0x31, 0x8b, 0xfa, 0x86, 0x5d, 0xbf, 0x10, 0x8e,
+	0x64, 0x34, 0xda, 0x32, 0x8e, 0xa7, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xb6, 0x3b, 0x6a, 0xb9,
+	0x67, 0x0a, 0x00, 0x00,
 }
diff --git a/internal/proxy/grpc_service.go b/internal/proxy/grpc_service.go
index d6d384e17..df298ba1e 100644
--- a/internal/proxy/grpc_service.go
+++ b/internal/proxy/grpc_service.go
@@ -595,6 +595,7 @@ func (p *Proxy) ShowPartitions(ctx context.Context, req *servicepb.CollectionNam
 }
 
 func (p *Proxy) CreateIndex(ctx context.Context, indexParam *servicepb.IndexParam) (*commonpb.Status, error) {
+	log.Println("create index for: ", indexParam.FieldName)
 	cit := &CreateIndexTask{
 		Condition: NewTaskCondition(ctx),
 		CreateIndexRequest: internalpb.CreateIndexRequest{
@@ -637,10 +638,104 @@ func (p *Proxy) CreateIndex(ctx context.Context, indexParam *servicepb.IndexPara
 	return cit.result, nil
 }
 
-func (p *Proxy) DescribeIndex(context.Context, *servicepb.IndexParam) (*servicepb.DescribeIndexResponse, error) {
-	return nil, nil
+func (p *Proxy) DescribeIndex(ctx context.Context, req *servicepb.DescribeIndexRequest) (*servicepb.DescribeIndexResponse, error) {
+	log.Println("Describe index for: ", req.FieldName)
+	dit := &DescribeIndexTask{
+		Condition: NewTaskCondition(ctx),
+		DescribeIndexRequest: internalpb.DescribeIndexRequest{
+			MsgType:        internalpb.MsgType_kDescribeIndex,
+			CollectionName: req.CollectionName,
+			FieldName:      req.FieldName,
+		},
+		masterClient: p.masterClient,
+	}
+
+	var cancel func()
+	dit.ctx, cancel = context.WithTimeout(ctx, reqTimeoutInterval)
+	defer cancel()
+
+	fn := func() error {
+		select {
+		case <-ctx.Done():
+			return errors.New("create index timeout")
+		default:
+			return p.sched.DdQueue.Enqueue(dit)
+		}
+	}
+	err := fn()
+	if err != nil {
+		return &servicepb.DescribeIndexResponse{
+			Status: &commonpb.Status{
+				ErrorCode: commonpb.ErrorCode_UNEXPECTED_ERROR,
+				Reason:    err.Error(),
+			},
+			CollectionName: req.CollectionName,
+			FieldName:      req.FieldName,
+			ExtraParams:    nil,
+		}, nil
+	}
+
+	err = dit.WaitToFinish()
+	if err != nil {
+		return &servicepb.DescribeIndexResponse{
+			Status: &commonpb.Status{
+				ErrorCode: commonpb.ErrorCode_UNEXPECTED_ERROR,
+				Reason:    err.Error(),
+			},
+			CollectionName: req.CollectionName,
+			FieldName:      req.FieldName,
+			ExtraParams:    nil,
+		}, nil
+	}
+
+	return dit.result, nil
 }
 
-func (p *Proxy) DescribeIndexProgress(context.Context, *servicepb.IndexParam) (*servicepb.BoolResponse, error) {
-	return nil, nil
+func (p *Proxy) DescribeIndexProgress(ctx context.Context, req *servicepb.DescribeIndexProgressRequest) (*servicepb.BoolResponse, error) {
+	log.Println("Describe index progress for: ", req.FieldName)
+	dipt := &DescribeIndexProgressTask{
+		Condition: NewTaskCondition(ctx),
+		DescribeIndexProgressRequest: internalpb.DescribeIndexProgressRequest{
+			MsgType:        internalpb.MsgType_kDescribeIndexProgress,
+			CollectionName: req.CollectionName,
+			FieldName:      req.FieldName,
+		},
+		masterClient: p.masterClient,
+	}
+
+	var cancel func()
+	dipt.ctx, cancel = context.WithTimeout(ctx, reqTimeoutInterval)
+	defer cancel()
+
+	fn := func() error {
+		select {
+		case <-ctx.Done():
+			return errors.New("create index timeout")
+		default:
+			return p.sched.DdQueue.Enqueue(dipt)
+		}
+	}
+	err := fn()
+	if err != nil {
+		return &servicepb.BoolResponse{
+			Status: &commonpb.Status{
+				ErrorCode: commonpb.ErrorCode_UNEXPECTED_ERROR,
+				Reason:    err.Error(),
+			},
+			Value: false,
+		}, nil
+	}
+
+	err = dipt.WaitToFinish()
+	if err != nil {
+		return &servicepb.BoolResponse{
+			Status: &commonpb.Status{
+				ErrorCode: commonpb.ErrorCode_UNEXPECTED_ERROR,
+				Reason:    err.Error(),
+			},
+			Value: false,
+		}, nil
+	}
+
+	return dipt.result, nil
 }
diff --git a/internal/proxy/proxy_test.go b/internal/proxy/proxy_test.go
index 2c4bda85c..01e8e74fd 100644
--- a/internal/proxy/proxy_test.go
+++ b/internal/proxy/proxy_test.go
@@ -180,6 +180,29 @@ func dropCollection(t *testing.T, name string) {
 	assert.Equal(t, resp.ErrorCode, commonpb.ErrorCode_SUCCESS, msg)
 }
 
+func createIndex(t *testing.T, collectionName, fieldName string) {
+
+	req := &servicepb.IndexParam{
+		CollectionName: collectionName,
+		FieldName:      fieldName,
+		ExtraParams: []*commonpb.KeyValuePair{
+			{
+				Key:   "nlist",
+				Value: "1024",
+			},
+			{
+				Key:   "metric_type",
+				Value: "L2",
+			},
+		},
+	}
+
+	resp, err := proxyClient.CreateIndex(ctx, req)
+	assert.Nil(t, err)
+	msg := "Create Index for " + fieldName + " should succeed!"
+	assert.Equal(t, resp.ErrorCode, commonpb.ErrorCode_SUCCESS, msg)
+}
+
 func TestProxy_CreateCollection(t *testing.T) {
 	var wg sync.WaitGroup
 	for i := 0; i < testNum; i++ {
@@ -451,6 +474,22 @@ func TestProxy_PartitionGRPC(t *testing.T) {
 	dropCollection(t, collName)
 }
 
+// func TestProxy_CreateIndex(t *testing.T) {
+// 	var wg sync.WaitGroup
+// 	for i := 0; i < testNum; i++ {
+// 		i := i
+// 		collectionName := "Collection" + strconv.FormatInt(int64(i), 10)
+// 		fieldName := "Field" + strconv.FormatInt(int64(i), 10)
+// 		wg.Add(1)
+// 		go func(group *sync.WaitGroup) {
+// 			defer group.Done()
+// 			createIndex(t, collectionName, fieldName)
+// 			// dropIndex(t, collectionName, fieldName, indexName)
+// 		}(&wg)
+// 	}
+// 	wg.Wait()
+// }
+
 func TestMain(m *testing.M) {
 	setup()
 	code := m.Run()
diff --git a/internal/proxy/task.go b/internal/proxy/task.go
index add283974..5208355f6 100644
--- a/internal/proxy/task.go
+++ b/internal/proxy/task.go
@@ -7,10 +7,7 @@ import (
 	"math"
 	"strconv"
 
-	"github.com/zilliztech/milvus-distributed/internal/util/typeutil"
-
 	"github.com/golang/protobuf/proto"
-
 	"github.com/zilliztech/milvus-distributed/internal/allocator"
 	"github.com/zilliztech/milvus-distributed/internal/msgstream"
 	"github.com/zilliztech/milvus-distributed/internal/proto/commonpb"
@@ -18,6 +15,7 @@ import (
 	"github.com/zilliztech/milvus-distributed/internal/proto/masterpb"
 	"github.com/zilliztech/milvus-distributed/internal/proto/schemapb"
 	"github.com/zilliztech/milvus-distributed/internal/proto/servicepb"
+	"github.com/zilliztech/milvus-distributed/internal/util/typeutil"
 )
 
 type task interface {
-- 
GitLab