diff --git a/src/libostree/ostree-sysroot-deploy.c b/src/libostree/ostree-sysroot-deploy.c index 0cbc1048f7..059b55504a 100644 --- a/src/libostree/ostree-sysroot-deploy.c +++ b/src/libostree/ostree-sysroot-deploy.c @@ -2761,9 +2761,8 @@ ostree_sysroot_write_deployments_with_options (OstreeSysroot *self, GPtrArray *n if (!_ostree_sysroot_ensure_writable (self, error)) return FALSE; - /* for now, this is gated on an environment variable */ - const gboolean opted_in = (self->opt_flags & OSTREE_SYSROOT_GLOBAL_OPT_EARLY_PRUNE) > 0; - if (opted_in && !opts->disable_auto_early_prune + const bool skip_early_prune = (self->opt_flags & OSTREE_SYSROOT_GLOBAL_OPT_NO_EARLY_PRUNE) > 0; + if (!skip_early_prune && !opts->disable_auto_early_prune && !auto_early_prune_old_deployments (self, new_deployments, cancellable, error)) return FALSE; diff --git a/src/libostree/ostree-sysroot-private.h b/src/libostree/ostree-sysroot-private.h index a608a7a551..8e6945b293 100644 --- a/src/libostree/ostree-sysroot-private.h +++ b/src/libostree/ostree-sysroot-private.h @@ -44,7 +44,7 @@ typedef enum /* Skip invoking `sync()` */ OSTREE_SYSROOT_GLOBAL_OPT_SKIP_SYNC = 1 << 0, /* See https://github.com/ostreedev/ostree/pull/2847 */ - OSTREE_SYSROOT_GLOBAL_OPT_EARLY_PRUNE = 1 << 1, + OSTREE_SYSROOT_GLOBAL_OPT_NO_EARLY_PRUNE = 1 << 1, OSTREE_SYSROOT_GLOBAL_OPT_BOOTLOADER_NAMING_2 = 1 << 2, } OstreeSysrootGlobalOptFlags; diff --git a/src/libostree/ostree-sysroot.c b/src/libostree/ostree-sysroot.c index 36dac18426..91b63f945a 100644 --- a/src/libostree/ostree-sysroot.c +++ b/src/libostree/ostree-sysroot.c @@ -179,7 +179,7 @@ ostree_sysroot_init (OstreeSysroot *self) { const GDebugKey globalopt_keys[] = { { "skip-sync", OSTREE_SYSROOT_GLOBAL_OPT_SKIP_SYNC }, - { "early-prune", OSTREE_SYSROOT_GLOBAL_OPT_EARLY_PRUNE }, + { "no-early-prune", OSTREE_SYSROOT_GLOBAL_OPT_NO_EARLY_PRUNE }, { "bootloader-naming-2", OSTREE_SYSROOT_GLOBAL_OPT_BOOTLOADER_NAMING_2 }, }; const GDebugKey keys[] = { diff --git a/tests/kolainst/destructive/auto-prune.sh b/tests/kolainst/destructive/auto-prune.sh index 70b71868dd..1ec1534e52 100755 --- a/tests/kolainst/destructive/auto-prune.sh +++ b/tests/kolainst/destructive/auto-prune.sh @@ -44,7 +44,7 @@ assert_bootfs_has_n_bootcsum_dirs 1 # the booted deployment is never pruned, so this is a hopeless case and auto-pruning can't save us consume_bootfs_space rpm-ostree rebase :modkernel1 -if OSTREE_SYSROOT_OPTS=early-prune ostree admin finalize-staged |& tee out.txt; then +if ostree admin finalize-staged |& tee out.txt; then assert_not_reached "successfully wrote to filled up bootfs" fi assert_file_has_content out.txt "Disabling auto-prune optimization; insufficient space left in bootfs" @@ -58,7 +58,7 @@ rpm-ostree cleanup -bpr assert_bootfs_has_n_bootcsum_dirs 1 rpm-ostree rebase :modkernel1 -OSTREE_SYSROOT_OPTS=early-prune ostree admin finalize-staged |& tee out.txt +ostree admin finalize-staged |& tee out.txt assert_not_file_has_content out.txt "updating bootloader in two steps" rm out.txt @@ -71,7 +71,7 @@ bootloader_orig=$(sha256sum /boot/loader/entries/*) # now try to deploy a third deployment without early pruning; we should hit ENOSPC consume_bootfs_space rpm-ostree rebase :modkernel2 -if ostree admin finalize-staged |& tee out.txt; then +if OSTREE_SYSROOT_OPTS=no-early-prune ostree admin finalize-staged |& tee out.txt; then assert_not_reached "successfully wrote kernel without auto-pruning" fi assert_file_has_content out.txt "No space left on device" @@ -86,7 +86,7 @@ assert_streq "$bootloader_orig" "$(sha256sum /boot/loader/entries/*)" # now, try again but with auto-pruning enabled rpm-ostree rebase :modkernel2 -OSTREE_SYSROOT_OPTS=early-prune ostree admin finalize-staged |& tee out.txt +ostree admin finalize-staged |& tee out.txt assert_file_has_content out.txt "updating bootloader in two steps" rm out.txt @@ -120,15 +120,16 @@ unshare -m bash -c \ consume_bootfs_space "$((free_blocks))" rpm-ostree rebase :modkernel1 -if ostree admin finalize-staged |& tee out.txt; then +# Disable auto-pruning to verify we reproduce the bug +if OSTREE_SYSROOT_OPTS=no-early-prune ostree admin finalize-staged |& tee out.txt; then assert_not_reached "successfully wrote kernel without auto-pruning" fi assert_file_has_content out.txt "No space left on device" rm out.txt -# now, try again but with auto-pruning enabled +# now, try again but with (now default) auto-pruning enabled rpm-ostree rebase :modkernel1 -OSTREE_SYSROOT_OPTS=early-prune ostree admin finalize-staged |& tee out.txt +ostree admin finalize-staged |& tee out.txt assert_file_has_content out.txt "updating bootloader in two steps" rm out.txt