From 660c68464076d45238fe80215cb40199419228c5 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Sat, 6 Apr 2019 11:23:53 +0200 Subject: [PATCH] src/server/worker_task.rs: return upid_str --- src/server/worker_task.rs | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/server/worker_task.rs b/src/server/worker_task.rs index 797a7d0e..983743c4 100644 --- a/src/server/worker_task.rs +++ b/src/server/worker_task.rs @@ -28,10 +28,10 @@ static WORKER_TASK_NEXT_ID: AtomicUsize = ATOMIC_USIZE_INIT; /// We use this to uniquely identify worker task. UPIDs have a short /// string repesentaion, which gives additional information about the /// type of the task. for example: -/// -/// UPID:{node}:{pid}:{pstart}:{task_id}:{starttime}:{worker_type}:{worker_id}:{username}: -/// UPID:elsa:00004F37:0039E469:00000000:5CA78B83:garbage_collection::root@pam: -/// +/// ```text +/// UPID:{node}:{pid}:{pstart}:{task_id}:{starttime}:{worker_type}:{worker_id}:{username}: +/// UPID:elsa:00004F37:0039E469:00000000:5CA78B83:garbage_collection::root@pam: +/// ``` /// Please note that we use tokio, so a single thread can run multiple /// tasks. #[derive(Debug, Clone)] @@ -375,12 +375,19 @@ impl WorkerTask { } /// Spawn a new tokio task/future. - pub fn spawn(worker_type: &str, worker_id: Option, username: &str, to_stdout: bool, f: F) -> Result<(), Error> + pub fn spawn( + worker_type: &str, + worker_id: Option, + username: &str, + to_stdout: bool, + f: F, + ) -> Result where F: Send + 'static + FnOnce(Arc) -> T, T: Send + 'static + Future, { let worker = WorkerTask::new(worker_type, worker_id, username, to_stdout)?; let task_id = worker.upid.task_id; + let upid_str = worker.upid.to_string(); tokio::spawn(f(worker.clone()).then(move |result| { WORKER_TASK_LIST.lock().unwrap().remove(&task_id); @@ -389,11 +396,17 @@ impl WorkerTask { Ok(()) })); - Ok(()) + Ok(upid_str) } /// Create a new worker thread. - pub fn new_thread(worker_type: &str, worker_id: Option, username: &str, to_stdout: bool, f: F) -> Result<(), Error> + pub fn new_thread( + worker_type: &str, + worker_id: Option, + username: &str, + to_stdout: bool, + f: F, + ) -> Result where F: Send + 'static + FnOnce(Arc) -> Result<(), Error> { println!("register worker thread"); @@ -402,6 +415,7 @@ impl WorkerTask { let worker = WorkerTask::new(worker_type, worker_id, username, to_stdout)?; let task_id = worker.upid.task_id; + let upid_str = worker.upid.to_string(); let _child = std::thread::spawn(move || { let result = f(worker.clone()); @@ -413,7 +427,7 @@ impl WorkerTask { tokio::spawn(c.then(|_| Ok(()))); - Ok(()) + Ok(upid_str) } fn log_result(&self, result: Result<(), Error>) {