mirror of
https://github.com/kata-containers/kata-containers.git
synced 2026-07-01 22:50:54 +00:00
This commit introduces an explicit cancellation mechanism for the OOM watcher loop within VirtSandbox. This addresses the issue where the watcher continues to poll for OOM events even when the sandbox is being stopped, leading to spurious "Connection reset by peer" errors. Key changes: (1) A CancellationToken is added to VirtSandbox to signal the watcher loop when the sandbox is undergoing teardown. (2) The OOM watcher loop in VirtSandbox::start() is now wrapped in a tokio::select! statement. This allows it to concurrently listen for two events: - cancel_token.cancelled(): Triggered when the sandbox/VM is stopping. - agent.get_oom_event(): The regular OOM event polling. (3) In the sandbox stop/teardown path, cancel_token.cancel() is called before stopping the VM. This ensures the OOM watcher loop exits cleanly via the cancellation token, preventing the occurrence of ECONNRESET/EOF errors on a closed channel. This change improves the robustness of OOM event handling during sandbox lifecycle management. Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
224 lines
7.0 KiB
TOML
224 lines
7.0 KiB
TOML
[workspace.package]
|
|
authors = ["The Kata Containers community <kata-dev@lists.katacontainers.io>"]
|
|
edition = "2018"
|
|
license = "Apache-2.0"
|
|
rust-version = "1.94"
|
|
|
|
[workspace]
|
|
members = [
|
|
# libs
|
|
"src/libs/kata-sys-util",
|
|
"src/libs/kata-types",
|
|
"src/libs/logging",
|
|
"src/libs/mem-agent",
|
|
"src/libs/pod-resources-rs",
|
|
"src/libs/protocols",
|
|
"src/libs/runtime-spec",
|
|
"src/libs/safe-path",
|
|
"src/libs/shim-interface",
|
|
"src/libs/test-utils",
|
|
|
|
# kata-agent
|
|
"src/agent",
|
|
"src/agent/rustjail",
|
|
"src/agent/policy",
|
|
"src/agent/vsock-exporter",
|
|
|
|
# Dragonball
|
|
"src/dragonball",
|
|
"src/dragonball/dbs_acpi",
|
|
"src/dragonball/dbs_address_space",
|
|
"src/dragonball/dbs_allocator",
|
|
"src/dragonball/dbs_arch",
|
|
"src/dragonball/dbs_boot",
|
|
"src/dragonball/dbs_device",
|
|
"src/dragonball/dbs_interrupt",
|
|
"src/dragonball/dbs_legacy_devices",
|
|
"src/dragonball/dbs_pci",
|
|
"src/dragonball/dbs_upcall",
|
|
"src/dragonball/dbs_utils",
|
|
"src/dragonball/dbs_virtio_devices",
|
|
|
|
# tools
|
|
"src/tools/agent-ctl",
|
|
"src/tools/genpolicy",
|
|
"src/tools/kata-ctl",
|
|
"src/tools/trace-forwarder",
|
|
|
|
# kata-deploy (Kubernetes installer binary)
|
|
"tools/packaging/kata-deploy/binary",
|
|
|
|
# kata-deploy-job-dispatcher (generic per-node Job dispatcher)
|
|
"tools/packaging/kata-deploy/job-dispatcher",
|
|
|
|
# runtime-rs
|
|
"src/runtime-rs",
|
|
"src/runtime-rs/crates/agent",
|
|
"src/runtime-rs/crates/hypervisor",
|
|
"src/runtime-rs/crates/persist",
|
|
"src/runtime-rs/crates/resource",
|
|
"src/runtime-rs/crates/runtimes",
|
|
"src/runtime-rs/crates/service",
|
|
"src/runtime-rs/crates/shim",
|
|
"src/runtime-rs/crates/shim-ctl",
|
|
"src/runtime-rs/tests/utils",
|
|
]
|
|
resolver = "2"
|
|
|
|
# TODO: Add all excluded crates to root workspace
|
|
exclude = [
|
|
"src/tools",
|
|
|
|
# We are cloning and building rust packages under
|
|
# "tools/packaging/kata-deploy/local-build/build" folder, which may mislead
|
|
# those packages to think they are part of the kata root workspace
|
|
"tools/packaging/kata-deploy/local-build/build",
|
|
|
|
# Exclude vendor directories created by cargo vendor
|
|
"vendor",
|
|
"src/agent/vendor",
|
|
"src/runtime-rs/vendor",
|
|
"src/tools/agent-ctl/vendor",
|
|
"src/tools/genpolicy/vendor",
|
|
"src/tools/kata-ctl/vendor",
|
|
"src/tools/trace-forwarder/vendor",
|
|
"tools/packaging/kata-deploy/binary/vendor",
|
|
]
|
|
|
|
[workspace.dependencies]
|
|
# Rust-VMM crates
|
|
event-manager = "0.4.0"
|
|
kvm-bindings = "0.14.0"
|
|
kvm-ioctls = "0.24.0"
|
|
linux-loader = "0.13.0"
|
|
seccompiler = "0.5.0"
|
|
vfio-bindings = "0.6.2"
|
|
vfio-ioctls = "0.6.0"
|
|
virtio-bindings = "0.2.0"
|
|
virtio-queue = "0.17.0"
|
|
vm-fdt = "0.3.0"
|
|
vm-memory = "=0.17.1"
|
|
vm-superio = "0.8.0"
|
|
vmm-sys-util = "0.15.0"
|
|
|
|
# Local dependencies from Dragonball Sandbox crates
|
|
dragonball = { path = "src/dragonball" }
|
|
dbs-acpi = { path = "src/dragonball/dbs_acpi" }
|
|
dbs-address-space = { path = "src/dragonball/dbs_address_space" }
|
|
dbs-allocator = { path = "src/dragonball/dbs_allocator" }
|
|
dbs-arch = { path = "src/dragonball/dbs_arch" }
|
|
dbs-boot = { path = "src/dragonball/dbs_boot" }
|
|
dbs-device = { path = "src/dragonball/dbs_device" }
|
|
dbs-interrupt = { path = "src/dragonball/dbs_interrupt" }
|
|
dbs-legacy-devices = { path = "src/dragonball/dbs_legacy_devices" }
|
|
dbs-pci = { path = "src/dragonball/dbs_pci" }
|
|
dbs-upcall = { path = "src/dragonball/dbs_upcall" }
|
|
dbs-utils = { path = "src/dragonball/dbs_utils" }
|
|
dbs-virtio-devices = { path = "src/dragonball/dbs_virtio_devices" }
|
|
|
|
# Local dependencies from runtime-rs
|
|
agent = { path = "src/runtime-rs/crates/agent" }
|
|
hypervisor = { path = "src/runtime-rs/crates/hypervisor" }
|
|
persist = { path = "src/runtime-rs/crates/persist" }
|
|
resource = { path = "src/runtime-rs/crates/resource" }
|
|
runtimes = { path = "src/runtime-rs/crates/runtimes" }
|
|
service = { path = "src/runtime-rs/crates/service" }
|
|
tests_utils = { path = "src/runtime-rs/tests/utils" }
|
|
ch-config = { path = "src/runtime-rs/crates/hypervisor/ch-config" }
|
|
common = { path = "src/runtime-rs/crates/runtimes/common" }
|
|
linux_container = { path = "src/runtime-rs/crates/runtimes/linux_container" }
|
|
virt_container = { path = "src/runtime-rs/crates/runtimes/virt_container" }
|
|
wasm_container = { path = "src/runtime-rs/crates/runtimes/wasm_container" }
|
|
|
|
# Local dependencies from `src/lib`
|
|
kata-sys-util = { path = "src/libs/kata-sys-util" }
|
|
pod-resources-rs = { path = "src/libs/pod-resources-rs" }
|
|
kata-types = { path = "src/libs/kata-types", features = ["safe-path"] }
|
|
logging = { path = "src/libs/logging" }
|
|
mem-agent = { path = "src/libs/mem-agent" }
|
|
protocols = { path = "src/libs/protocols", features = ["async"] }
|
|
runtime-spec = { path = "src/libs/runtime-spec" }
|
|
safe-path = { path = "src/libs/safe-path" }
|
|
shim-interface = { path = "src/libs/shim-interface" }
|
|
test-utils = { path = "src/libs/test-utils" }
|
|
|
|
# Local dependencies from `src/agent`
|
|
kata-agent-policy = { path = "src/agent/policy" }
|
|
rustjail = { path = "src/agent/rustjail" }
|
|
vsock-exporter = { path = "src/agent/vsock-exporter" }
|
|
|
|
# Outside dependencies
|
|
actix-rt = "2.7.0"
|
|
anyhow = "1.0"
|
|
base64 = "0.22"
|
|
async-recursion = "0.3.2"
|
|
async-trait = "0.1.48"
|
|
bilge = "0.3.0"
|
|
capctl = "0.2.0"
|
|
cfg-if = "1.0.0"
|
|
cgroups = { package = "cgroups-rs", git = "https://github.com/kata-containers/cgroups-rs", rev = "v0.3.5" }
|
|
clap = { version = "4.5.40", features = ["derive"] }
|
|
const_format = "0.2.30"
|
|
containerd-shim = { version = "0.10.0", features = ["async"] }
|
|
containerd-shim-protos = { version = "0.10.0", features = ["async"] }
|
|
derivative = "2.2.0"
|
|
futures = "0.3.30"
|
|
go-flag = "0.1.0"
|
|
hyper = "0.14.20"
|
|
hyperlocal = "0.8.0"
|
|
ipnetwork = "0.17.0"
|
|
lazy_static = "1.4"
|
|
libc = "0.2.94"
|
|
log = "0.4.14"
|
|
netlink-packet-core = "0.7.0"
|
|
netlink-packet-route = "0.19.0"
|
|
netlink-sys = { version = "0.7.0", features = ["tokio_socket"] }
|
|
netns-rs = "0.1.0"
|
|
# Note: nix needs to stay sync'd with libs versions
|
|
nix = "0.26.4"
|
|
oci-spec = { version = "0.8.1", features = ["runtime"] }
|
|
opentelemetry = { version = "0.17.0", features = ["rt-tokio"] }
|
|
procfs = "0.12.0"
|
|
prometheus = { version = "0.14.0", features = ["process"] }
|
|
protobuf = "3.7.2"
|
|
rand = "0.10.1"
|
|
regex = "1.10.5"
|
|
rstest = "0.18.0"
|
|
rtnetlink = "0.14.0"
|
|
scan_fmt = "0.2.6"
|
|
scopeguard = "1.0.0"
|
|
serde = { version = "1.0.145", features = ["derive"] }
|
|
serde_json = "1.0.91"
|
|
serial_test = "0.10.0"
|
|
sha2 = "0.10.9"
|
|
slog = "2.5.2"
|
|
slog-scope = "4.4.0"
|
|
slog-stdlog = "4.0.0"
|
|
slog-term = "2.9.0"
|
|
strum = { version = "0.24.0", features = ["derive"] }
|
|
strum_macros = "0.26.2"
|
|
tdx = "0.1.1"
|
|
tempfile = "3.19.1"
|
|
thiserror = "1.0.26"
|
|
tokio = "1.46.1"
|
|
tokio-util = "0.7.17"
|
|
tokio-vsock = "0.3.4"
|
|
toml = "0.5.8"
|
|
tracing = "0.1.44"
|
|
tracing-opentelemetry = "0.18.0"
|
|
tracing-subscriber = "0.3.20"
|
|
ttrpc = "0.8.4"
|
|
url = "2.5.4"
|
|
which = "4.3.0"
|
|
gpt = "4.1.0"
|
|
|
|
# Per-package release profile overrides for kata-deploy. The kata-deploy
|
|
# binary runs once at pod start and then idles waiting for SIGTERM, so we
|
|
# size-optimise it (opt-level = "z") and keep codegen-units = 1 to give
|
|
# the optimiser the whole picture. These overrides only affect the
|
|
# kata-deploy crate; agent / runtime-rs / dragonball compile with their
|
|
# usual defaults.
|
|
[profile.release.package."kata-deploy"]
|
|
opt-level = "z"
|
|
codegen-units = 1
|