On Wed, Jul 01, 2026 at 03:37:02PM +0200, Markus Armbruster wrote:
> Daniel P. Berrangé <[email protected]> writes:
> 
> > On Wed, Jul 01, 2026 at 08:32:06AM +0200, Markus Armbruster wrote:
> >> [email protected] writes:
> >> 
> >> >> The default monitor is usually a long lived object that will exist for
> >> >> the entire lifetime of the VM. A monitor can only service a single
> >> >> client at a time though, and so it might be desirable to hotplug
> >> >> additional monitors at runtime for specific tasks. If doing that,
> >> >> however, there is a need to remove the monitor when it is no longer
> >> >> needed.
> >> 
> >> Whatever adds the additional monitor can also delete it.  The fact that
> >> you propose other means suggests you believe this would be cumbersome in
> >> practice.  Why?
> >
> > The use is is that someone/something wants to spawn a script that
> > does some job with the QEMU monitor.  The thing that spawns the
> > script adds the new monitor and launches the script. Having
> > auto-delete means that you do not need to then keep track of that
> > script to perform cleanup of the dynamically added monitor. It
> > gives you "do the right thing" behaviour automatically when the
> > script exits, closing its monitor connection.
> >
> > The initial series proposed by Christian supported the ability
> > to run "object-del' on the monitor itself - a "self delete"
> > essentially. That is very awkward from the code POV, as it
> > required special case hanlding to ensure the QMP response to
> > the delete action got sent on the socket before the delete
> > action took place. It also made it impossible to then delete
> > the character device.
> >
> > Auto-delete gives us a better solution with less code complexity.
> 
> I agree "self delete" is problematic.
> 
> I wonder how important the ability to fire and forget a script with a
> dedicated monitor is.  I'd (naively?) expect whatever spawns the script
> to reap its exit status.
> 
> If it is important, what about fire and forget a script with a dedicated
> character device?  Can't come up with a use case for that within ten
> seconds.  However, we use character devices for all kinds of crap.  Food
> for thought, not a demand.

In a hypothetical libvirt usage of this functionality, libvirt would
not be spawning the script or even know what its PID is. Libvirt would
just create a auto-delete monitor, open an FD to it, and pass the FD
back to the libvirt client & forget about it.

> >> >> Allowing a client to run "object-del" against its own monitor adds
> >> >> complex edge cases, as it would be desirable to send the QMP response
> >> >> despite the monitor sending it being deleted. Doing "object-del" alone
> >> >> will also result in orphaning a character device backend instance, as
> >> >> there is no opportunity to run the companion "chardev-del" command.
> >> >> 
> >> >> A simpler way to ensure cleanup is to add the concept of auto-deleting
> >> >> monitor objects. Specifically when the "CHR_EVENT_CLOSED" event is
> >> >> emitted, the equivalent of "object-del" + "chardev-del" can be run
> >> >> internally. Since the transient client has already droppped its
> >> >> monitor connection, there is no synchronization to be concerned about.
> >> 
> >> If object-del or chardev-del fail, there's no way to report the error.
> >> Can they fail?
> >
> > object-del can fail if
> >
> >  * An object with the specified "id" does not exist. That shouldn't
> >    happen in this case but harmless if it odes.
> >  * object_del command tries to delete the monitor that
> >    is servicing the object_del command. Cannot happen with
> >    auto-delete
> >  * the monitor has not finished initializing it BH with
> >    chardev handlers. Cannot happen if we know we have a
> >    live connection already.
> >
> > chardev-del can fail if
> >
> >  * The chardev with "id" does not exist. SHouldn't happen
> >    but is harmless if it does
> >  * The chardev reports it is "busy" - aka the frontend
> >    is still connected - we just deleted it so cannot happen
> >  * Record/replay is in use - a niche use case
> >
> > So I don't think errors are a problem.
> >
> >> Do we always want to delete both monitor and character device?
> >
> > IMHO yes they are a pair whose lifetime should be tied together
> > for normal use.
> 
> Would we make monitor auto-delete delete its character device if
> character devices also had an auto-delete feature?

That's a possibility.

We would have to accept that it allows users to create a scenario in
which auto-delete will frequenty fail.

ie configuring the chardev for auto-delete, but not having the
frontend auto-delete, which would trigger the "busy" check. 

Not convinced that's nicer ?

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