@@ -88,8 +88,8 @@ private List<String> getFeatureFlagNamesByFlagSets(List<String> flagSets) {
8888 private TreatmentLabelAndChangeNumber getTreatment (String matchingKey , String bucketingKey , ParsedSplit parsedSplit , Map <String ,
8989 Object > attributes ) throws ChangeNumberExceptionWrapper {
9090 try {
91+ String config = parsedSplit .configurations () != null ? parsedSplit .configurations ().get (parsedSplit .defaultTreatment ()) : null ;
9192 if (parsedSplit .killed ()) {
92- String config = parsedSplit .configurations () != null ? parsedSplit .configurations ().get (parsedSplit .defaultTreatment ()) : null ;
9393 return new TreatmentLabelAndChangeNumber (
9494 parsedSplit .defaultTreatment (),
9595 Labels .KILLED ,
@@ -98,6 +98,17 @@ private TreatmentLabelAndChangeNumber getTreatment(String matchingKey, String bu
9898 parsedSplit .impressionsDisabled ());
9999 }
100100
101+ String bk = (bucketingKey == null ) ? matchingKey : bucketingKey ;
102+
103+ if (!parsedSplit .prerequisites ().match (matchingKey , bk , attributes , _evaluationContext )) {
104+ return new TreatmentLabelAndChangeNumber (
105+ parsedSplit .defaultTreatment (),
106+ Labels .PREREQUISITES_NOT_MET ,
107+ parsedSplit .changeNumber (),
108+ config ,
109+ parsedSplit .impressionsDisabled ());
110+ }
111+
101112 /*
102113 * There are three parts to a single Feature flag: 1) Whitelists 2) Traffic Allocation
103114 * 3) Rollout. The flag inRollout is there to understand when we move into the Rollout
@@ -106,8 +117,6 @@ private TreatmentLabelAndChangeNumber getTreatment(String matchingKey, String bu
106117 */
107118 boolean inRollout = false ;
108119
109- String bk = (bucketingKey == null ) ? matchingKey : bucketingKey ;
110-
111120 for (ParsedCondition parsedCondition : parsedSplit .parsedConditions ()) {
112121
113122 if (!inRollout && parsedCondition .conditionType () == ConditionType .ROLLOUT ) {
@@ -118,7 +127,7 @@ private TreatmentLabelAndChangeNumber getTreatment(String matchingKey, String bu
118127
119128 if (bucket > parsedSplit .trafficAllocation ()) {
120129 // out of split
121- String config = parsedSplit .configurations () != null ?
130+ config = parsedSplit .configurations () != null ?
122131 parsedSplit .configurations ().get (parsedSplit .defaultTreatment ()) : null ;
123132 return new TreatmentLabelAndChangeNumber (parsedSplit .defaultTreatment (), Labels .NOT_IN_SPLIT ,
124133 parsedSplit .changeNumber (), config , parsedSplit .impressionsDisabled ());
@@ -130,7 +139,7 @@ private TreatmentLabelAndChangeNumber getTreatment(String matchingKey, String bu
130139
131140 if (parsedCondition .matcher ().match (matchingKey , bucketingKey , attributes , _evaluationContext )) {
132141 String treatment = Splitter .getTreatment (bk , parsedSplit .seed (), parsedCondition .partitions (), parsedSplit .algo ());
133- String config = parsedSplit .configurations () != null ? parsedSplit .configurations ().get (treatment ) : null ;
142+ config = parsedSplit .configurations () != null ? parsedSplit .configurations ().get (treatment ) : null ;
134143 return new TreatmentLabelAndChangeNumber (
135144 treatment ,
136145 parsedCondition .label (),
@@ -140,7 +149,7 @@ private TreatmentLabelAndChangeNumber getTreatment(String matchingKey, String bu
140149 }
141150 }
142151
143- String config = parsedSplit .configurations () != null ? parsedSplit .configurations ().get (parsedSplit .defaultTreatment ()) : null ;
152+ config = parsedSplit .configurations () != null ? parsedSplit .configurations ().get (parsedSplit .defaultTreatment ()) : null ;
144153 return new TreatmentLabelAndChangeNumber (
145154 parsedSplit .defaultTreatment (),
146155 Labels .DEFAULT_RULE ,
@@ -158,7 +167,6 @@ private TreatmentLabelAndChangeNumber evaluateParsedSplit(String matchingKey, St
158167 if (parsedSplit == null ) {
159168 return new TreatmentLabelAndChangeNumber (Treatments .CONTROL , Labels .DEFINITION_NOT_FOUND );
160169 }
161-
162170 return getTreatment (matchingKey , bucketingKey , parsedSplit , attributes );
163171 } catch (ChangeNumberExceptionWrapper e ) {
164172 _log .error ("Evaluator Exception" , e .wrappedException ());
0 commit comments