[libvirt] [PATCH v2 4/6] qemu: Wire up PR_MANAGER_STATUS_CHANGED event
Peter Krempa
pkrempa at redhat.com
Tue Jul 10 10:17:18 UTC 2018
On Thu, Jul 05, 2018 at 09:44:36 +0200, Michal Privoznik wrote:
> This event is emitted on the monitor if one of pr-managers lost
> connection to its pr-helper process. What libvirt needs to do is
> restart the pr-helper process iff it corresponds to managed
> pr-manager.
>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
> src/qemu/qemu_domain.c | 1 +
> src/qemu/qemu_domain.h | 1 +
> src/qemu/qemu_driver.c | 17 ++++++++++++++
> src/qemu/qemu_monitor.c | 15 ++++++++++++
> src/qemu/qemu_monitor.h | 11 +++++++++
> src/qemu/qemu_monitor_json.c | 23 ++++++++++++++++++
> src/qemu/qemu_process.c | 55 ++++++++++++++++++++++++++++++++++++++++++++
> 7 files changed, 123 insertions(+)
[...]
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index f200729cb1..ac2f73c99e 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -1615,6 +1615,60 @@ qemuProcessHandleDumpCompleted(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
> }
>
>
> +static int
> +qemuProcessHandlePRManagerStatusChanged(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
> + virDomainObjPtr vm,
> + const char *prManager,
> + bool connected,
> + void *opaque)
> +{
> + virQEMUDriverPtr driver = opaque;
> + qemuDomainObjPrivatePtr priv;
> + struct qemuProcessEvent *processEvent = NULL;
> + const char *managedAlias = qemuDomainGetManagedPRAlias();
> + int ret = -1;
> +
> + virObjectLock(vm);
> +
> + VIR_DEBUG("pr-manager %s status changed for domain %p %s connected=%d",
> + prManager, vm, vm->def->name, connected);
> +
> + if (connected) {
> + /* Connect events are boring. */
> + ret = 0;
> + goto cleanup;
> + }
> + /* Disconnect events are more interesting. */
> +
> + if (STRNEQ(prManager, managedAlias)) {
> + VIR_DEBUG("pr-manager %s not managed, ignoring event",
> + prManager);
> + ret = 0;
> + goto cleanup;
> + }
> +
> + priv = vm->privateData;
> + priv->prDaemonRunning = false;
> +
> + if (VIR_ALLOC(processEvent) < 0)
> + goto cleanup;
> +
> + processEvent->eventType = QEMU_PROCESS_EVENT_PR_DISCONNECT;
> + processEvent->vm = virObjectRef(vm);
> +
> + if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0) {
> + qemuProcessEventFree(processEvent);
> + ignore_value(virObjectUnref(vm));
We usually don't ignore value of this.
> + goto cleanup;
> + }
> +
> + ret = 0;
> + cleanup:
> + virObjectUnlock(vm);
> + return ret;
ACK
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180710/648cc123/attachment-0001.sig>
More information about the libvir-list
mailing list