[libvirt PATCH v5 25/32] qemu: Monitor nbdkit process for exit
Peter Krempa
pkrempa at redhat.com
Thu Feb 16 16:28:36 UTC 2023
On Thu, Feb 16, 2023 at 17:23:19 +0100, Peter Krempa wrote:
> On Tue, Feb 14, 2023 at 11:08:12 -0600, Jonathon Jongsma wrote:
> > Adds the ability to monitor the nbdkit process so that we can take
> > action in case the child exits unexpectedly.
> >
> > When the nbdkit process exits, we pause the vm, restart nbdkit, and then
> > resume the vm. This allows the vm to continue working in the event of a
> > nbdkit failure.
> >
> > Eventually we may want to generalize this functionality since we may
> > need something similar for e.g. qemu-storage-daemon, etc.
> >
> > The process is monitored with the pidfd_open() syscall if it exists
> > (since linux 5.3). Otherwise it resorts to checking whether the process
> > is alive once a second. The one-second time period was chosen somewhat
> > arbitrarily.
> >
> > Signed-off-by: Jonathon Jongsma <jjongsma at redhat.com>
> > ---
> > meson.build | 7 ++
> > src/qemu/qemu_nbdkit.c | 147 ++++++++++++++++++++++++++++++++++++++--
> > src/qemu/qemu_nbdkit.h | 4 +-
> > src/qemu/qemu_process.c | 4 +-
> > 4 files changed, 155 insertions(+), 7 deletions(-)
>
> [...]
>
> > diff --git a/src/qemu/qemu_nbdkit.c b/src/qemu/qemu_nbdkit.c
> > index e6d3232a1e..74e2ceee19 100644
> > --- a/src/qemu/qemu_nbdkit.c
> > +++ b/src/qemu/qemu_nbdkit.c
>
> [...]
>
> > +#if WITH_DECL_SYS_PIDFD_OPEN
> > + pidfd = syscall(SYS_pidfd_open, proc->pid, 0);
> > + if (pidfd < 0)
> > + return -1;
> > +
> > + proc->eventwatch = virEventAddHandle(pidfd,
> > + VIR_EVENT_HANDLE_READABLE,
> > + qemuNbdkitProcessPidfdCb,
> > + qemuNbdkitProcessEventDataNew(proc, vm),
> > + (virFreeCallback)qemuNbdkitProcessEventDataFree);
> > +#else
> > + /* fall back to checking once a second */
> > + proc->eventwatch = virEventAddTimeout(1000,
> > + qemuNbdkitProcessTimeoutCb,
> > + qemuNbdkitProcessEventDataNew(proc, vm),
> > + (virFreeCallback)qemuNbdkitProcessEventDataFree);
>
> I don't think we want to do this this polling. I'll rather disable all
> of nbdkit than do this if the event interface is not available.
>
> Additionally any failure in this function would result into the default
> error of "unable to connect to nbdkit" but this time with no
> information.
If you get rid of the polling impl:
Reviewed-by: Peter Krempa <pkrempa at redhat.com>
More information about the libvir-list
mailing list