spiegel_podman/test/e2e
Radostin Stoyanov 2c7aeab70b Freeze cgroup during live checkpoint
When checkpointing a container with --leave-running, libpod dumps the
container's memory via the OCI runtime (CRIU) first and only captures
the rootfs diff and named volumes afterwards. CRIU thaws the container
as soon as the memory dump finishes, so the processes inside the
container continue to run between the memory snapshot and the
file-system capture. As a result, the checkpoint can be inconsistent:
have CRIU images and a file system that reflect different points in time.

To fix this, we freeze the container's cgroup before invoking the OCI
runtime and thaw it again only after the checkpoint image/archive has
been written. The OCI runtime calls CRIU with the freezer cgroup and
restores it to its previous state once the dump completes, so a
container that was already frozen stays frozen across the dump and
the file system is captured at the same instant as the CRIU images.
This mirrors the approach other engines (e.g. CRI-O and containerd).

The default (stopping) checkpoint functionality is not affected by this
issue because CRIU leaves the tasks dead after the dump.

This patch also adds a regression test for the consistency of live
(--leave-running) checkpoints. The container runs a workload that
keeps an in-memory counter in sync with a value written to a file
on its root file system, maintaining the invariant that the on-disk
value never gets ahead of the in-memory counter.

Signed-off-by: Radostin Stoyanov <rstoyanov@fedoraproject.org>
2026-06-23 13:30:32 +01:00
..
build Consolidate build secret tests and assert no podman-build-secret leak 2026-03-25 19:01:32 +01:00
cdi build(deps): bump github.com/container-orchestrated-devices/container-device-interface 2023-02-20 14:51:04 +01:00
config Read kube_generate_type from containers.conf 2023-04-11 09:15:05 -04:00
quadlet Add support for ImageVolume option in Podman Quadlet 2026-06-17 07:19:07 +01:00
sign e2e: reduce dependency on /tmp for e2e tests 2023-01-26 22:20:15 +09:00
testdata PARTIALLY TESTED: Add --tls-details, use it to affect libimage and the like 2026-03-05 23:13:17 +01:00
artifact_created_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
artifact_mount_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
artifact_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
attach_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
build_test.go Replace os.Is* error checks with errors.Is 2026-05-21 13:09:42 -07:00
buildx_inspect_test.go podman buildx inspect support 2025-06-03 11:07:08 -04:00
checkpoint_image_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
checkpoint_test.go Freeze cgroup during live checkpoint 2026-06-23 13:30:32 +01:00
cleanup_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
commit_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
common_test.go test/e2e: remove PodmanAsUser 2026-06-22 20:08:36 +02:00
common_windows_test.go Add command podman system hyperv-prep 2026-04-29 23:00:29 +02:00
config.go Rename the fedoraMinimal constant to FEDORA_MINIMAL 2026-03-03 21:34:14 +01:00
config_amd64.go ci: rm allow-unused from nolintlint settings 2025-03-31 12:27:55 -07:00
config_arm64.go Rename the fedoraMinimal constant to FEDORA_MINIMAL 2026-03-03 21:34:14 +01:00
config_ppc64le.go Rename the fedoraMinimal constant to FEDORA_MINIMAL 2026-03-03 21:34:14 +01:00
config_test.go Fix compilation of tests on arm64 2026-03-03 21:30:05 +01:00
container_clone_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
container_create_volume_test.go Revert "test/e2e: build in subdirectory" 2026-06-15 17:31:51 +02:00
container_iface_name_test.go test/e2e: deduplicate some network subnets 2026-05-28 13:36:45 +02:00
container_inspect_test.go test/e2e: fix static port assignment 2026-05-27 12:44:40 +02:00
containers_conf_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
cp_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
create_staticip_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
create_staticmac_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
create_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
diff_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
events_test.go events: support artifact events with refactored event forwarding 2026-05-18 00:05:10 +00:00
exec_test.go cmd/podman: don't warn on podman run -ti -d from not a tty 2026-05-29 10:37:26 +09:00
exists_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
export_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
farm_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
generate_kube_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
generate_spec_test.go fix: ensure infra image is set from infra container spec in PodConfigToSpec 2026-04-22 23:47:00 +02:00
generate_systemd_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
healthcheck_run_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
history_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
image_scp_test.go image scp: preserve usernames containing an "@" 2026-06-12 15:23:25 +05:30
image_sign_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
images_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
import_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
info_test.go test/e2e: use Ginkgo Setenv in info tests 2026-06-10 12:21:27 +02:00
init_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
inspect_test.go fix: handle multiple networks in 'podman inspect --type=all' 2026-06-08 20:37:47 +08:00
kill_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
libpod_suite_remote_test.go test/e2e: split cli tmpdir from per test tempdir 2026-06-15 17:31:51 +02:00
libpod_suite_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
load_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
login_logout_test.go test/e2e: fix flake in login tests 2026-06-05 13:06:26 +02:00
logs_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
manifest_test.go Add --retry support to podman manifest push 2026-06-22 15:49:27 -03:00
mount_rootless_test.go test/e2e: split cli tmpdir from per test tempdir 2026-06-15 17:31:51 +02:00
mount_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
negative_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
network_connect_disconnect_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
network_create_test.go test/e2e: remove SkipIfNetavarkVersionLessThan 2026-06-22 20:08:36 +02:00
network_test.go feat: add --ignore flag to network rm 2026-06-23 10:52:47 +09:00
pause_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
play_build_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
play_kube_test.go kube: fix quantityToInt64 dropping scale for fractional BinarySI 2026-06-19 15:56:21 +02:00
pod_clone_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
pod_create_test.go Revert "test/e2e: build in subdirectory" 2026-06-15 17:31:51 +02:00
pod_infra_container_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
pod_initcontainers_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
pod_inspect_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
pod_kill_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
pod_pause_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
pod_pod_namespaces_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
pod_prune_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
pod_ps_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
pod_restart_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
pod_rm_test.go test/e2e: remove WaitForContainer 2026-06-22 20:08:36 +02:00
pod_start_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
pod_stats_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
pod_stop_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
pod_top_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
port_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
prune_test.go filters: add annotation filter for containers Fixes: #28562 2026-05-11 20:24:28 +09:00
ps_test.go filters: add annotation filter for containers Fixes: #28562 2026-05-11 20:24:28 +09:00
pull_chunked_test.go Revert "test/e2e: build in subdirectory" 2026-06-15 17:31:51 +02:00
pull_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
push_test.go test/e2e: do not call out to htpasswd/cp in registry tests 2026-06-05 13:02:17 +02:00
quadlet_test.go Add support for ImageVolume option in Podman Quadlet 2026-06-17 07:19:07 +01:00
rename_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
restart_test.go test/e2e: remove WaitForContainer 2026-06-22 20:08:36 +02:00
rm_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
rmi_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_aardvark_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_apparmor_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_cgroup_parent_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_cleanup_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_cpu_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_device_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_dns_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_entrypoint_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_env_test.go test/e2e: remove PodmanAsUser 2026-06-22 20:08:36 +02:00
run_exit_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_memory_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_networking_test.go test/e2e: remove SkipIfNetavarkVersionLessThan 2026-06-22 20:08:36 +02:00
run_ns_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_passwd_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_privileged_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_restart_test.go test/e2e: remove WaitForContainer 2026-06-22 20:08:36 +02:00
run_seccomp_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_security_labels_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_selinux_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_signal_test.go test/e2e: remove WaitForContainer 2026-06-22 20:08:36 +02:00
run_staticip_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_test.go specgen: move log_path handling over to the server 2026-06-03 09:22:50 +05:30
run_transient_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_userns_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
run_volume_test.go test/e2e: split cli tmpdir from per test tempdir 2026-06-15 17:31:51 +02:00
run_working_dir_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
runlabel_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
save_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
search_mock_registry.go Add reasons to all staticcheck suppressions 2026-06-12 10:12:40 +02:00
search_test.go move old registries.conf v1 files to v2 2026-04-23 13:19:04 +02:00
secret_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
start_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
stats_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
stop_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
system_connection_test.go test/e2e: skip "sshd and API services required" 2026-05-27 12:44:39 +02:00
system_df_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
system_dial_stdio_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
system_hyperv_prep_test.go test/e2e: modernize 2026-05-22 13:11:01 -07:00
system_reset_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
systemd_activate_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
systemd_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
tag_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
tls_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
toolbox_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
top_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
tree_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
trust_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
unshare_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
untag_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
update_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
version_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
volume_create_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
volume_exists_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
volume_inspect_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
volume_ls_test.go Fix filtering with negated labels 2026-04-29 11:18:03 +02:00
volume_plugin_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
volume_prune_test.go volume prune: add dry-run support 2026-05-16 19:03:34 +09:00
volume_rename_test.go libpod: add volume rename support 2026-06-11 21:56:15 +01:00
volume_rm_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00
wait_test.go RUN-4539: Change podman module paths 2026-04-22 14:02:25 -05:00