On Tue, May 12, 2020 at 07:58:17PM +0100, Dr. David Alan Gilbert wrote: > * Daniel P. Berrang̩ (berra...@redhat.com) wrote: > > On Tue, May 12, 2020 at 11:32:06AM +0200, Lukas Straub wrote: > > > On Mon, 11 May 2020 16:46:45 +0100 > > > "Dr. David Alan Gilbert" <dgilb...@redhat.com> wrote: > > > > > > > * Daniel P. Berrang̮̩ (berra...@redhat.com) wrote: > > > > > ... > > > > > That way if QEMU does get stuck, you can start by tearing down the > > > > > least distruptive channel. eg try tearing down the migration > > > > > connection > > > > > first (which shouldn't negatively impact the guest), and only if that > > > > > doesn't work then, move on to tear down the NBD connection (which > > > > > risks > > > > > data loss) > > > > > > > > I wonder if a different way would be to make all network connections > > > > register with yank, but then make yank take a list of connections to > > > > shutdown(2). > > > > > > Good Idea. We could name the connections (/yank callbacks) in the > > > form "nbd:<node-name>", "chardev:<chardev-name>" and "migration" > > > (and add "netdev:...", etc. in the future). Then make yank take a > > > list of connection names as you suggest and silently ignore connections > > > that don't exist. And maybe even add a 'query-yank' oob command returning > > > a list of registered connections so the management application can do > > > pattern matching if it wants. > > > > Yes, that would make the yank command much more flexible in how it can > > be used. > > > > As an alternative to using formatted strings like this, it could be > > modelled more explicitly in QAPI > > > > { 'struct': 'YankChannels', > > 'data': { 'chardev': [ 'string' ], > > 'nbd': ['string'], > > 'migration': bool } } > > > > In this example, 'chardev' would accept a list of chardev IDs which > > have it enabled, 'nbd' would accept a list of block node IDs which > > have it enabled, and migration is a singleton on/off. > > Do we already have a QOM object name for each of these things? > Is that nbd/blockdevice unique - i.e. can you have multiple nbd clients > on the same node? > > > The benefit of this modelling is that you can introspect QEMU > > to discover what classes of channels support being yanked by > > this QEMU build, as well as what instances are configured to > > be yanked. ie you can distinguish between a QEMU that doesn't > > support yanking network devices, from a QEMU that does support > > yanking network devices, but doesn't have it enabled for any > > network device instances. > > What do we need to make it introspectable like that?
The model I describe above would work, because you can introspect the QAPI schema to see what fields are in the "YankChannels" struct. So if we added a "nic" field later, apps can discover it. 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 :|