Skip to content

Commit

Permalink
[FFM-5387]: Fixing group rule evaluator
Browse files Browse the repository at this point in the history
Fix the group rule evaluator.  Currently rules are being AND'd but they
should be OR'd
  • Loading branch information
davejohnston committed Nov 25, 2022
1 parent 523a452 commit ffbd02e
Showing 1 changed file with 18 additions and 4 deletions.
22 changes: 18 additions & 4 deletions evaluation/evaluator.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,17 @@ func (e Evaluator) evaluateRules(servingRules []rest.ServingRule, target *Target
return ""
}

// evaluateGroupRules evaluates the groups rules. Note Group rule are represented by a rest.Clause, instead
// of a rest.Rule. Unlike feature clauses which are AND'd, in a case of a group these must be OR'd.
func (e Evaluator) evaluateGroupRules(rules []rest.Clause, target *Target) (bool, rest.Clause) {
for _, r := range rules {
if e.evaluateClause(&r, target) {
return true, r
}
}
return false, rest.Clause{}
}

func (e Evaluator) evaluateVariationMap(variationsMap []rest.VariationMap, target *Target) string {
if variationsMap == nil || target == nil {
return ""
Expand Down Expand Up @@ -252,11 +263,14 @@ func (e Evaluator) isTargetIncludedOrExcludedInSegment(segmentList []string, tar
// Should Target be included via segment rules
rules := segment.Rules
// if rules is nil pointer or points to the empty slice
if (rules != nil && len(*rules) > 0) && e.evaluateClauses(*rules, target) {
e.logger.Debugf(
"Target %s included in segment %s via rules", target.Name, segment.Name)
return true
if rules != nil && len(*rules) > 0 {
if included, clause := e.evaluateGroupRules(*rules, target); included {
e.logger.Debugf(
"Target [%s] included in group [%s] via rule %+v", target.Name, segment.Name, clause)
return true
}
}

}
return false
}
Expand Down

0 comments on commit ffbd02e

Please sign in to comment.