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]

Reply via email to