This is an automated email from the ASF dual-hosted git repository. mssun pushed a commit to branch fix-cancel-error in repository https://gitbox.apache.org/repos/asf/incubator-teaclave.git
commit 948f38fb0757559f1dddcf940be02706d21e24cd Author: Mingshen Sun <[email protected]> AuthorDate: Fri Mar 18 12:43:48 2022 -0700 Better task state error and fix cancel errorissue in the example --- examples/python/mesapy_deadloop_cancel.py | 10 +++++++--- services/management/enclave/src/error.rs | 10 ++++++++-- services/management/enclave/src/service.rs | 12 +++++++----- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/examples/python/mesapy_deadloop_cancel.py b/examples/python/mesapy_deadloop_cancel.py index 2bd7206..3c6979a 100644 --- a/examples/python/mesapy_deadloop_cancel.py +++ b/examples/python/mesapy_deadloop_cancel.py @@ -75,13 +75,17 @@ class MesaPyEchoExample: result = client.get_task(task_id) if result["status"] != TaskStatus.Canceled: print("[+] Task is not canceled, cancel again") - client.cancel_task(task_id) + try: + client.cancel_task(task_id) + except Exception as e: + # this happens when task is already finished + print(f"[-] cancel task failed, reason: {str(e)}") try: result = client.get_task_result(task_id) except Exception as e: - print(f"[+] result: {str(e)}") - result = str(e) + print(f"[-] getting result failed, reason: {str(e)}") + sys.exit(1) return result diff --git a/services/management/enclave/src/error.rs b/services/management/enclave/src/error.rs index 0b77153..952fa30 100644 --- a/services/management/enclave/src/error.rs +++ b/services/management/enclave/src/error.rs @@ -39,8 +39,14 @@ pub(crate) enum ManagementServiceError { InvalidTaskId, #[error("invalid task")] InvalidTask, - #[error("failed to change task state")] - TaskStateError, + #[error("failed to assign data to task")] + TaskAssignDataError, + #[error("failed to approve task")] + TaskApproveError, + #[error("failed to invoke task")] + TaskInvokeError, + #[error("failed to cancel task, reason: {0}")] + TaskCancelError(String), } impl From<ManagementServiceError> for TeaclaveServiceResponseError { diff --git a/services/management/enclave/src/service.rs b/services/management/enclave/src/service.rs index c0d2d20..795b622 100644 --- a/services/management/enclave/src/service.rs +++ b/services/management/enclave/src/service.rs @@ -600,7 +600,7 @@ impl TeaclaveManagement for TeaclaveManagementService { let mut task: Task<Assign> = ts.try_into().map_err(|e| { log::warn!("Assign state error: {:?}", e); - ManagementServiceError::TaskStateError + ManagementServiceError::TaskAssignDataError })?; for (data_name, data_id) in request.inputs.iter() { @@ -643,7 +643,7 @@ impl TeaclaveManagement for TeaclaveManagementService { let mut task: Task<Approve> = ts.try_into().map_err(|e| { log::warn!("Approve state error: {:?}", e); - ManagementServiceError::TaskStateError + ManagementServiceError::TaskApproveError })?; task.approve(&user_id) @@ -685,7 +685,7 @@ impl TeaclaveManagement for TeaclaveManagementService { let mut task: Task<Stage> = ts.try_into().map_err(|e| { log::warn!("Stage state error: {:?}", e); - ManagementServiceError::TaskStateError + ManagementServiceError::TaskInvokeError })?; log::debug!("InvokeTask: get task: {:?}", task); @@ -736,7 +736,7 @@ impl TeaclaveManagement for TeaclaveManagementService { // race will not affect correctness/privacy let mut task: Task<Cancel> = ts.try_into().map_err(|e| { log::warn!("Cancel state error: {:?}", e); - ManagementServiceError::TaskStateError + ManagementServiceError::TaskCancelError("task is finished".to_string()) })?; log::debug!("Canceled Task: {:?}", task); @@ -744,7 +744,9 @@ impl TeaclaveManagement for TeaclaveManagementService { task.update_result(TaskResult::Err(TaskFailure { reason: "Task canceled".to_string(), })) - .map_err(|_| ManagementServiceError::TaskStateError)?; + .map_err(|_| { + ManagementServiceError::TaskCancelError("cannot update result".to_string()) + })?; let ts: TaskState = task.into(); self.write_to_db(&ts)?; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
