Skip to content

Commit 9757d49

Browse files
update: enhance DecisionService and DecisionMessage to handle errors and include CMAB UUIDs in responses
1 parent 78f45bf commit 9757d49

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

core-api/src/main/java/com/optimizely/ab/Optimizely.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1450,7 +1450,17 @@ private Map<String, OptimizelyDecision> decideForKeys(@Nonnull OptimizelyUserCon
14501450

14511451
for (int i = 0; i < flagsWithoutForcedDecision.size(); i++) {
14521452
DecisionResponse<FeatureDecision> decision = decisionList.get(i);
1453+
boolean error = decision.isError();
14531454
String flagKey = flagsWithoutForcedDecision.get(i).getKey();
1455+
1456+
if (error) {
1457+
OptimizelyDecision optimizelyDecision = OptimizelyDecision.newErrorDecision(flagKey, user, DecisionMessage.DECISION_ERROR.reason(flagKey));
1458+
decisionMap.put(flagKey, optimizelyDecision);
1459+
if (validKeys.contains(flagKey)) {
1460+
validKeys.remove(flagKey);
1461+
}
1462+
}
1463+
14541464
flagDecisions.put(flagKey, decision.getResult());
14551465
decisionReasonsMap.get(flagKey).merge(decision.getReasons());
14561466
}

core-api/src/main/java/com/optimizely/ab/bucketing/DecisionService.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,10 @@ public List<DecisionResponse<FeatureDecision>> getVariationsForFeatureList(@Non
295295
reasons.merge(decisionVariationResponse.getReasons());
296296

297297
FeatureDecision decision = decisionVariationResponse.getResult();
298+
boolean error = decisionVariationResponse.isError();
299+
298300
if (decision != null) {
299-
decisions.add(new DecisionResponse(decision, reasons));
301+
decisions.add(new DecisionResponse(decision, reasons, error, decision.cmabUUID));
300302
continue;
301303
}
302304

@@ -354,11 +356,13 @@ DecisionResponse<FeatureDecision> getVariationFromExperiment(@Nonnull ProjectCon
354356
getVariationFromExperimentRule(projectConfig, featureFlag.getKey(), experiment, user, options, userProfileTracker);
355357
reasons.merge(decisionVariation.getReasons());
356358
Variation variation = decisionVariation.getResult();
357-
359+
String cmabUUID = decisionVariation.getCmabUUID();
358360
if (variation != null) {
359361
return new DecisionResponse(
360-
new FeatureDecision(experiment, variation, FeatureDecision.DecisionSource.FEATURE_TEST),
361-
reasons);
362+
new FeatureDecision(experiment, variation, FeatureDecision.DecisionSource.FEATURE_TEST, cmabUUID),
363+
reasons,
364+
decisionVariation.isError(),
365+
cmabUUID);
362366
}
363367
}
364368
} else {
@@ -792,7 +796,7 @@ private DecisionResponse<Variation> getVariationFromExperimentRule(@Nonnull Proj
792796

793797
variation = decisionResponse.getResult();
794798

795-
return new DecisionResponse(variation, reasons);
799+
return new DecisionResponse<>(variation, reasons, decisionResponse.isError(), decisionResponse.getCmabUUID());
796800
}
797801

798802
/**

core-api/src/main/java/com/optimizely/ab/optimizelydecision/DecisionMessage.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
public enum DecisionMessage {
2121
SDK_NOT_READY("Optimizely SDK not configured properly yet."),
2222
FLAG_KEY_INVALID("No flag was found for key \"%s\"."),
23-
VARIABLE_VALUE_INVALID("Variable value for key \"%s\" is invalid or wrong type.");
23+
VARIABLE_VALUE_INVALID("Variable value for key \"%s\" is invalid or wrong type."),
24+
DECISION_ERROR("Decision service error occured for key \"%s\".");
2425

2526
private String format;
2627

0 commit comments

Comments
 (0)