diff --git a/internal/core/src/indexbuilder/IndexWrapper.cpp b/internal/core/src/indexbuilder/IndexWrapper.cpp index 1a26404aa2f0e7bdf15288d6c2f7730879b30fe9..4484d1e119bc4853e5cd49df6396047e48df8e8f 100644 --- a/internal/core/src/indexbuilder/IndexWrapper.cpp +++ b/internal/core/src/indexbuilder/IndexWrapper.cpp @@ -34,9 +34,6 @@ IndexWrapper::IndexWrapper(const char* serialized_type_params, const char* seria auto mode = get_config_by_name("index_mode"); auto index_mode = mode.has_value() ? mode_map[mode.value()] : knowhere::IndexMode::MODE_CPU; - auto index_type = get_index_type(); - auto metric_type = get_metric_type(); - AssertInfo(!is_unsupported(index_type, metric_type), index_type + " doesn't support metric: " + metric_type); index_ = knowhere::VecIndexFactory::GetInstance().CreateVecIndex(get_index_type(), index_mode); Assert(index_ != nullptr); } @@ -266,21 +263,6 @@ IndexWrapper::get_index_type() { return type.has_value() ? type.value() : knowhere::IndexEnum::INDEX_FAISS_IVFPQ; } -std::string -IndexWrapper::get_metric_type() { - auto type = get_config_by_name(knowhere::Metric::TYPE); - if (type.has_value()) { - return type.value(); - } else { - auto index_type = get_index_type(); - if (is_in_bin_list(index_type)) { - return knowhere::Metric::JACCARD; - } else { - return knowhere::Metric::L2; - } - } -} - std::unique_ptr IndexWrapper::Query(const knowhere::DatasetPtr& dataset) { return std::move(QueryImpl(dataset, config_)); diff --git a/internal/core/src/indexbuilder/IndexWrapper.h b/internal/core/src/indexbuilder/IndexWrapper.h index 979a8fa9600acab8c3e9360eb36ee29688e5a47f..16f2721712c655bff7b2e7d53a235e32ed1d6458 100644 --- a/internal/core/src/indexbuilder/IndexWrapper.h +++ b/internal/core/src/indexbuilder/IndexWrapper.h @@ -59,9 +59,6 @@ class IndexWrapper { std::string get_index_type(); - std::string - get_metric_type(); - template std::optional get_config_by_name(std::string name); diff --git a/internal/core/src/indexbuilder/utils.h b/internal/core/src/indexbuilder/utils.h index 6e1d89a2d9d82b585b46a358ff8cc47ed9dd510e..e1ed0804965cd9698a0a42cb182931d6c2a94cc3 100644 --- a/internal/core/src/indexbuilder/utils.h +++ b/internal/core/src/indexbuilder/utils.h @@ -14,7 +14,6 @@ #include #include #include -#include #include "index/knowhere/knowhere/index/IndexType.h" @@ -58,14 +57,6 @@ Need_BuildAll_list() { return ret; } -std::vector> -unsupported_index_combinations() { - static std::vector> ret{ - std::make_tuple(std::string(knowhere::IndexEnum::INDEX_FAISS_BIN_IVFFLAT), std::string(knowhere::Metric::L2)), - }; - return ret; -} - template bool is_in_list(const T& t, std::function()> list_func) { @@ -93,11 +84,5 @@ is_in_need_id_list(const milvus::knowhere::IndexType& index_type) { return is_in_list(index_type, Need_ID_List); } -bool -is_unsupported(const milvus::knowhere::IndexType& index_type, const milvus::knowhere::MetricType& metric_type) { - return is_in_list>(std::make_tuple(index_type, metric_type), - unsupported_index_combinations); -} - } // namespace indexbuilder } // namespace milvus diff --git a/internal/indexbuilder/index.go b/internal/indexbuilder/index.go index eba049e543ba94b34f9b171997d8ed8f6b39fa70..fceec4bcf06083a4bff5a29a13a94e0e0864f29d 100644 --- a/internal/indexbuilder/index.go +++ b/internal/indexbuilder/index.go @@ -14,7 +14,6 @@ package indexbuilder import "C" import ( "errors" - "fmt" "strconv" "unsafe" @@ -143,8 +142,6 @@ func (index *CIndex) Delete() error { } func NewCIndex(typeParams, indexParams map[string]string) (Index, error) { - fmt.Println("NNNNNNNNNNNNNNNNNNNNNNNNNNN typeParams: ", typeParams) - fmt.Println("NNNNNNNNNNNNNNNNNNNNNNNNNNN indexParams: ", indexParams) protoTypeParams := &indexcgopb.TypeParams{ Params: make([]*commonpb.KeyValuePair, 0), } @@ -171,14 +168,10 @@ func NewCIndex(typeParams, indexParams map[string]string) (Index, error) { CIndex* res_index); */ var indexPtr C.CIndex - fmt.Println("before create index ........................................") status := C.CreateIndex(typeParamsPointer, indexParamsPointer, &indexPtr) - fmt.Println("after create index ........................................") errorCode := status.error_code - fmt.Println("EEEEEEEEEEEEEEEEEEEEEEEEEE error code: ", errorCode) if errorCode != 0 { errorMsg := C.GoString(status.error_msg) - fmt.Println("EEEEEEEEEEEEEEEEEEEEEEEEEE error msg: ", errorMsg) defer C.free(unsafe.Pointer(status.error_msg)) return nil, errors.New(" failed, C runtime error detected, error code = " + strconv.Itoa(int(errorCode)) + ", error msg = " + errorMsg) } diff --git a/internal/indexbuilder/task.go b/internal/indexbuilder/task.go index 73a5b77508b1e36b69a6f5cef440d6451f97b9c9..15647e1563e53f3abab9976ca438ef334212fb34 100644 --- a/internal/indexbuilder/task.go +++ b/internal/indexbuilder/task.go @@ -2,7 +2,6 @@ package indexbuilder import ( "context" - "fmt" "log" "strconv" "time" @@ -172,12 +171,10 @@ func (it *IndexBuildTask) Execute() error { indexParams[key] = value } - fmt.Println("before NewCIndex ..........................") it.index, err = NewCIndex(typeParams, indexParams) if err != nil { return err } - fmt.Println("after NewCIndex ..........................") getKeyByPathNaive := func(path string) string { // splitElements := strings.Split(path, "/") @@ -226,7 +223,6 @@ func (it *IndexBuildTask) Execute() error { for _, value := range insertData.Data { // TODO: BinaryVectorFieldData - fmt.Println("before build index ..................................") floatVectorFieldData, fOk := value.(*storage.FloatVectorFieldData) if fOk { err = it.index.BuildFloatVecIndexWithoutIds(floatVectorFieldData.Data) @@ -242,15 +238,12 @@ func (it *IndexBuildTask) Execute() error { return err } } - fmt.Println("after build index ..................................") if !fOk && !bOk { return errors.New("we expect FloatVectorFieldData or BinaryVectorFieldData") } - fmt.Println("before serialize .............................................") indexBlobs, err := it.index.Serialize() - fmt.Println("after serialize .............................................") if err != nil { return err } diff --git a/internal/master/index_task.go b/internal/master/index_task.go index 444b777c9f36691a83b773526cfcec87296a3150..c5f320d0db7d01f1abe5de3bd3e67391288b4d38 100644 --- a/internal/master/index_task.go +++ b/internal/master/index_task.go @@ -24,11 +24,6 @@ func (task *createIndexTask) Ts() (Timestamp, error) { } func (task *createIndexTask) Execute() error { - // modify schema - if err := task.mt.UpdateFieldIndexParams(task.req.CollectionName, task.req.FieldName, task.req.ExtraParams); err != nil { - return err - } - // check if closed segment has the same index build history collMeta, err := task.mt.GetCollectionByName(task.req.CollectionName) if err != nil { return err @@ -44,6 +39,20 @@ func (task *createIndexTask) Execute() error { return fmt.Errorf("can not find field name %s", task.req.FieldName) } + // pre checks + isIndexable, err := task.mt.IsIndexable(collMeta.ID, fieldID) + if err != nil { + return err + } + if !isIndexable { + return fmt.Errorf("field %s is not vector", task.req.FieldName) + } + + // modify schema + if err := task.mt.UpdateFieldIndexParams(task.req.CollectionName, task.req.FieldName, task.req.ExtraParams); err != nil { + return err + } + // check if closed segment has the same index build history for _, segID := range collMeta.SegmentIDs { segMeta, err := task.mt.GetSegmentByID(segID) if err != nil { diff --git a/internal/proxy/proxy_test.go b/internal/proxy/proxy_test.go index 3993e6aae5033f53c3c001f474034a09efa33353..38ad83b7e3dace48942f1604f84a97ce030064a1 100644 --- a/internal/proxy/proxy_test.go +++ b/internal/proxy/proxy_test.go @@ -488,7 +488,9 @@ func TestProxy_CreateIndex(t *testing.T) { go func(group *sync.WaitGroup) { defer group.Done() createCollection(t, collName) - createIndex(t, collName, fieldName) + if i%2 == 0 { + createIndex(t, collName, fieldName) + } dropCollection(t, collName) // dropIndex(t, collectionName, fieldName, indexName) }(&wg) @@ -510,7 +512,9 @@ func TestProxy_DescribeIndex(t *testing.T) { go func(group *sync.WaitGroup) { defer group.Done() createCollection(t, collName) - createIndex(t, collName, fieldName) + if i%2 == 0 { + createIndex(t, collName, fieldName) + } req := &servicepb.DescribeIndexRequest{ CollectionName: collName, FieldName: fieldName, @@ -539,7 +543,9 @@ func TestProxy_DescribeIndexProgress(t *testing.T) { go func(group *sync.WaitGroup) { defer group.Done() createCollection(t, collName) - createIndex(t, collName, fieldName) + if i%2 == 0 { + createIndex(t, collName, fieldName) + } req := &servicepb.DescribeIndexProgressRequest{ CollectionName: collName, FieldName: fieldName,