Browse Source

cancel learning tasks #27

pull/25/head
Alexey Velikiy 3 years ago
parent
commit
1af436949e
  1. 15
      server/src/services/analytic_service/analytic_service.rs

15
server/src/services/analytic_service/analytic_service.rs

@ -31,6 +31,9 @@ pub struct AnalyticService {
learning_status: LearningStatus, learning_status: LearningStatus,
tx: mpsc::Sender<AnalyticServiceMessage>, tx: mpsc::Sender<AnalyticServiceMessage>,
rx: mpsc::Receiver<AnalyticServiceMessage>, rx: mpsc::Receiver<AnalyticServiceMessage>,
// handlers
learning_handler: Option<tokio::task::JoinHandle<()>>
} }
impl AnalyticService { impl AnalyticService {
@ -48,6 +51,9 @@ impl AnalyticService {
learning_status: LearningStatus::Initialization, learning_status: LearningStatus::Initialization,
tx, tx,
rx, rx,
// handlers
learning_handler: None
} }
} }
@ -58,7 +64,11 @@ impl AnalyticService {
fn consume_request(&mut self, req: types::RequestType) -> () { fn consume_request(&mut self, req: types::RequestType) -> () {
match req { match req {
RequestType::RunLearning => { 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; self.learning_status = LearningStatus::Starting;
let tx = self.tx.clone(); let tx = self.tx.clone();
let ms = self.metric_service.clone(); let ms = self.metric_service.clone();
@ -66,7 +76,7 @@ impl AnalyticService {
async move { async move {
AnalyticService::run_learning(tx, ms, ss).await; AnalyticService::run_learning(tx, ms, ss).await;
} }
}); }));
} }
RequestType::GetStatus(tx) => { RequestType::GetStatus(tx) => {
tx.send(self.learning_status.clone()).unwrap(); tx.send(self.learning_status.clone()).unwrap();
@ -79,6 +89,7 @@ impl AnalyticService {
// TODO: handle when learning panic // TODO: handle when learning panic
ResponseType::LearningStarted => self.learning_status = LearningStatus::Learning, ResponseType::LearningStarted => self.learning_status = LearningStatus::Learning,
ResponseType::LearningFinished(results) => { ResponseType::LearningFinished(results) => {
self.learning_handler = None;
self.learning_results = Some(results); self.learning_results = Some(results);
self.learning_status = LearningStatus::Ready; self.learning_status = LearningStatus::Ready;
}, },

Loading…
Cancel
Save