From d0c787628b8455595502466cb62982f206d99a6d Mon Sep 17 00:00:00 2001
From: sunby <bingyi.sun@zilliz.com>
Date: Tue, 5 Jan 2021 16:09:14 +0800
Subject: [PATCH] Pass type params when building index

Signed-off-by: sunby <bingyi.sun@zilliz.com>
---
 internal/master/index_builder_scheduler.go | 10 +++++++++-
 internal/master/meta_table.go              | 16 ++++++++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/internal/master/index_builder_scheduler.go b/internal/master/index_builder_scheduler.go
index a67d92c8a..745e4b336 100644
--- a/internal/master/index_builder_scheduler.go
+++ b/internal/master/index_builder_scheduler.go
@@ -58,16 +58,24 @@ func (scheduler *IndexBuildScheduler) schedule(info interface{}) error {
 	}
 
 	// parse index params
+	typeParams, err := scheduler.metaTable.GetFieldTypeParams(segMeta.CollectionID, indexBuildInfo.fieldID)
+	if err != nil {
+		return err
+	}
 	indexParams, err := scheduler.metaTable.GetFieldIndexParams(segMeta.CollectionID, indexBuildInfo.fieldID)
 	if err != nil {
 		return err
 	}
+	typeParamsMap := make(map[string]string)
 	indexParamsMap := make(map[string]string)
+	for _, kv := range typeParams {
+		typeParamsMap[kv.Key] = kv.Value
+	}
 	for _, kv := range indexParams {
 		indexParamsMap[kv.Key] = kv.Value
 	}
 
-	indexID, err := scheduler.client.BuildIndexWithoutID(indexBuildInfo.binlogFilePath, nil, indexParamsMap)
+	indexID, err := scheduler.client.BuildIndexWithoutID(indexBuildInfo.binlogFilePath, typeParamsMap, indexParamsMap)
 	log.Printf("build index for segment %d field %d", indexBuildInfo.segmentID, indexBuildInfo.fieldID)
 	if err != nil {
 		return err
diff --git a/internal/master/meta_table.go b/internal/master/meta_table.go
index 94c75cf95..ff3cc711a 100644
--- a/internal/master/meta_table.go
+++ b/internal/master/meta_table.go
@@ -638,6 +638,22 @@ func (mt *metaTable) removeSegmentIndexMeta(segID UniqueID) error {
 	return nil
 }
 
+func (mt *metaTable) GetFieldTypeParams(collID UniqueID, fieldID UniqueID) ([]*commonpb.KeyValuePair, error) {
+	mt.ddLock.RLock()
+	defer mt.ddLock.RUnlock()
+
+	if _, ok := mt.collID2Meta[collID]; !ok {
+		return nil, fmt.Errorf("can not find collection with id %d", collID)
+	}
+
+	for _, fieldSchema := range mt.collID2Meta[collID].Schema.Fields {
+		if fieldSchema.FieldID == fieldID {
+			return fieldSchema.TypeParams, nil
+		}
+	}
+	return nil, fmt.Errorf("can not find field %d in collection %d", fieldID, collID)
+}
+
 func (mt *metaTable) GetFieldIndexParams(collID UniqueID, fieldID UniqueID) ([]*commonpb.KeyValuePair, error) {
 	mt.ddLock.RLock()
 	defer mt.ddLock.RUnlock()
-- 
GitLab