Re: [PATCH v2 04/22] hypervisor: custom shutdown actions for transient vs persistent VMs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Mar 12, 2025 at 17:17:44 +0000, Daniel P. Berrangé wrote:
> It may be desirable to treat transient VMs differently from persistent
> VMs. For example, while performing managed save on persistent VMs makes
> sense, the same not usually true of transient VMs, since by their
> nature they will have no config to restore from.
> 
> This also lets us fix a long standing problem with incorrectly
> attempting to perform managed save on transient VMs.
> 
> Signed-off-by: Daniel P. Berrangé <berrange@xxxxxxxxxx>
> ---
>  src/hypervisor/domain_driver.c | 62 +++++++++++++++++++++++++++++++---
>  src/hypervisor/domain_driver.h | 18 ++++++++--
>  src/libvirt_private.syms       |  2 ++
>  src/qemu/qemu_driver.c         |  6 ++--
>  4 files changed, 77 insertions(+), 11 deletions(-)
> 
> diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c
> index e625726c07..c510e1d2ae 100644
> --- a/src/hypervisor/domain_driver.c
> +++ b/src/hypervisor/domain_driver.c
> @@ -35,6 +35,13 @@
>  
>  VIR_LOG_INIT("hypervisor.domain_driver");
>  
> +VIR_ENUM_IMPL(virDomainDriverAutoShutdownScope,
> +              VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_LAST,
> +              "none",
> +              "persistent",
> +              "transient",
> +              "all");
> +
>  char *
>  virDomainDriverGenerateRootHash(const char *drivername,
>                                  const char *root)
> @@ -721,9 +728,13 @@ virDomainDriverAutoShutdown(virDomainDriverAutoShutdownConfig *cfg)
>      int numDomains = 0;
>      size_t i;
>      virDomainPtr *domains = NULL;
> +    g_autofree bool *transient = NULL;
>  
> -    VIR_DEBUG("Run autoshutdown uri=%s trySave=%d tryShutdown=%d poweroff=%d waitShutdownSecs=%u",
> -              cfg->uri, cfg->trySave, cfg->tryShutdown, cfg->poweroff,
> +    VIR_DEBUG("Run autoshutdown uri=%s trySave=%s tryShutdown=%s poweroff=%s waitShutdownSecs=%u",
> +              cfg->uri,
> +              virDomainDriverAutoShutdownScopeTypeToString(cfg->trySave),
> +              virDomainDriverAutoShutdownScopeTypeToString(cfg->tryShutdown),
> +              virDomainDriverAutoShutdownScopeTypeToString(cfg->poweroff),
>                cfg->waitShutdownSecs);
>  
>      /*
> @@ -740,6 +751,21 @@ virDomainDriverAutoShutdown(virDomainDriverAutoShutdownConfig *cfg)
>      if (cfg->waitShutdownSecs <= 0)
>          cfg->waitShutdownSecs = 30;
>  
> +    /* Short-circuit if all actions are disabled */
> +    if (cfg->trySave == VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE &&
> +        cfg->tryShutdown == VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE &&
> +        cfg->poweroff == VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE)
> +        return;
> +
> +    if (cfg->trySave == VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_ALL ||
> +        cfg->trySave == VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_TRANSIENT) {
> +        /* virDomainManagedSave will return an error. We'll let
> +         * the code run, since it'll just fall through to the next
> +         * actions, but give a clear warning upfront */
> +        VIR_WARN("Managed save not supported for transient VMs");
> +        return;

This looks like better suited to the config parser. Reporting a
programming error as warning seems wrong.

This code should IMO at ignore invalid setting for managed-save config
rather than not do anything at all.

> +    }
> +
>      if (!(conn = virConnectOpen(cfg->uri)))
>          goto cleanup;

Reviewed-by: Peter Krempa <pkrempa@xxxxxxxxxx>




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux