[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 1/4] Introduce yank feature
From: |
Daniel P . Berrangé |
Subject: |
Re: [PATCH v4 1/4] Introduce yank feature |
Date: |
Fri, 19 Jun 2020 17:53:59 +0100 |
User-agent: |
Mutt/1.14.0 (2020-05-02) |
On Fri, Jun 19, 2020 at 04:23:50PM +0200, Lukas Straub wrote:
> On Tue, 16 Jun 2020 15:39:57 +0100
> Daniel P. Berrangé <berrange@redhat.com> wrote:
>
> > On Mon, May 25, 2020 at 05:44:23PM +0200, Lukas Straub wrote:
> > > The yank feature allows to recover from hanging qemu by "yanking"
> > > at various parts. Other qemu systems can register themselves and
> > > multiple yank functions. Then all yank functions for selected
> > > instances can be called by the 'yank' out-of-band qmp command.
> > > Available instances can be queried by a 'query-yank' oob command.
> > >
> > > Signed-off-by: Lukas Straub <lukasstraub2@web.de>
> > > ---
> > > qapi/misc.json | 45 +++++++++++++
> > > yank.c | 174 +++++++++++++++++++++++++++++++++++++++++++++++++
> > > yank.h | 67 +++++++++++++++++++
> > > 3 files changed, 286 insertions(+)
> > > create mode 100644 yank.c
> > > create mode 100644 yank.h
> >
> > > +void yank_register_function(char *instance_name, YankFn *func, void
> > > *opaque)
> > > +{
> > > + struct YankInstance *instance;
> > > + struct YankFuncAndParam *entry;
> > > +
> > > + qemu_mutex_lock(&lock);
> > > + instance = yank_find_instance(instance_name);
> > > + assert(instance);
> > > +
> > > + entry = g_slice_new(struct YankFuncAndParam);
> > > + entry->func = func;
> > > + entry->opaque = opaque;
> > > +
> > > + QLIST_INSERT_HEAD(&instance->yankfns, entry, next);
> > > + qemu_mutex_unlock(&lock);
> > > +}
> > > +
> > > +void yank_unregister_function(char *instance_name, YankFn *func, void
> > > *opaque)
> > > +{
> > > + struct YankInstance *instance;
> > > + struct YankFuncAndParam *entry;
> > > +
> > > + qemu_mutex_lock(&lock);
> > > + instance = yank_find_instance(instance_name);
> > > + assert(instance);
> > > +
> > > + QLIST_FOREACH(entry, &instance->yankfns, next) {
> > > + if (entry->func == func && entry->opaque == opaque) {
> > > + QLIST_REMOVE(entry, next);
> > > + g_slice_free(struct YankFuncAndParam, entry);
> > > + qemu_mutex_unlock(&lock);
> > > + return;
> > > + }
> > > + }
> > > +
> > > + abort();
> > > +}
> >
> > Since the NBD impl no longer needs to register multiple different functions
> > on the same insance_nane, these methods could be be simplified, to only
> > accept a single function, instead of keeping a whole list. This would avoid
> > need to pass a function into the unregister() method at all.
>
> Multiple yank functions are still needed for multifd migration.
Oh I missed that subtlety, so fine to ignore my suggestion.
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 :|