mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-19 21:35:44 +00:00
PVF: re-preparing artifact on failed runtime construction (#3187)
resolve https://github.com/paritytech/polkadot-sdk/issues/3139 - [x] use a distinguishable error for `execute_artifact` - [x] remove artifact in case of a `RuntimeConstruction` error during the execution - [x] augment the `validate_candidate_with_retry` of `ValidationBackend` with the case of retriable `RuntimeConstruction` error during the execution - [x] update the book (https://paritytech.github.io/polkadot-sdk/book/node/utility/pvf-host-and-workers.html#retrying-execution-requests) - [x] add a test - [x] run zombienet tests --------- Co-authored-by: s0me0ne-unkn0wn <48632512+s0me0ne-unkn0wn@users.noreply.github.com>
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
use crate::prepare::{PrepareSuccess, PrepareWorkerSuccess};
|
||||
use parity_scale_codec::{Decode, Encode};
|
||||
pub use sc_executor_common::error::Error as ExecuteError;
|
||||
|
||||
/// Result of PVF preparation from a worker, with checksum of the compiled PVF and stats of the
|
||||
/// preparation if successful.
|
||||
|
||||
@@ -40,6 +40,9 @@ pub enum WorkerResponse {
|
||||
},
|
||||
/// The candidate is invalid.
|
||||
InvalidCandidate(String),
|
||||
/// Instantiation of the WASM module instance failed during an execution.
|
||||
/// Possibly related to local issues or dirty node update. May be retried with re-preparation.
|
||||
RuntimeConstruction(String),
|
||||
/// The job timed out.
|
||||
JobTimedOut,
|
||||
/// The job process has died. We must kill the worker just in case.
|
||||
@@ -68,6 +71,9 @@ pub enum JobResponse {
|
||||
/// The result of parachain validation.
|
||||
result_descriptor: ValidationResult,
|
||||
},
|
||||
/// A possibly transient runtime instantiation error happened during the execution; may be
|
||||
/// retried with re-preparation
|
||||
RuntimeConstruction(String),
|
||||
/// The candidate is invalid.
|
||||
InvalidCandidate(String),
|
||||
}
|
||||
@@ -81,6 +87,15 @@ impl JobResponse {
|
||||
Self::InvalidCandidate(format!("{}: {}", ctx, msg))
|
||||
}
|
||||
}
|
||||
|
||||
/// Creates a may retry response from a context `ctx` and a message `msg` (which can be empty).
|
||||
pub fn runtime_construction(ctx: &'static str, msg: &str) -> Self {
|
||||
if msg.is_empty() {
|
||||
Self::RuntimeConstruction(ctx.to_string())
|
||||
} else {
|
||||
Self::RuntimeConstruction(format!("{}: {}", ctx, msg))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// An unexpected error occurred in the execution job process. Because this comes from the job,
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
//! Interface to the Substrate Executor
|
||||
|
||||
use crate::error::ExecuteError;
|
||||
use polkadot_primitives::{
|
||||
executor_params::{DEFAULT_LOGICAL_STACK_MAX, DEFAULT_NATIVE_STACK_MAX},
|
||||
ExecutorParam, ExecutorParams,
|
||||
@@ -109,7 +110,7 @@ pub unsafe fn execute_artifact(
|
||||
compiled_artifact_blob: &[u8],
|
||||
executor_params: &ExecutorParams,
|
||||
params: &[u8],
|
||||
) -> Result<Vec<u8>, String> {
|
||||
) -> Result<Vec<u8>, ExecuteError> {
|
||||
let mut extensions = sp_externalities::Extensions::new();
|
||||
|
||||
extensions.register(sp_core::traits::ReadRuntimeVersionExt::new(ReadRuntimeVersion));
|
||||
@@ -123,7 +124,6 @@ pub unsafe fn execute_artifact(
|
||||
Ok(Ok(ok)) => Ok(ok),
|
||||
Ok(Err(err)) | Err(err) => Err(err),
|
||||
}
|
||||
.map_err(|err| format!("execute error: {:?}", err))
|
||||
}
|
||||
|
||||
/// Constructs the runtime for the given PVF, given the artifact bytes.
|
||||
|
||||
Reference in New Issue
Block a user