Skip to content

Commit

Permalink
bugfix: modify tty_win info in runtime when handling ResizePtyRequest
Browse files Browse the repository at this point in the history
Currently, we only create the new exec process in runtime, this will cause error
when the following requests needing to be handled:

- Task: exec process
- Task: resize process pty
- ...

The agent do not do_exec_process when we handle ExecProcess, thus we can not find
any process information in the guest when we handle ResizeProcessPty. This will
report an error.

In this commit, the handling process is modified to the:
* Modify process tty_win information in runtime
* If the exec process is not running, we just return. And the truly pty_resize will
happen when start_process

Fixes: #6248

Signed-off-by: Yushuo <y-shuo@linux.alibaba.com>
  • Loading branch information
YushuoEdge committed Mar 10, 2023
1 parent fef268a commit e7bca62
Showing 1 changed file with 23 additions and 10 deletions.
Expand Up @@ -344,20 +344,33 @@ impl Container {
height: u32,
) -> Result<()> {
let logger = logger_with_process(process);
let inner = self.inner.read().await;
let mut inner = self.inner.write().await;
if inner.init_process.get_status().await != ProcessStatus::Running {
warn!(logger, "container is not running");
return Ok(());
}
self.agent
.tty_win_resize(agent::TtyWinResizeRequest {
process_id: process.clone().into(),
row: height,
column: width,
})
.await
.context("resize pty")?;
Ok(())

if process.exec_id.is_empty() {
inner.init_process.height = height;
inner.init_process.width = width;
} else if let Some(exec) = inner.exec_processes.get_mut(&process.exec_id) {
exec.process.height = height;
exec.process.width = width;

// for some case, resize_pty request should be handled while the process has not been started in agent
// just return here, and truly resize_pty will happen in start_process
if exec.process.get_status().await != ProcessStatus::Running {
return Ok(());
}
} else {
return Err(anyhow!(
"could not find process {} in container {}",
process.exec_id(),
process.container_id()
));
}

inner.win_resize_process(process, height, width).await
}

pub async fn stats(&self) -> Result<Option<agent::StatsContainerResponse>> {
Expand Down

0 comments on commit e7bca62

Please sign in to comment.