From 7ac53d8a0ce0b6756bbd7a84a1af5c0b312750f2 Mon Sep 17 00:00:00 2001 From: rodrigozhou Date: Mon, 30 Jan 2023 09:39:12 -0800 Subject: [PATCH] Update type of keyword list search attributes --- .../visibility/store/elasticsearch/client/client_v7.go | 2 +- .../visibility/store/elasticsearch/visibility_store.go | 5 ++++- common/searchattribute/defs.go | 4 ++-- common/searchattribute/encode_value.go | 4 +++- common/searchattribute/name_type_map_test.go | 2 +- common/searchattribute/stringify.go | 8 ++++++-- service/history/workflow/mutable_state_impl.go | 2 +- 7 files changed, 18 insertions(+), 9 deletions(-) diff --git a/common/persistence/visibility/store/elasticsearch/client/client_v7.go b/common/persistence/visibility/store/elasticsearch/client/client_v7.go index 168619b6240..21a3c80b240 100644 --- a/common/persistence/visibility/store/elasticsearch/client/client_v7.go +++ b/common/persistence/visibility/store/elasticsearch/client/client_v7.go @@ -376,7 +376,7 @@ func buildMappingBody(mapping map[string]enumspb.IndexedValueType) map[string]in switch fieldType { case enumspb.INDEXED_VALUE_TYPE_TEXT: typeMap = map[string]interface{}{"type": "text"} - case enumspb.INDEXED_VALUE_TYPE_KEYWORD: + case enumspb.INDEXED_VALUE_TYPE_KEYWORD, enumspb.INDEXED_VALUE_TYPE_KEYWORD_LIST: typeMap = map[string]interface{}{"type": "keyword"} case enumspb.INDEXED_VALUE_TYPE_INT: typeMap = map[string]interface{}{"type": "long"} diff --git a/common/persistence/visibility/store/elasticsearch/visibility_store.go b/common/persistence/visibility/store/elasticsearch/visibility_store.go index 7e12a89216b..7b90308578a 100644 --- a/common/persistence/visibility/store/elasticsearch/visibility_store.go +++ b/common/persistence/visibility/store/elasticsearch/visibility_store.go @@ -1032,7 +1032,10 @@ func finishParseJSONValue(val interface{}, t enumspb.IndexedValueType) (interfac } switch t { - case enumspb.INDEXED_VALUE_TYPE_TEXT, enumspb.INDEXED_VALUE_TYPE_KEYWORD, enumspb.INDEXED_VALUE_TYPE_DATETIME: + case enumspb.INDEXED_VALUE_TYPE_TEXT, + enumspb.INDEXED_VALUE_TYPE_KEYWORD, + enumspb.INDEXED_VALUE_TYPE_KEYWORD_LIST, + enumspb.INDEXED_VALUE_TYPE_DATETIME: stringVal, isString := val.(string) if !isString { return nil, fmt.Errorf("%w: expected string got %T", errUnexpectedJSONFieldType, val) diff --git a/common/searchattribute/defs.go b/common/searchattribute/defs.go index 70e89e5614c..d9296279cb6 100644 --- a/common/searchattribute/defs.go +++ b/common/searchattribute/defs.go @@ -85,8 +85,8 @@ var ( // predefined are internal search attributes which are passed and stored in SearchAttributes object together with custom search attributes. predefined = map[string]enumspb.IndexedValueType{ - TemporalChangeVersion: enumspb.INDEXED_VALUE_TYPE_KEYWORD, - BinaryChecksums: enumspb.INDEXED_VALUE_TYPE_KEYWORD, + TemporalChangeVersion: enumspb.INDEXED_VALUE_TYPE_KEYWORD_LIST, + BinaryChecksums: enumspb.INDEXED_VALUE_TYPE_KEYWORD_LIST, BatcherNamespace: enumspb.INDEXED_VALUE_TYPE_KEYWORD, BatcherUser: enumspb.INDEXED_VALUE_TYPE_KEYWORD, TemporalScheduledStartTime: enumspb.INDEXED_VALUE_TYPE_DATETIME, diff --git a/common/searchattribute/encode_value.go b/common/searchattribute/encode_value.go index aa9b21505e1..e72a0a3daa9 100644 --- a/common/searchattribute/encode_value.go +++ b/common/searchattribute/encode_value.go @@ -65,7 +65,9 @@ func DecodeValue(value *commonpb.Payload, t enumspb.IndexedValueType) (interface // If search attribute value is `nil`, it means that search attribute needs to be removed from the document. switch t { - case enumspb.INDEXED_VALUE_TYPE_TEXT, enumspb.INDEXED_VALUE_TYPE_KEYWORD: + case enumspb.INDEXED_VALUE_TYPE_TEXT, + enumspb.INDEXED_VALUE_TYPE_KEYWORD, + enumspb.INDEXED_VALUE_TYPE_KEYWORD_LIST: var val *string if err := payload.Decode(value, &val); err != nil { var listVal []string diff --git a/common/searchattribute/name_type_map_test.go b/common/searchattribute/name_type_map_test.go index 2d271886bee..fe756a742ff 100644 --- a/common/searchattribute/name_type_map_test.go +++ b/common/searchattribute/name_type_map_test.go @@ -77,7 +77,7 @@ func Test_GetType(t *testing.T) { assert.Equal(enumspb.INDEXED_VALUE_TYPE_KEYWORD, ivt) ivt, err = typeMap.GetType("TemporalChangeVersion") assert.NoError(err) - assert.Equal(enumspb.INDEXED_VALUE_TYPE_KEYWORD, ivt) + assert.Equal(enumspb.INDEXED_VALUE_TYPE_KEYWORD_LIST, ivt) ivt, err = typeMap.GetType("NamespaceId") assert.Error(err) assert.Equal(enumspb.INDEXED_VALUE_TYPE_UNSPECIFIED, ivt) diff --git a/common/searchattribute/stringify.go b/common/searchattribute/stringify.go index 284f82597a7..de15636d152 100644 --- a/common/searchattribute/stringify.go +++ b/common/searchattribute/stringify.go @@ -159,7 +159,9 @@ func parseValueTyped(valStr string, t enumspb.IndexedValueType) (interface{}, er var err error switch t { - case enumspb.INDEXED_VALUE_TYPE_TEXT, enumspb.INDEXED_VALUE_TYPE_KEYWORD: + case enumspb.INDEXED_VALUE_TYPE_TEXT, + enumspb.INDEXED_VALUE_TYPE_KEYWORD, + enumspb.INDEXED_VALUE_TYPE_KEYWORD_LIST: val = valStr case enumspb.INDEXED_VALUE_TYPE_INT: val, err = strconv.ParseInt(valStr, 10, 64) @@ -207,7 +209,9 @@ func isJsonArray(str string) bool { func parseJsonArray(str string, t enumspb.IndexedValueType) (interface{}, error) { switch t { - case enumspb.INDEXED_VALUE_TYPE_TEXT, enumspb.INDEXED_VALUE_TYPE_KEYWORD: + case enumspb.INDEXED_VALUE_TYPE_TEXT, + enumspb.INDEXED_VALUE_TYPE_KEYWORD, + enumspb.INDEXED_VALUE_TYPE_KEYWORD_LIST: var result []string err := json.Unmarshal([]byte(str), &result) return result, err diff --git a/service/history/workflow/mutable_state_impl.go b/service/history/workflow/mutable_state_impl.go index 31435f7124f..c418928fb63 100644 --- a/service/history/workflow/mutable_state_impl.go +++ b/service/history/workflow/mutable_state_impl.go @@ -1846,7 +1846,7 @@ func (ms *MutableStateImpl) addBinaryCheckSumIfNotExists( exeInfo.AutoResetPoints = &workflowpb.ResetPoints{ Points: currResetPoints, } - checksumsPayload, err := searchattribute.EncodeValue(recentBinaryChecksums, enumspb.INDEXED_VALUE_TYPE_KEYWORD) + checksumsPayload, err := searchattribute.EncodeValue(recentBinaryChecksums, enumspb.INDEXED_VALUE_TYPE_KEYWORD_LIST) if err != nil { return err }