Skip to content

Commit d66ed3e

Browse files
committed
Defer bail out for cgroup not found
This likely means that the container died.
1 parent 2d6266e commit d66ed3e

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

src/docker/cgroup.rs

+19-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use anyhow::{ensure, Context, Result};
1+
use anyhow::{bail, ensure, Context, Result};
22
use aya::maps::{HashMap, MapData};
33
use aya::programs::{CgroupDevice, Link};
44
use std::fs::File;
@@ -196,3 +196,21 @@ impl DeviceAccessController for DeviceAccessControllerV2 {
196196
Ok(())
197197
}
198198
}
199+
200+
pub struct DeviceAccessControllerDummy;
201+
202+
impl DeviceAccessController for DeviceAccessControllerDummy {
203+
fn set_permission(
204+
&mut self,
205+
_ty: DeviceType,
206+
_major: u32,
207+
_minor: u32,
208+
_access: Access,
209+
) -> Result<()> {
210+
bail!("neither cgroup v1 and cgroup v2 works");
211+
}
212+
213+
fn stop(self: Box<Self>) -> Result<()> {
214+
Ok(())
215+
}
216+
}

src/docker/container.rs

+11-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ use tokio::signal::unix::{signal, SignalKind};
1010
use tokio::task::{spawn, JoinHandle};
1111
use tokio_stream::StreamExt;
1212

13-
use super::cgroup::{Access, DeviceAccessController, DeviceAccessControllerV1, DeviceAccessControllerV2, DeviceType};
13+
use super::cgroup::{
14+
Access, DeviceAccessController, DeviceAccessControllerDummy, DeviceAccessControllerV1,
15+
DeviceAccessControllerV2, DeviceType,
16+
};
1417
use super::{IoStream, IoStreamSource};
1518

1619
#[derive(Clone)]
@@ -42,9 +45,14 @@ impl Container {
4245
let cgroup_device_filter: Box<dyn DeviceAccessController + Send> =
4346
match DeviceAccessControllerV2::new(id) {
4447
Ok(v) => Box::new(v),
45-
Err(err) => match DeviceAccessControllerV1::new(id) {
48+
Err(err2) => match DeviceAccessControllerV1::new(id) {
4649
Ok(v) => Box::new(v),
47-
Err(_) => Err(err).context("neither cgroup v1 and cgroup v2 works")?,
50+
Err(err1) => {
51+
log::error!("neither cgroup v1 and cgroup v2 works");
52+
log::error!("cgroup v2: {err2}");
53+
log::error!("cgroup v1: {err1}");
54+
Box::new(DeviceAccessControllerDummy)
55+
}
4856
},
4957
};
5058

0 commit comments

Comments
 (0)