* Daniel P. Berrangé ([email protected]) wrote:
> 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. 

This feels like it has some overlap with 'yank'?  Where you can force
a channel to get out of the way even if you don't delete it at that point.

Dave

> 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 :|
> 
-- 
 -----Open up your eyes, open up your mind, open up your code -------   
/ Dr. David Alan Gilbert    |       Running GNU/Linux       | Happy  \ 
\        dave @ treblig.org |                               | In Hex /
 \ _________________________|_____ http://www.treblig.org   |_______/

Reply via email to