force stop and freeze wrapping

migrate
prplV 2025-05-29 16:59:12 +03:00
parent 81df3f8435
commit 08e99385b9
1 changed files with 29 additions and 7 deletions

View File

@ -191,20 +191,20 @@ pub mod v2 {
impl ProcessUnit for ProcessesController { impl ProcessUnit for ProcessesController {
async fn process(&mut self) { async fn process(&mut self) {
if self.negative_events.len() == 0 { if self.negative_events.len() == 0 {
match self.state { let conditions = (is_active(&self.name).await, is_frozen(&self.name).await);
ProcessState::Holding => { let state = &self.state;
info!("No negative dependecies events on {} process. Unfreezing ...", self.name); match (state, conditions) {
(ProcessState::Holding, (_, _)) => {
info!("No negative dependecies events on {} frozen process. Unfreezing ...", self.name);
if let Err(er) = unfreeze_process(&self.name).await { if let Err(er) = unfreeze_process(&self.name).await {
error!("Cannot unfreeze process {} : {}", self.name, er); error!("Cannot unfreeze process {} : {}", self.name, er);
} else { } else {
self.state = ProcessState::Pending; self.state = ProcessState::Pending;
// self.pid = Pid::new_from_output(get_pid(self.name.as_ref()).await);
// info!("{}: New PID - {}", self.name, self.pid);
info!("Process {} was unfreezed", &self.name); info!("Process {} was unfreezed", &self.name);
} }
}, },
ProcessState::Stopped => { (ProcessState::Stopped, (_, _)) => {
info!("No negative dependecies events on {} process. Starting ...", self.name); info!("No negative dependecies events on stopped {} process. Starting ...", self.name);
match start_process(&self.name, &self.bin).await { match start_process(&self.name, &self.bin).await {
Ok(pid) => { Ok(pid) => {
self.state = ProcessState::Pending; self.state = ProcessState::Pending;
@ -216,6 +216,28 @@ pub mod v2 {
}, },
} }
}, },
(ProcessState::Pending, (false, false)) => {
info!("{} process was impermissibly stopped. Starting ...", self.name);
match start_process(&self.name, &self.bin).await {
Ok(pid) => {
self.state = ProcessState::Pending;
self.pid = Pid(pid);
info!("{}: New PID - {}", self.name, self.pid);
},
Err(er) => {
error!("Cannot start process {} : {}", self.name, er);
},
}
},
(ProcessState::Pending, (true, true)) => {
info!("No negative dependecies events on {} process. Unfreezing ...", self.name);
if let Err(er) = unfreeze_process(&self.name).await {
error!("Cannot unfreeze process {} : {}", self.name, er);
} else {
self.state = ProcessState::Pending;
info!("Process {} was unfreezed", &self.name);
}
},
_ => {}, _ => {},
} }
} }