mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-14 05:11:09 +00:00
change prepare worker to use fork instead of threads (#1685)
Co-authored-by: Marcin S <marcin@realemail.net>
This commit is contained in:
@@ -642,14 +642,19 @@ async fn validate_candidate_exhaustive(
|
||||
},
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::HardTimeout)) =>
|
||||
Ok(ValidationResult::Invalid(InvalidCandidate::Timeout)),
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::WorkerReportedError(e))) =>
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::WorkerReportedInvalid(e))) =>
|
||||
Ok(ValidationResult::Invalid(InvalidCandidate::ExecutionError(e))),
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)) =>
|
||||
Ok(ValidationResult::Invalid(InvalidCandidate::ExecutionError(
|
||||
"ambiguous worker death".to_string(),
|
||||
))),
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::Panic(err))) =>
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError(err))) =>
|
||||
Ok(ValidationResult::Invalid(InvalidCandidate::ExecutionError(err))),
|
||||
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousJobDeath(err))) =>
|
||||
Ok(ValidationResult::Invalid(InvalidCandidate::ExecutionError(format!(
|
||||
"ambiguous job death: {err}"
|
||||
)))),
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::PrepareError(e))) => {
|
||||
// In principle if preparation of the `WASM` fails, the current candidate can not be the
|
||||
// reason for that. So we can't say whether it is invalid or not. In addition, with
|
||||
@@ -741,9 +746,9 @@ trait ValidationBackend {
|
||||
};
|
||||
|
||||
// Allow limited retries for each kind of error.
|
||||
let mut num_death_retries_left = 1;
|
||||
let mut num_job_error_retries_left = 1;
|
||||
let mut num_internal_retries_left = 1;
|
||||
let mut num_awd_retries_left = 1;
|
||||
let mut num_panic_retries_left = 1;
|
||||
loop {
|
||||
// Stop retrying if we exceeded the timeout.
|
||||
if total_time_start.elapsed() + retry_delay > exec_timeout {
|
||||
@@ -752,11 +757,12 @@ trait ValidationBackend {
|
||||
|
||||
match validation_result {
|
||||
Err(ValidationError::InvalidCandidate(
|
||||
WasmInvalidCandidate::AmbiguousWorkerDeath,
|
||||
)) if num_awd_retries_left > 0 => num_awd_retries_left -= 1,
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::Panic(_)))
|
||||
if num_panic_retries_left > 0 =>
|
||||
num_panic_retries_left -= 1,
|
||||
WasmInvalidCandidate::AmbiguousWorkerDeath |
|
||||
WasmInvalidCandidate::AmbiguousJobDeath(_),
|
||||
)) if num_death_retries_left > 0 => num_death_retries_left -= 1,
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError(_)))
|
||||
if num_job_error_retries_left > 0 =>
|
||||
num_job_error_retries_left -= 1,
|
||||
Err(ValidationError::InternalError(_)) if num_internal_retries_left > 0 =>
|
||||
num_internal_retries_left -= 1,
|
||||
_ => break,
|
||||
|
||||
@@ -695,11 +695,13 @@ fn candidate_validation_retry_panic_errors() {
|
||||
|
||||
let v = executor::block_on(validate_candidate_exhaustive(
|
||||
MockValidateCandidateBackend::with_hardcoded_result_list(vec![
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::Panic("foo".into()))),
|
||||
// Throw an AWD error, we should still retry again.
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)),
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError("foo".into()))),
|
||||
// Throw an AJD error, we should still retry again.
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousJobDeath(
|
||||
"baz".into(),
|
||||
))),
|
||||
// Throw another panic error.
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::Panic("bar".into()))),
|
||||
Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError("bar".into()))),
|
||||
]),
|
||||
validation_data,
|
||||
validation_code,
|
||||
@@ -1216,7 +1218,7 @@ fn precheck_properly_classifies_outcomes() {
|
||||
|
||||
inner(Err(PrepareError::Prevalidation("foo".to_owned())), PreCheckOutcome::Invalid);
|
||||
inner(Err(PrepareError::Preparation("bar".to_owned())), PreCheckOutcome::Invalid);
|
||||
inner(Err(PrepareError::Panic("baz".to_owned())), PreCheckOutcome::Invalid);
|
||||
inner(Err(PrepareError::JobError("baz".to_owned())), PreCheckOutcome::Invalid);
|
||||
|
||||
inner(Err(PrepareError::TimedOut), PreCheckOutcome::Failed);
|
||||
inner(Err(PrepareError::IoErr("fizz".to_owned())), PreCheckOutcome::Failed);
|
||||
|
||||
Reference in New Issue
Block a user