Skip to content

Commit d93775a

Browse files
committed
Return Precondition in case of Not Found error, such that bazel can retry uploading results
1 parent a4e7731 commit d93775a

1 file changed

Lines changed: 26 additions & 5 deletions

File tree

nativelink-worker/src/local_worker.rs

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -369,11 +369,32 @@ impl<'a, T: WorkerApiClientTrait + 'static, U: RunningActionsManager> LocalWorke
369369
.err_tip(|| "Error while calling execution_response")?;
370370
},
371371
Err(e) => {
372-
grpc_client.execution_response(ExecuteResult{
373-
instance_name,
374-
operation_id,
375-
result: Some(execute_result::Result::InternalError(e.into())),
376-
}).await.err_tip(|| "Error calling execution_response with error")?;
372+
if e.code == Code::NotFound {
373+
warn!(
374+
?e,
375+
"Missing CAS inputs during prepare_action, returning FAILED_PRECONDITION"
376+
);
377+
let action_result = ActionResult {
378+
error: Some(make_err!(
379+
Code::FailedPrecondition,
380+
"{}",
381+
e.message_string()
382+
)),
383+
..ActionResult::default()
384+
};
385+
let action_stage = ActionStage::Completed(action_result);
386+
grpc_client.execution_response(ExecuteResult{
387+
instance_name,
388+
operation_id,
389+
result: Some(execute_result::Result::ExecuteResponse(action_stage.into())),
390+
}).await.err_tip(|| "Error calling execution_response with missing inputs")?;
391+
} else {
392+
grpc_client.execution_response(ExecuteResult{
393+
instance_name,
394+
operation_id,
395+
result: Some(execute_result::Result::InternalError(e.into())),
396+
}).await.err_tip(|| "Error calling execution_response with error")?;
397+
}
377398
},
378399
}
379400
Ok(())

0 commit comments

Comments
 (0)