mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 19:51:05 +00:00
Move artifacts states into memory in PVF validation host (#3907)
* pvf host: store only compiled artifacts on disk * Correctly handle failed artifacts * Serialize result of PVF preparation uniquely * Set the artifact state depending on the result * Return the result of PVF preparation directly * Move PrepareError to the error module * Update doc comments * Update misleading comment * Cleanup docs * Conclude a test job with an error Co-authored-by: Sergei Shulepov <sergei@parity.io>
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use crate::{
|
||||
artifacts::{Artifact, ArtifactPathId},
|
||||
artifacts::{ArtifactPathId, CompiledArtifact},
|
||||
executor_intf::TaskExecutor,
|
||||
worker_common::{
|
||||
bytes_to_path, framed_recv, framed_send, path_to_bytes, spawn_with_program_path,
|
||||
@@ -49,8 +49,8 @@ pub enum Outcome {
|
||||
/// PVF execution completed successfully and the result is returned. The worker is ready for
|
||||
/// another job.
|
||||
Ok { result_descriptor: ValidationResult, duration_ms: u64, idle_worker: IdleWorker },
|
||||
/// The candidate validation failed. It may be for example because the preparation process
|
||||
/// produced an error or the wasm execution triggered a trap.
|
||||
/// The candidate validation failed. It may be for example because the wasm execution triggered a trap.
|
||||
/// Errors related to the preparation process are not expected to be encountered by the execution workers.
|
||||
InvalidCandidate { err: String, idle_worker: IdleWorker },
|
||||
/// An internal error happened during the validation. Such an error is most likely related to
|
||||
/// some transient glitch.
|
||||
@@ -216,18 +216,12 @@ async fn validate_using_artifact(
|
||||
Ok(b) => b,
|
||||
};
|
||||
|
||||
let artifact = match Artifact::deserialize(&artifact_bytes) {
|
||||
let artifact = match CompiledArtifact::decode(&mut artifact_bytes.as_slice()) {
|
||||
Err(e) => return Response::InternalError(format!("artifact deserialization: {:?}", e)),
|
||||
Ok(a) => a,
|
||||
};
|
||||
|
||||
let compiled_artifact = match &artifact {
|
||||
Artifact::PrevalidationErr(msg) => return Response::format_invalid("prevalidation", msg),
|
||||
Artifact::PreparationErr(msg) => return Response::format_invalid("preparation", msg),
|
||||
Artifact::DidntMakeIt => return Response::format_invalid("preparation timeout", ""),
|
||||
|
||||
Artifact::Compiled { compiled_artifact } => compiled_artifact,
|
||||
};
|
||||
let compiled_artifact = artifact.as_ref();
|
||||
|
||||
let validation_started_at = Instant::now();
|
||||
let descriptor_bytes = match unsafe {
|
||||
|
||||
Reference in New Issue
Block a user