From 129d50f616f7adf388673570c5133fe4bc00748a Mon Sep 17 00:00:00 2001 From: Krithika Sundararajan Date: Thu, 15 Sep 2022 23:41:53 +0800 Subject: [PATCH 1/2] Bugfix: Cater to optional segmenter matches in filterByLookupOrder --- .../services/experiment_service.go | 21 +++++++++---------- .../services/experiment_service_test.go | 6 ++++++ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/treatment-service/services/experiment_service.go b/treatment-service/services/experiment_service.go index 0613c908..d470e2dd 100644 --- a/treatment-service/services/experiment_service.go +++ b/treatment-service/services/experiment_service.go @@ -128,38 +128,37 @@ func (es *experimentService) filterByLookupOrder( filtered := matches for _, segmenter := range segmenters { orderedValues := filters[segmenter] - if len(orderedValues) == 1 { - continue - } - currentFilteredList := []*models.ExperimentMatch{} segmenterType := segmenterTypes[segmenter] for _, transformedValue := range orderedValues { if len(currentFilteredList) == 0 { - for _, segmenterMatch := range filtered { - segmenterMatchedValue := segmenterMatch.SegmenterMatches[segmenter] + for _, experiment := range filtered { + segmenterMatchedValue := experiment.SegmenterMatches[segmenter] switch segmenterType { case "string": if transformedValue.GetString_() == segmenterMatchedValue.Value.GetString_() { - currentFilteredList = append(currentFilteredList, segmenterMatch) + currentFilteredList = append(currentFilteredList, experiment) } case "integer": if transformedValue.GetInteger() == segmenterMatchedValue.Value.GetInteger() { - currentFilteredList = append(currentFilteredList, segmenterMatch) + currentFilteredList = append(currentFilteredList, experiment) } case "real": if transformedValue.GetReal() == segmenterMatchedValue.Value.GetReal() { - currentFilteredList = append(currentFilteredList, segmenterMatch) + currentFilteredList = append(currentFilteredList, experiment) } case "bool": if transformedValue.GetBool() == segmenterMatchedValue.Value.GetBool() { - currentFilteredList = append(currentFilteredList, segmenterMatch) + currentFilteredList = append(currentFilteredList, experiment) } } } } } - filtered = currentFilteredList + // currentFilteredList could be 0 in case of weak matches + if len(currentFilteredList) > 0 { + filtered = currentFilteredList + } } return filtered diff --git a/treatment-service/services/experiment_service_test.go b/treatment-service/services/experiment_service_test.go index 35b761cb..b6b36b91 100644 --- a/treatment-service/services/experiment_service_test.go +++ b/treatment-service/services/experiment_service_test.go @@ -256,6 +256,12 @@ func (s *ExperimentServiceTestSuite) TestGetExperiment() { expLookupFilters: makeExperimentLookupFilters(s2.CellID(3592210809859604480), 1, 20, "seg-1", 1, 9001, false), expResponse: s.LocalStorage.Experiments[5][0].Experiment, }, + "resolve tiers | no experiment variables": { + projectId: 5, + reqFilter: map[string][]*_segmenters.SegmenterValue{}, + expLookupFilters: makeExperimentLookupFilters(s2.CellID(3592210809859604480), 1, 20, "seg-1", 1, 9001, false), + expResponse: s.LocalStorage.Experiments[5][0].Experiment, + }, "resolve all hierarchy | optional segmenter": { projectId: 6, reqFilter: makeRequestFilter(s2.CellID(3592210809859604480), 1, 20, "seg-1", 1, 9001, false), From b794a369d0511a381fb787224abab0346ced0dce Mon Sep 17 00:00:00 2001 From: Krithika Sundararajan Date: Mon, 19 Sep 2022 11:33:35 +0800 Subject: [PATCH 2/2] Update inline comments --- treatment-service/services/experiment_service.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/treatment-service/services/experiment_service.go b/treatment-service/services/experiment_service.go index d470e2dd..8792716f 100644 --- a/treatment-service/services/experiment_service.go +++ b/treatment-service/services/experiment_service.go @@ -124,7 +124,6 @@ func (es *experimentService) filterByLookupOrder( segmenters []string, segmenterTypes map[string]schema.SegmenterType, ) []*models.ExperimentMatch { - // Stop search when we have at least 1 match filtered := matches for _, segmenter := range segmenters { orderedValues := filters[segmenter] @@ -155,7 +154,8 @@ func (es *experimentService) filterByLookupOrder( } } } - // currentFilteredList could be 0 in case of weak matches + // currentFilteredList could be 0 in case of weak matches, where the segmenter info was + // missing in the original request (i.e., where orderedValues is empty for a given segmenter). if len(currentFilteredList) > 0 { filtered = currentFilteredList }