From e23f4292998349e5fa8c062f794eaae3eee27abe Mon Sep 17 00:00:00 2001 From: congqixia Date: Thu, 20 Mar 2025 15:52:13 +0800 Subject: [PATCH] fix: Check whether index type support mmap even param enabled (#40614) Related to #40537 Signed-off-by: Congqi Xia --- internal/querynodev2/segments/utils.go | 11 ++++++----- internal/querynodev2/segments/utils_test.go | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/internal/querynodev2/segments/utils.go b/internal/querynodev2/segments/utils.go index 65b806a14f..0ec9feaebd 100644 --- a/internal/querynodev2/segments/utils.go +++ b/internal/querynodev2/segments/utils.go @@ -263,20 +263,21 @@ func getFieldSchema(schema *schemapb.CollectionSchema, fieldID int64) (*schemapb func isIndexMmapEnable(fieldSchema *schemapb.FieldSchema, indexInfo *querypb.FieldIndexInfo) bool { enableMmap, exist := common.IsMmapIndexEnabled(indexInfo.IndexParams...) - if exist { + // fast path for returning disabled, need to perform index type check for enabled case + if exist && !enableMmap { return enableMmap } indexType := common.GetIndexType(indexInfo.IndexParams) var indexSupportMmap bool - var defaultEnableMmap bool + // var defaultEnableMmap bool if typeutil.IsVectorType(fieldSchema.GetDataType()) { indexSupportMmap = vecindexmgr.GetVecIndexMgrInstance().IsMMapSupported(indexType) - defaultEnableMmap = params.Params.QueryNodeCfg.MmapVectorIndex.GetAsBool() + enableMmap = params.Params.QueryNodeCfg.MmapVectorIndex.GetAsBool() || enableMmap } else { indexSupportMmap = indexparamcheck.IsScalarMmapIndex(indexType) - defaultEnableMmap = params.Params.QueryNodeCfg.MmapScalarIndex.GetAsBool() + enableMmap = params.Params.QueryNodeCfg.MmapScalarIndex.GetAsBool() || enableMmap } - return indexSupportMmap && defaultEnableMmap + return indexSupportMmap && enableMmap } func isDataMmapEnable(fieldSchema *schemapb.FieldSchema) bool { diff --git a/internal/querynodev2/segments/utils_test.go b/internal/querynodev2/segments/utils_test.go index 727a94c400..00f59ef811 100644 --- a/internal/querynodev2/segments/utils_test.go +++ b/internal/querynodev2/segments/utils_test.go @@ -152,6 +152,23 @@ func TestIsIndexMmapEnable(t *testing.T) { }) assert.True(t, enable) }) + + t.Run("mmap scalar index param not supported", func(t *testing.T) { + paramtable.Get().Save(paramtable.Get().QueryNodeCfg.MmapScalarIndex.Key, "true") + defer paramtable.Get().Reset(paramtable.Get().QueryNodeCfg.MmapScalarIndex.Key) + enable := isIndexMmapEnable(&schemapb.FieldSchema{ + DataType: schemapb.DataType_String, + }, &querypb.FieldIndexInfo{ + IndexParams: []*commonpb.KeyValuePair{ + { + Key: common.IndexTypeKey, + Value: "STL_SORT", + }, + {Key: common.MmapEnabledKey, Value: "true"}, + }, + }) + assert.False(t, enable) + }) } func TestIsDataMmmapEnable(t *testing.T) {