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/

So yes, I can deal with using a shutdown reason.

> > https://gitlab.com/libvirt/libvirt/-/blob/master/src/qemu/qemu_process.c?
> > ref_type=heads#L775
> 
> After sending, I noticed the following proposed patch adds a new SHUTDOWN
> event detail 'VIR_DOMAIN_EVENT_SHUTDOWN_GUEST_RESET'
> 
> https://lists.libvirt.org/archives/list/[email protected]/thread/NFMQ3N5CITIVWK3425N72GUSVW33ARFF/

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'.

> Sounds appropriate for your use-case, assuming it's possible to detect a
> guest-initiated reboot/reset.

For reset/reboot request originating from the guest or host, Xen emits
LIBXL_SHUTDOWN_REASON_REBOOT, so no distinction.

-- 
Best regards,
Benjamin Grande
Invisible Things Lab

Attachment: signature.asc
Description: PGP signature

Reply via email to