Skip to content

Commit

Permalink
Bugfix: Cater to optional segmenter matches in filterByLookupOrder (#35)
Browse files Browse the repository at this point in the history
* Bugfix: Cater to optional segmenter matches in filterByLookupOrder

* Update inline comments

Co-authored-by: Krithika Sundararajan <krithika.sundararajan@go-jek.com>
  • Loading branch information
krithika369 and Krithika Sundararajan committed Sep 19, 2022
1 parent 6bd3be9 commit fac3bc6
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 12 deletions.
23 changes: 11 additions & 12 deletions treatment-service/services/experiment_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,42 +124,41 @@ 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]
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, 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
}
}

return filtered
Expand Down
6 changes: 6 additions & 0 deletions treatment-service/services/experiment_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down

0 comments on commit fac3bc6

Please sign in to comment.