Skip to content

Commit

Permalink
fix: Unsafe error handling in experimentation (#421)
Browse files Browse the repository at this point in the history
  • Loading branch information
ayushjain17 authored Feb 17, 2025
1 parent da23cfe commit 2cb6840
Showing 1 changed file with 23 additions and 21 deletions.
44 changes: 23 additions & 21 deletions crates/experimentation_platform/src/api/experiments/handlers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -271,15 +271,18 @@ async fn create(
let (resp_contexts, config_version_id) = process_cac_http_response(response).await?;
let created_contexts = resp_contexts
.into_iter()
.filter_map(|item| match item {
ContextBulkResponse::PUT(context) => Some(context),
ContextBulkResponse::DELETE(_) => None,
_ => {
log::error!("Unexpected response item: {:?}", item);
None
}
.map(|item| match item {
ContextBulkResponse::PUT(context) => Ok(context),
_ => Err(format!("Unexpected response item: {item:?}")),
})
.collect::<Vec<_>>();
.collect::<Result<Vec<_>, _>>()
.map_err(|err| {
log::error!(
"Something went wrong, failed to parse bulk operations response {err}"
);
unexpected_error!("Something went wrong")
})?;

for i in 0..created_contexts.len() {
let created_context = &created_contexts[i];
variants[i].context_id = Some(created_context.context_id.clone());
Expand Down Expand Up @@ -1111,15 +1114,17 @@ async fn update_overrides(
let (resp_contexts, config_version_id) = process_cac_http_response(response).await?;
let created_contexts = resp_contexts
.into_iter()
.filter_map(|item| match item {
ContextBulkResponse::PUT(context) => Some(context),
ContextBulkResponse::DELETE(_) => None,
_ => {
log::error!("Unexpected response item: {:?}", item);
None
}
.map(|item| match item {
ContextBulkResponse::REPLACE(context) => Ok(context),
_ => Err(format!("Unexpected response item: {item:?}")),
})
.collect::<Vec<_>>();
.collect::<Result<Vec<_>, _>>()
.map_err(|err| {
log::error!(
"Something went wrong, failed to parse bulk operations response {err}"
);
unexpected_error!("Something went wrong")
})?;
for i in 0..created_contexts.len() {
let created_context = &created_contexts[i];

Expand All @@ -1128,14 +1133,11 @@ async fn update_overrides(
}

/*************************** Updating experiment in DB **************************/
let new_variants_json = serde_json::to_value(new_variants).map_err(|e| {
log::error!("failed to serialize new variants to json with error: {e}");
bad_argument!("failed to update experiment, bad variant data")
})?;
let updated_experiment = diesel::update(experiments::experiments.find(experiment_id))
.set((
experiments::variants.eq(new_variants_json),
experiments::variants.eq(Variants::new(new_variants)),
experiments::override_keys.eq(override_keys),
experiments::change_reason.eq(change_reason),
experiments::last_modified.eq(Utc::now()),
experiments::last_modified_by.eq(user.get_email()),
))
Expand Down

0 comments on commit 2cb6840

Please sign in to comment.