From dd80e7d78d66569a521f97fa54a133cd7be7b7ae Mon Sep 17 00:00:00 2001 From: Kai <7630809+Kailai-Wang@users.noreply.github.com> Date: Sat, 13 Jul 2024 01:25:16 +0200 Subject: [PATCH] Bug fix: wrong call_index type and use recv_timeout (#2893) * Fix call_index type * Try to use recv_timeout --- .../receiver/src/lib.rs | 23 ++++++++++++++----- .../litentry/core/vc-task/receiver/src/lib.rs | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/tee-worker/litentry/core/parachain-extrinsic-task/receiver/src/lib.rs b/tee-worker/litentry/core/parachain-extrinsic-task/receiver/src/lib.rs index 083d230d20..dd2deb9c4c 100644 --- a/tee-worker/litentry/core/parachain-extrinsic-task/receiver/src/lib.rs +++ b/tee-worker/litentry/core/parachain-extrinsic-task/receiver/src/lib.rs @@ -11,10 +11,16 @@ use itp_ocall_api::EnclaveOnChainOCallApi; use itp_types::parentchain::ParentchainId; use lc_parachain_extrinsic_task_sender::init_parachain_extrinsic_sender_storage; use log::*; -use std::{format, string::String, sync::Arc, time, vec}; +use std::{ + format, + string::String, + sync::{mpsc::RecvTimeoutError, Arc}, + time, vec, +}; const MAX_BATCH_SIZE: usize = 500; const BATCH_EXTRINSIC_INTERVAL: time::Duration = time::Duration::from_secs(6); +const TASK_RECV_INTERVAL: time::Duration = time::Duration::from_secs(1); pub fn run_parachain_extrinsic_task_receiver( api: Arc, @@ -32,13 +38,18 @@ where loop { let start_time = time::Instant::now(); while start_time.elapsed() < BATCH_EXTRINSIC_INTERVAL { - if let Ok(call) = task_receiver.recv() { - calls.push(call); - } - if calls.len() == MAX_BATCH_SIZE { - break + match task_receiver.recv_timeout(TASK_RECV_INTERVAL) { + Ok(call) => { + calls.push(call); + if calls.len() == MAX_BATCH_SIZE { + break + } + }, + Err(RecvTimeoutError::Timeout) => continue, + Err(RecvTimeoutError::Disconnected) => break, } } + if !calls.is_empty() { let extrinsic = match extrinsic_factory.create_batch_extrinsic(calls.drain(..).collect(), None) { diff --git a/tee-worker/litentry/core/vc-task/receiver/src/lib.rs b/tee-worker/litentry/core/vc-task/receiver/src/lib.rs index a599f784ad..d72c915e6f 100644 --- a/tee-worker/litentry/core/vc-task/receiver/src/lib.rs +++ b/tee-worker/litentry/core/vc-task/receiver/src/lib.rs @@ -565,7 +565,7 @@ where let call_index = node_metadata_repo .get_from_metadata(|m| m.vc_issued_call_indexes()) .map_err(|e| RequestVcErrorDetail::MetadataRetrievalFailed(e.to_string()))? - .map_err(|e| RequestVcErrorDetail::InvalidMetadata(format!("{:?}", e))); + .map_err(|e| RequestVcErrorDetail::InvalidMetadata(format!("{:?}", e)))?; let key = maybe_key.ok_or(RequestVcErrorDetail::MissingAesKey)?; let call = OpaqueCall::from_tuple(&(