On Wed, Oct 14, 2026 at 03:22:48PM -0600, Jim Fehlig via Devel wrote:
> On 10/14/26 7:20 AM, Ben Grande wrote:
> > On 26-10-13 20:34:07, Jim Fehlig wrote:
> > > On 10/13/26 8:15 PM, Jim Fehlig wrote:
> > > > On 10/13/26 7:06 AM, Ben Grande wrote:
> > > > > Fired on "on_reboot" values "restart" and "destroy", so event 
> > > > > listeners
> > > > > can react to this request. The value "destroy" is useful for
> > > > > applications that have routines run between restarts,
> > > > 
> > > > It might be useful for your application, but IMO could be very confusing
> > > > to others. More below...
> > > > 
> > > > > therefore the
> > > > > reboot event is still fired in this case. If the value is set to
> > > > > "preserve" then it doesn't seem appropriate to fire reboot event.
> > > > > 
> > > > > Resolves: https://github.com/QubesOS/qubes-issues/issues/8196
> > > > > Signed-off-by: Ben Grande <[email protected]>
> > > > > ---
> > > > >    docs/formatdomain.rst    | 14 +++++++++++---
> > > > >    src/libvirt-domain.c     |  4 +++-
> > > > >    src/libxl/libxl_domain.c |  4 ++++
> > > > >    3 files changed, 18 insertions(+), 4 deletions(-)
> > > > > 
> > > > > diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
> > > > > index e4eb2d9ba3..a5388c5d11 100644
> > > > > --- a/docs/formatdomain.rst
> > > > > +++ b/docs/formatdomain.rst
> > > > > @@ -2047,9 +2047,17 @@ Each of these states allow for the same four
> > > > > possible actions.
> > > > >       The domain will be terminated and then restarted with a new 
> > > > > name. (Only
> > > > >       supported by the libxl hypervisor driver.)
> > > > > -QEMU/KVM/HVF supports the ``on_poweroff`` and ``on_reboot`` events 
> > > > > handling the
> > > > > -``destroy`` and ``restart`` actions, but the combination of 
> > > > > ``on_poweroff`` set
> > > > > -to ``restart`` and ``on_reboot`` set to ``destroy`` is forbidden.
> > > > > +QEMU/KVM/HVF/XEN supports the ``on_poweroff`` and ``on_reboot`` 
> > > > > events handling
> > > > > +the ``destroy`` and ``restart`` actions, in which case, a 
> > > > > notification is
> > > > > +available when the reboot fires, using the event ID
> > > > > +``VIR_DOMAIN_EVENT_ID_REBOOT``.
> > > > 
> > > > This sentence is a bit unclear IMO. It groups on_poweroff + on_reboot
> > > > together, then says "notification is available when the reboot fires".
> > > > I'd suggest two sentences, with the second one explicitly scoped. E.g.
> > > > 
> > > > QEMU/KVM/HVF/XEN supports the on_poweroff and on_reboot events handling
> > > > the destroy and restart actions. For on_reboot, a notification is
> > > > available via VIR_DOMAIN_EVENT_ID_REBOOT when the guest-initiated reboot
> > > > is detected.
> > > > 
> > > > > +
> > > > > +Setting ``on_reboot`` to ``destroy``, prevents libvirt from 
> > > > > restarting the
> > > > > +domain on its own, thus allowing a VMM that monitors
> > > > > +``VIR_DOMAIN_EVENT_ID_REBOOT``, to run their own stop and start 
> > > > > procedures.
> > > > 
> > > > This is an unrelated doc improvement and should be a separate patch IMO.
> > > > 
> > > > > +
> > > > > +The combination of ``on_poweroff`` set to ``restart`` and 
> > > > > ``on_reboot`` set to
> > > > > +``destroy`` is forbidden.
> > > > >    The ``on_crash`` event supports these additional actions 
> > > > > :since:`since 0.8.4`.
> > > > > diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
> > > > > index acd9ffc44b..95764ebd2b 100644
> > > > > --- a/src/libvirt-domain.c
> > > > > +++ b/src/libvirt-domain.c
> > > > > @@ -1779,7 +1779,9 @@ virDomainShutdownFlags(virDomainPtr domain,
> > > > > unsigned int flags)
> > > > >     * Note that the guest OS may ignore the request.
> > > > >     * Additionally, the hypervisor may check and support the domain
> > > > >     * 'on_reboot' XML setting resulting in a domain that shuts down 
> > > > > instead
> > > > > - * of rebooting.
> > > > > + * of rebooting. Depending on the hypervisor and 'on_reboot' setting,
> > > > > + * VIR_DOMAIN_EVENT_ID_REBOOT might be emitted. For more 
> > > > > information, see
> > > > > + * https://libvirt.org/formatdomain.html#events-configuration
> > > > >     *
> > > > >     * If @flags is set to zero, then the hypervisor will choose the
> > > > >     * method of shutdown it considers best. To have greater control
> > > > > diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
> > > > > index 51dc3edcc2..ab9df080ac 100644
> > > > > --- a/src/libxl/libxl_domain.c
> > > > > +++ b/src/libxl/libxl_domain.c
> > > > > @@ -550,10 +550,14 @@ libxlDomainShutdownThread(void *opaque)
> > > > >                                               
> > > > > VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN);
> > > > >            switch ((virDomainLifecycleAction) vm->def->onReboot) {
> > > > >            case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY:
> > > > > +            virObjectEventStateQueue(driver->domainEventState,
> > > > > +                                     
> > > > > virDomainEventRebootNewFromObj(vm));
> > > > 
> > > > This seems misleading to me. An app monitoring these events will receive
> > > > a REBOOT event, when in fact the domain will be destroyed, right?
> > > > AFAICT, in this case the qemu driver emits a SHUTDOWN event with detail
> > > > GUEST
> > 
> > Didn't post before but previous discussion about either firing the event
> > or sending the reboot reason on shutdown:
> > 
> > https://lists.libvirt.org/archives/list/[email protected]/thread/ZB5ALEFMTONTYZMJ6R2H6JWTOFL4ETER/
> 
> Ah, it would have been helpful to reference this in the cover letter :-).

Yep, I think the way to think about this is


 VIR_DOMAIN_EVENT_ID_LIFECYCLE
    -> reflects the actual state changes made by the
       hypervisor
 VIR_DOMAIN_EVENT_ID_REBOOT
    -> reflects that the guest asked for a reboot,
       but <on_reboot> may trigger different
       _ID_LIFECYCLE actions.

> 
> > Would it be acceptable to create the event detail
> > `VIR_DOMAIN_EVENT_STOPPED_RESET`? Only VMMs that use
> > `VIR_DOMAIN_EVENT_SHUTDOWN` are 'qemu' and 'ch'.
> 
> Yes, that would be fine too IMO. VIR_DOMAIN_EVENT_STOPPED is used by bhyve,
> ch, libxl, lxc, qemu and vz. A new VIR_DOMAIN_EVENT_STOPPED_RESET detail
> would ride on a universally-emitted event, whereas a new SHUTDOWN reason
> means libxl must adopt a lifecycle event type it's never handled before.
> Peter, do you have an opinion on this?
> 
> BTW, to bikeshed a bit, perhaps VIR_DOMAIN_EVENT_STOPPED_REBOOT is a better
> name for the new detail? The related config knob is called 'on_reboot'. And
> REBOOT might avoid the (remote) possibility of falsely associating it with
> QEMU's monitor RESET event.

Yes, I think I'd be more inclined to use REBOOT, as that reflects
an action/operation that caused the domain to STOP.

REBOOT could alternatively cause a domain to be RESET.

A RESET does not cause anything, it is a consequence of something.

With regards,
Daniel
-- 
|: https://berrange.com       ~~        https://hachyderm.io/@berrange :|
|: https://libvirt.org          ~~          https://entangle-photo.org :|
|: https://pixelfed.art/berrange   ~~    https://fstop138.berrange.com :|

Reply via email to