From a49bc6837475a204e4f7feafcb7ede0f22e89227 Mon Sep 17 00:00:00 2001 From: Chelsea Mafrica Date: Wed, 20 Sep 2023 11:54:18 -0700 Subject: [PATCH] runtime-rs: Update status for pause and resume Pause and resume task do not currently update the status of the container to paused or running, so fix this. This is specifically for pausing the task and not the VM. Fixes #6434 Signed-off-by: Chelsea Mafrica --- .../src/container_manager/container.rs | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/runtime-rs/crates/runtimes/virt_container/src/container_manager/container.rs b/src/runtime-rs/crates/runtimes/virt_container/src/container_manager/container.rs index efab56a682..145f895cfb 100644 --- a/src/runtime-rs/crates/runtimes/virt_container/src/container_manager/container.rs +++ b/src/runtime-rs/crates/runtimes/virt_container/src/container_manager/container.rs @@ -349,28 +349,42 @@ impl Container { } pub async fn pause(&self) -> Result<()> { - let inner = self.inner.read().await; - if inner.init_process.get_status().await == ProcessStatus::Paused { - warn!(self.logger, "container is paused no need to pause"); + let mut inner = self.inner.write().await; + let status = inner.init_process.get_status().await; + if status != ProcessStatus::Running { + warn!( + self.logger, + "container is in {:?} state, will not pause", status + ); return Ok(()); } + self.agent .pause_container(self.container_id.clone().into()) .await .context("agent pause container")?; + inner.set_state(ProcessStatus::Paused).await; + Ok(()) } pub async fn resume(&self) -> Result<()> { - let inner = self.inner.read().await; - if inner.init_process.get_status().await == ProcessStatus::Running { - warn!(self.logger, "container is running no need to resume"); + let mut inner = self.inner.write().await; + let status = inner.init_process.get_status().await; + if status != ProcessStatus::Paused { + warn!( + self.logger, + "container is in {:?} state, will not resume", status + ); return Ok(()); } + self.agent .resume_container(self.container_id.clone().into()) .await .context("agent pause container")?; + inner.set_state(ProcessStatus::Running).await; + Ok(()) }