diff --git a/lib/optimizely/decision_service.rb b/lib/optimizely/decision_service.rb index 051a8b6..f488669 100644 --- a/lib/optimizely/decision_service.rb +++ b/lib/optimizely/decision_service.rb @@ -100,7 +100,8 @@ def get_variation(project_config, experiment_id, user_context, user_profile_trac should_ignore_user_profile_service = decide_options.include? Optimizely::Decide::OptimizelyDecideOption::IGNORE_USER_PROFILE_SERVICE # Check for saved bucketing decisions if decide_options do not include ignoreUserProfileService - unless should_ignore_user_profile_service && user_profile_tracker + # Skip UPS for CMAB experiments as they require dynamic decisions + if !should_ignore_user_profile_service && user_profile_tracker && !experiment.key?('cmab') saved_variation_id, reasons_received = get_saved_variation_id(project_config, experiment_id, user_profile_tracker.user_profile) decide_reasons.push(*reasons_received) if saved_variation_id @@ -109,6 +110,10 @@ def get_variation(project_config, experiment_id, user_context, user_profile_trac decide_reasons.push(message) return VariationResult.new(nil, false, decide_reasons, saved_variation_id) end + elsif experiment.key?('cmab') + message = "Skipping User Profile Service for CMAB experiment '#{experiment_key}'." + @logger.log(Logger::DEBUG, message) + decide_reasons.push(message) end # Check audience conditions @@ -155,7 +160,8 @@ def get_variation(project_config, experiment_id, user_context, user_profile_trac decide_reasons.push(message) if message # Persist bucketing decision - user_profile_tracker.update_user_profile(experiment_id, variation_id) unless should_ignore_user_profile_service && user_profile_tracker + # Skip UPS for CMAB experiments as they require dynamic decisions + user_profile_tracker.update_user_profile(experiment_id, variation_id) if !should_ignore_user_profile_service && user_profile_tracker && !experiment.key?('cmab') VariationResult.new(cmab_uuid, false, decide_reasons, variation_id) end