11package io .split .engine .evaluator ;
22
33import io .split .client .dtos .ConditionType ;
4+ import io .split .client .dtos .FallbackTreatmentsConfiguration ;
45import io .split .client .exceptions .ChangeNumberExceptionWrapper ;
56import io .split .engine .experiments .ParsedCondition ;
67import io .split .engine .experiments .ParsedSplit ;
1920import java .util .Map ;
2021
2122import static com .google .common .base .Preconditions .checkNotNull ;
23+ import static io .split .client .utils .Utils .checkFallbackTreatments ;
2224
2325public class EvaluatorImp implements Evaluator {
2426 private static final Logger _log = LoggerFactory .getLogger (EvaluatorImp .class );
2527
2628 private final SegmentCacheConsumer _segmentCacheConsumer ;
2729 private final EvaluationContext _evaluationContext ;
2830 private final SplitCacheConsumer _splitCacheConsumer ;
31+ private final FallbackTreatmentsConfiguration _fallbackTreatmentsConfiguration ;
2932
3033 public EvaluatorImp (SplitCacheConsumer splitCacheConsumer , SegmentCacheConsumer segmentCache ,
31- RuleBasedSegmentCacheConsumer ruleBasedSegmentCacheConsumer ) {
34+ RuleBasedSegmentCacheConsumer ruleBasedSegmentCacheConsumer ,
35+ FallbackTreatmentsConfiguration fallbackTreatmentsConfiguration ) {
3236 _splitCacheConsumer = checkNotNull (splitCacheConsumer );
3337 _segmentCacheConsumer = checkNotNull (segmentCache );
3438 _evaluationContext = new EvaluationContext (this , _segmentCacheConsumer , ruleBasedSegmentCacheConsumer );
39+ _fallbackTreatmentsConfiguration = fallbackTreatmentsConfiguration ;
3540 }
3641
3742 @ Override
3843 public TreatmentLabelAndChangeNumber evaluateFeature (String matchingKey , String bucketingKey , String featureFlag , Map <String ,
3944 Object > attributes ) {
4045 ParsedSplit parsedSplit = _splitCacheConsumer .get (featureFlag );
41- return evaluateParsedSplit (matchingKey , bucketingKey , attributes , parsedSplit );
46+ return evaluateParsedSplit (matchingKey , bucketingKey , attributes , parsedSplit , featureFlag );
4247 }
4348
4449 @ Override
@@ -49,7 +54,7 @@ public Map<String, TreatmentLabelAndChangeNumber> evaluateFeatures(String matchi
4954 if (parsedSplits == null ) {
5055 return results ;
5156 }
52- featureFlags .forEach (s -> results .put (s , evaluateParsedSplit (matchingKey , bucketingKey , attributes , parsedSplits .get (s ))));
57+ featureFlags .forEach (s -> results .put (s , evaluateParsedSplit (matchingKey , bucketingKey , attributes , parsedSplits .get (s ), s )));
5358 return results ;
5459 }
5560
@@ -172,18 +177,18 @@ private String getConfig(ParsedSplit parsedSplit, String returnedTreatment) {
172177 }
173178
174179 private TreatmentLabelAndChangeNumber evaluateParsedSplit (String matchingKey , String bucketingKey , Map <String , Object > attributes ,
175- ParsedSplit parsedSplit ) {
180+ ParsedSplit parsedSplit , String feature_name ) {
176181 try {
177182 if (parsedSplit == null ) {
178- return new TreatmentLabelAndChangeNumber (Treatments .CONTROL , Labels .DEFINITION_NOT_FOUND );
183+ return checkFallbackTreatments (Treatments .CONTROL , Labels .DEFINITION_NOT_FOUND , feature_name , null , _fallbackTreatmentsConfiguration );
179184 }
180185 return getTreatment (matchingKey , bucketingKey , parsedSplit , attributes );
181186 } catch (ChangeNumberExceptionWrapper e ) {
182187 _log .error ("Evaluator Exception" , e .wrappedException ());
183- return new EvaluatorImp . TreatmentLabelAndChangeNumber (Treatments .CONTROL , Labels .EXCEPTION , e .changeNumber ());
188+ return checkFallbackTreatments (Treatments .CONTROL , Labels .EXCEPTION , feature_name , e .changeNumber (), _fallbackTreatmentsConfiguration );
184189 } catch (Exception e ) {
185190 _log .error ("Evaluator Exception" , e );
186- return new EvaluatorImp . TreatmentLabelAndChangeNumber (Treatments .CONTROL , Labels .EXCEPTION );
191+ return checkFallbackTreatments (Treatments .CONTROL , Labels .EXCEPTION , feature_name , null , _fallbackTreatmentsConfiguration );
187192 }
188193 }
189194
0 commit comments