Re: [PATCH 09/26] hypervisor: expand available shutdown actions

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

 



On Thu, Jan 30, 2025 at 03:10:55PM +0000, Daniel P. Berrangé wrote:
> On Thu, Jan 30, 2025 at 04:02:46PM +0100, Peter Krempa wrote:
> > On Wed, Jan 08, 2025 at 19:42:42 +0000, Daniel P. Berrangé wrote:
> > > The auto shutdown code can currently only perform managed save,
> > > which may fail in some cases, for example when PCI devices are
> > > assigned. On failure, shutdown inhibitors remain in place which
> > > may be undesirable.
> > > 
> > > This expands the logic to try a sequence of operations
> > > 
> > >  * Managed save
> > >  * Graceful shutdown
> > >  * Forced poweroff
> > > 
> > > Each of these operations can be enabled or disabled, but they
> > > are always applied in this order.
> > > 
> > > With the shutdown option, a configurable time is allowed for
> > > shutdown to complete, defaulting to 30 seconds, before moving
> > > onto the forced poweroff phase.
> > > 
> > > Signed-off-by: Daniel P. Berrangé <berrange@xxxxxxxxxx>
> > > ---
> > >  src/hypervisor/domain_driver.c | 113 +++++++++++++++++++++++++++------
> > >  src/hypervisor/domain_driver.h |   4 ++
> > >  src/qemu/qemu_driver.c         |   3 +
> > >  3 files changed, 100 insertions(+), 20 deletions(-)
> > > 
> > > diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c
> > > index 949e3d01f1..ea3f1cbfcd 100644
> > > --- a/src/hypervisor/domain_driver.c
> > > +++ b/src/hypervisor/domain_driver.c
> > > @@ -714,9 +714,26 @@ virDomainDriverAutoShutdown(virDomainDriverAutoShutdownConfig *cfg)
> > >      g_autoptr(virConnect) conn = NULL;
> > >      int numDomains = 0;
> > >      size_t i;
> > > -    int state;
> > >      virDomainPtr *domains = NULL;
> > > -    g_autofree unsigned int *flags = NULL;
> > > +
> > > +    VIR_DEBUG("Run autoshutdown uri=%s trySave=%d tryShutdown=%d poweroff=%d"
> > > +              "waitShutdownSecs=%d",
> > 
> > Please avoid linebreaks in debug messages. Also this way there's a
> > missing space.
> > 
> > > +              cfg->uri, cfg->trySave, cfg->tryShutdown, cfg->poweroff,
> > > +              cfg->waitShutdownSecs);
> > > +
> > > +    /*
> > > +     * Ideally guests will shutdown in a few seconds, but it would
> > > +     * not be unsual for it to take a while longer, especially under
> > > +     * load, or if the guest OS has inhibitors slowing down shutdown.
> > > +     *
> > > +     * If we wait too long, then guests which ignore the shutdown
> > > +     * request will significantly delay host shutdown.
> > > +     *
> > > +     * Pick 30 seconds as a moderately safe default, assuming that
> > > +     * most guests are well behaved.
> > > +     */
> > 
> > I'll have to see how this is in the end exposed to the user but ...
> > 
> > > +    if (cfg->waitShutdownSecs <= 0)
> > > +        cfg->waitShutdownSecs = 30;
> > 
> > ... I find that this is not the correct place for this kind of logic.
> > All the time it'll look as if the shutdown timer is configured to what
> > the caller intended, but at the very last moment it'll be overridden.
> > Including the debug message above mentioning the old value of
> > waitShutdownSecs=%d.
> 
> I did it here because this is common code for all drivers.
> 
> This series wires up QEMU, but we should also wire up
> bhyve, libxl, lxc, ch too with the same APIs.
> 
> The qemu.conf settnig introduced ina later patch makes
> it clear that the default value will be '30' if unset,
> so this shouldn't really be a surprise, especially since
> '0' is clearly not a setting you would otherwise pick.
> 
> > > @@ -726,31 +743,87 @@ virDomainDriverAutoShutdown(virDomainDriverAutoShutdownConfig *cfg)
> > >                                                 VIR_CONNECT_LIST_DOMAINS_ACTIVE)) < 0)
> > >          goto cleanup;
> > >  
> > > -    flags = g_new0(unsigned int, numDomains);
> > > +    VIR_DEBUG("Auto shutdown with %d running domains", numDomains);
> > 
> > This looks like we could do also a VIR_INFO perhaps? So that it's
> > possibly in the system log?
> 
> Later in the series (last patch), I wire up systemd notifiers for
> sending status messages. This reminds me though, I was kinda hoping
> those would end up in the journal, but they didn't seem to and I've
> not yet figured out what systemd does with them.

....what is does with them is practically nothing at all.

They are used to set the 'StatusText' property on a unit, which can b
queried over dbus, or seen with 'systemctl show'. IOW it is practically
useless for telling the user what's happening during a long shutdown
operation.

I was kinda of hoping systemd would display them when it is stuck in
the busy loop waiting for services to quit. Perhaps I'll file an RFE.

> If they don't, we could make the virSystemdNotifyStatus API itself
> issue a VIR_INFO though.

Guess we need to log them directly ourselves after all.


With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




[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