[libvirt] [python PATCH 1/2] qemu: support arbitrary monitor events

Pavel Hrdina phrdina at redhat.com
Mon Mar 24 14:32:13 UTC 2014


On 5.2.2014 03:01, Eric Blake wrote:
> Wrap the new virConnectDomainQemuMonitorEventRegister function
> being added in libvirt 1.2.2.  This patch copies heavily from
> network events (commit 6ea5be0) and from event loop callbacks
> in libvirt-override.c, since in the libvirt_qemu module, we
> must expose top-level functions rather than class members.
>
> * generator.py (qemu_skip_function): Don't generate event code.
> (qemuBuildWrappers): Delay manual portion until after imports.
> * libvirt-qemu-override.py (qemuMonitorEventRegister)
> (qemuMonitorEventDeregister): New file.
> * libvirt-qemu-override.c
> (libvirt_qemu_virConnectDomainQemuMonitorEventFreeFunc)
> (libvirt_qemu_virConnectDomainQemuMonitorEventCallback)
> (libvirt_qemu_virConnectDomainQemuMonitorEventRegister)
> (libvirt_qemu_virConnectDomainQemuMonitorEventDeregister)
> (libvirt_qemu_lookupPythonFunc, getLibvirtQemuDictObject)
> (getLibvirtQemuModuleObject): New functions.
>
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---

> diff --git a/libvirt-qemu-override.py b/libvirt-qemu-override.py
> new file mode 100644
> index 0000000..ab48bec
> --- /dev/null
> +++ b/libvirt-qemu-override.py
> @@ -0,0 +1,36 @@
> +# Manually written part of python bindings for libvirt-qemu
> +
> +def _dispatchQemuMonitorEventCallback(conn, dom, event, seconds, micros, details, cbData):
> +    """Dispatches events to python user qemu monitor event callbacks
> +    """
> +    cb = cbData["cb"]
> +    opaque = cbData["opaque"]
> +
> +    cb(conn, libvirt.virDomain(conn, _obj=dom), event, seconds, micros, details, opaque)
> +    return 0
> +
> +def qemuMonitorEventDeregister(conn, callbackID):
> +    """Removes a qemu monitor event callback. De-registering for a callback
> +       will disable delivery of this event type"""
> +    try:
> +        ret = libvirtmod_qemu.virConnectDomainQemuMonitorEventDeregister(conn._o, callbackID)
> +        if ret == -1: raise libvirt.libvirtError ('virConnectDomainQemuMonitorEventDeregister() failed')
> +        del conn.qemuMonitorEventCallbackID[callbackID]
> +    except AttributeError:
> +        pass
> +
> +def qemuMonitorEventRegister(conn, dom, event, cb, opaque, flags=0):
> +    """Adds a qemu monitor event callback. Registering for a monitor
> +       callback will enable delivery of the events"""
> +    if not hasattr(conn, 'qemuMonitorEventCallbackID'):
> +        conn.qemuMonitorEventCallbackID = {}
> +    cbData = { "cb": cb, "conn": conn, "opaque": opaque }
> +    if dom is None:
> +        ret = libvirtmod_qemu.virConnectDomainQemuMonitorEventRegister(conn._o, None, event, cbData, flags)
> +    else:
> +        ret = libvirtmod_qemu.virConnectDomainQemuMonitorEventRegister(conn._o, dom._o, event, cbData, flags)
> +    if ret == -1:
> +        raise libvirt.libvirtError ('virConnectDomainQemuMonitorEventRegister() failed')
> +    conn.qemuMonitorEventCallbackID[ret] = opaque
> +    return ret
> +

Also remove the blank line. And please try to fix it and push it asap
as Jenkins tests depend on this patch, thanks.

Pavel





More information about the libvir-list mailing list