From 009d52c0ea657b054414fcd6c29e42cdd2b7d179 Mon Sep 17 00:00:00 2001 From: bytecheers Date: Fri, 12 Sep 2025 10:04:26 +0800 Subject: [PATCH 1/2] =?UTF-8?q?unwrap=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: bytecheers Change-Id: I7cce3a351fbaebd7e49c61c3c8e558f50939d123 --- services/src/ability.rs | 33 ++++++++++++++++++++++++--------- services/src/lib.rs | 12 ++++++------ 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/services/src/ability.rs b/services/src/ability.rs index bdd421df..093a6244 100644 --- a/services/src/ability.rs +++ b/services/src/ability.rs @@ -63,10 +63,12 @@ impl RequestAbility { PANIC_INFO = Some(info); })); - ylong_runtime::builder::RuntimeBuilder::new_multi_thread() + if let Err(e) = ylong_runtime::builder::RuntimeBuilder::new_multi_thread() .worker_num(4) .build_global() - .unwrap(); + { + error!("ylong_runtime error: {}", e); + } info!("ylong_runtime init ok"); let runcount_manager = RunCountManager::init(); @@ -79,7 +81,11 @@ impl RequestAbility { unsafe { SYSTEM_CONFIG_MANAGER.write(SystemConfigManager::init()) }; info!("system_config_manager init ok"); - let task_manager = TaskManager::init(runcount_manager.clone(), client_manger.clone(), self.active_counter.clone()); + let task_manager = TaskManager::init( + runcount_manager.clone(), + client_manger.clone(), + self.active_counter.clone(), + ); *self.task_manager.lock().unwrap() = Some(task_manager.clone()); info!("task_manager init ok"); @@ -119,8 +125,14 @@ impl Ability for RequestAbility { ) { info!("on_start_with_reason: {:?}", reason); if reason.name == "usual.event.USER_REMOVED" { - let user_id = reason.value.parse::().unwrap(); - account::remove_account_tasks(user_id); + match reason.value.parse::() { + Ok(user_id) => { + account::remove_account_tasks(user_id); + } + Err(e) => { + error!("on_start_with_reason err {}", e); + } + } self.init(handler); } else { self.init(handler); @@ -164,11 +176,14 @@ static A: extern "C" fn() = { #[link_section = ".text.startup"] extern "C" fn init() { info!("begin request service init"); - let system_ability = RequestAbility::new() + if let Some(system_ability) = RequestAbility::new() .build_system_ability(samgr::definition::DOWNLOAD_SERVICE_ID, false) - .unwrap(); - system_ability.register(); - info!("request service inited"); + { + system_ability.register(); + info!("request service inited"); + } else { + info!("request service inited error"); + } } init }; diff --git a/services/src/lib.rs b/services/src/lib.rs index 4ba5cdaf..c8f57133 100644 --- a/services/src/lib.rs +++ b/services/src/lib.rs @@ -83,9 +83,9 @@ mod tests { match DB_LOCK.lock() { Ok(inner) => inner, Err(_) => { - RequestDb::get_instance() - .execute("DELETE FROM request_task") - .unwrap(); + if let Err(e) = RequestDb::get_instance().execute("DELETE FROM request_task") { + error!("lock delete failed: {}", e); + } DB_LOCK = std::sync::Mutex::new(()); DB_LOCK.lock().unwrap() } @@ -100,9 +100,9 @@ mod tests { impl<'a> Drop for DatabaseLock<'a> { fn drop(&mut self) { - RequestDb::get_instance() - .execute("DELETE FROM request_task") - .unwrap(); + if let Err(e) = RequestDb::get_instance().execute("DELETE FROM request_task") { + error!("drop delete failed: {}", e); + } } } -- Gitee From c6af10bf000ba89ab84dcc54897c4bfd68f12bfc Mon Sep 17 00:00:00 2001 From: ljy9810 Date: Fri, 12 Sep 2025 17:23:21 +0800 Subject: [PATCH 2/2] =?UTF-8?q?unwrap=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ljy9810 --- services/src/manage/task_manager.rs | 24 ++++++++++-- services/src/service/run_count/manager.rs | 9 ++++- services/src/task/config.rs | 1 + services/src/task/download.rs | 45 +++++++++++++---------- services/src/task/operator.rs | 7 +++- services/src/task/request_task.rs | 7 +++- services/src/task/task_control.rs | 10 ++++- 7 files changed, 77 insertions(+), 26 deletions(-) diff --git a/services/src/manage/task_manager.rs b/services/src/manage/task_manager.rs index f8b97c98..e2fb5df2 100644 --- a/services/src/manage/task_manager.rs +++ b/services/src/manage/task_manager.rs @@ -467,21 +467,39 @@ impl TaskManagerTx { let (tx, rx) = oneshot::channel(); let event = QueryEvent::Show(task_id, uid, tx); let _ = self.send_event(TaskManagerEvent::Query(event)); - ylong_runtime::block_on(rx).unwrap() + match ylong_runtime::block_on(rx) { + Ok(task_info) => task_info, + Err(error) => { + error!("In `show`, block on failed, err {}", error); + None + } + } } pub(crate) fn query(&self, task_id: u32, action: Action) -> Option { let (tx, rx) = oneshot::channel(); let event = QueryEvent::Query(task_id, action, tx); let _ = self.send_event(TaskManagerEvent::Query(event)); - ylong_runtime::block_on(rx).unwrap() + match ylong_runtime::block_on(rx) { + Ok(task_info) => task_info, + Err(error) => { + error!("In `query`, block on failed, err {}", error); + None + } + } } pub(crate) fn touch(&self, uid: u64, task_id: u32, token: String) -> Option { let (tx, rx) = oneshot::channel(); let event = QueryEvent::Touch(task_id, uid, token, tx); let _ = self.send_event(TaskManagerEvent::Query(event)); - ylong_runtime::block_on(rx).unwrap() + match ylong_runtime::block_on(rx) { + Ok(task_info) => task_info, + Err(error) => { + error!("In `touch`, block on failed, err {}", error); + None + } + } } } diff --git a/services/src/service/run_count/manager.rs b/services/src/service/run_count/manager.rs index 9e797239..d349491a 100644 --- a/services/src/service/run_count/manager.rs +++ b/services/src/service/run_count/manager.rs @@ -58,7 +58,14 @@ impl RunCountManagerEntry { let (tx, rx) = oneshot::channel::(); let event = RunCountEvent::Subscribe(pid, obj, tx); self.send_event(event); - ylong_runtime::block_on(rx).unwrap() + match ylong_runtime::block_on(rx) { + Ok(error_code) => error_code, + Err(error) => { + error!("In `subscribe_run_count`, block on failed, err {}", error); + // todo: may be another error code + ErrorCode::Other + } + } } pub(crate) fn unsubscribe_run_count(&self, pid: u64) -> ErrorCode { diff --git a/services/src/task/config.rs b/services/src/task/config.rs index f1fe03b3..e08b8239 100644 --- a/services/src/task/config.rs +++ b/services/src/task/config.rs @@ -474,6 +474,7 @@ impl Serialize for TaskConfig { parcel.write(&file_spec.mime_type)?; parcel.write(&file_spec.is_user_file)?; if file_spec.is_user_file { + // Safety: If is user file, the `fd` must be some. let file = unsafe { File::from_raw_fd(file_spec.fd.unwrap()) }; parcel.write_file(file)?; } diff --git a/services/src/task/download.rs b/services/src/task/download.rs index e2c452ff..40bb6efc 100644 --- a/services/src/task/download.rs +++ b/services/src/task/download.rs @@ -105,15 +105,19 @@ pub(crate) async fn download(task: Arc, abort_flag: Arc impl RequestTask { async fn prepare_download(&self) -> Result<(), TaskError> { - let file = self.files.get(0).unwrap(); - task_control::file_seek(file.clone(), SeekFrom::End(0)).await?; - let downloaded = task_control::file_metadata(file).await?.len() as usize; + if let Some(file) = self.files.get(0) { + task_control::file_seek(file.clone(), SeekFrom::End(0)).await?; + let downloaded = task_control::file_metadata(file).await?.len() as usize; - let mut progress = self.progress.lock().unwrap(); - progress.common_data.index = 0; - progress.common_data.total_processed = downloaded; - progress.common_data.state = State::Running.repr; - progress.processed = vec![downloaded]; + let mut progress = self.progress.lock().unwrap(); + progress.common_data.index = 0; + progress.common_data.total_processed = downloaded; + progress.common_data.state = State::Running.repr; + progress.processed = vec![downloaded]; + } else { + error!("prepare_download err, no file in the task"); + return Err(TaskError::Failed(Reason::OthersError)); + } Ok(()) } } @@ -166,17 +170,20 @@ pub(crate) async fn download_inner( info!("task {} server not support range", task.task_id()); return Err(TaskError::Failed(Reason::UnsupportedRangeRequest)); } - let file = task.files.get(0).unwrap(); - - let has_downloaded = task_control::file_metadata(file).await?.len() > 0; - if has_downloaded { - error!("task {} file not cleared", task.task_id()); - sys_event!( - ExecFault, - DfxCode::TASK_FAULT_09, - &format!("task {} file not cleared", task.task_id()) - ); - task_control::clear_downloaded_file(task.clone()).await?; + if let Some(file) = task.files.get(0) { + let has_downloaded = task_control::file_metadata(file).await?.len() > 0; + if has_downloaded { + error!("task {} file not cleared", task.task_id()); + sys_event!( + ExecFault, + DfxCode::TASK_FAULT_09, + &format!("task {} file not cleared", task.task_id()) + ); + task_control::clear_downloaded_file(task.clone()).await?; + } + } else { + error!("download_inner err, no file in the `task`"); + return Err(TaskError::Failed(Reason::OthersError)); } } } diff --git a/services/src/task/operator.rs b/services/src/task/operator.rs index f6765251..2d6d7083 100644 --- a/services/src/task/operator.rs +++ b/services/src/task/operator.rs @@ -97,7 +97,12 @@ impl TaskOperator { data: &[u8], skip_size: usize, ) -> Poll> { - let file_mutex = self.task.files.get(0).unwrap(); + let file_mutex = if let Some(mutex) = self.task.files.get(0) { + mutex + } else { + error!("poll_write_file err, no file in the `task`"); + return Poll::Ready(Err(HttpClientError::other("error msg"))); + }; let mut file = file_mutex.lock().unwrap(); if self.abort_flag.load(Ordering::Acquire) { diff --git a/services/src/task/request_task.rs b/services/src/task/request_task.rs index 6bf22b9f..129e6d26 100644 --- a/services/src/task/request_task.rs +++ b/services/src/task/request_task.rs @@ -340,7 +340,12 @@ impl RequestTask { ) -> Result { let mut request_builder = task.build_request_builder()?; - let file = task.files.get(0).unwrap(); + let file = if let Some(mutex) = task.files.get(0) { + mutex + } else { + error!("build_download_request err, no file in the `task`"); + return Err(TaskError::Failed(Reason::OthersError)); + }; let has_downloaded = task_control::file_metadata(file).await?.len(); let resume_download = has_downloaded > 0; diff --git a/services/src/task/task_control.rs b/services/src/task/task_control.rs index d634f940..3992f66c 100644 --- a/services/src/task/task_control.rs +++ b/services/src/task/task_control.rs @@ -92,7 +92,15 @@ pub(crate) async fn clear_downloaded_file(task: Arc) -> Result<(), info!("task {} clear downloaded file", task.task_id()); runtime_spawn_blocking(move || { { - let file_mutex = task.files.get(0).unwrap(); + let file_mutex = if let Some(mutex) = task.files.get(0) { + mutex + } else { + error!("clear_downloaded_file err, 1no file in the `task`"); + return Err(io::Error::new(io::ErrorKind::Other, + "clear_downloaded_file err, 1no file in the `task`" + )); + }; + let mut file = file_mutex.lock().unwrap(); file.set_len(0)?; file.seek(SeekFrom::Start(0))?; -- Gitee