From 1af436949ec2b294d456d81c3951713feb958adc Mon Sep 17 00:00:00 2001 From: Alexey Velikiy Date: Mon, 1 Nov 2021 01:53:59 +0300 Subject: [PATCH] cancel learning tasks #27 --- .../services/analytic_service/analytic_service.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/server/src/services/analytic_service/analytic_service.rs b/server/src/services/analytic_service/analytic_service.rs index 01f11fa..5563642 100644 --- a/server/src/services/analytic_service/analytic_service.rs +++ b/server/src/services/analytic_service/analytic_service.rs @@ -31,6 +31,9 @@ pub struct AnalyticService { learning_status: LearningStatus, tx: mpsc::Sender, rx: mpsc::Receiver, + + // handlers + learning_handler: Option> } impl AnalyticService { @@ -48,6 +51,9 @@ impl AnalyticService { learning_status: LearningStatus::Initialization, tx, rx, + + // handlers + learning_handler: None } } @@ -58,7 +64,11 @@ impl AnalyticService { fn consume_request(&mut self, req: types::RequestType) -> () { match req { RequestType::RunLearning => { - tokio::spawn({ + if self.learning_handler.is_some() { + self.learning_handler.as_ref().unwrap().abort(); + self.learning_handler = None; + } + self.learning_handler = Some(tokio::spawn({ self.learning_status = LearningStatus::Starting; let tx = self.tx.clone(); let ms = self.metric_service.clone(); @@ -66,7 +76,7 @@ impl AnalyticService { async move { AnalyticService::run_learning(tx, ms, ss).await; } - }); + })); } RequestType::GetStatus(tx) => { tx.send(self.learning_status.clone()).unwrap(); @@ -79,6 +89,7 @@ impl AnalyticService { // TODO: handle when learning panic ResponseType::LearningStarted => self.learning_status = LearningStatus::Learning, ResponseType::LearningFinished(results) => { + self.learning_handler = None; self.learning_results = Some(results); self.learning_status = LearningStatus::Ready; },