On Mon, Oct 10, 2011 at 11:54:08PM +0800, shaohef(a)linux.vnet.ibm.com wrote:
From: Shaohe Feng <shaohef(a)linux.vnet.ibm.com>
Basically, this feature can go along with qemu monitor passthrough.
That way, if we use new commands in the monitor that generate new events, we want
some way to receive those new events too.
I agree that this patch is very complimentary to the existing tools for qemu
interaction (qemu_monitor_command, qemu_attach, etc). It allows API users to
subscribe to events that are not yet handled by libvirt. I have a couple of
design questions about this feature.
1) This feature seems to be a bit qemu specific. Other qemu-specific APIs
(mentioned above) are build into libvirt-qemu.so so that they are kept apart
from the hypervisor-neutral parts of the API. Is it possible to do that for
an event handler like this patch implements? Do we want to enforce such a
limit?
2) This patch causes a string representing a raw JSON event object to be
passed to the callbacks that are registered for the default event. This seems
fine to me. I do wonder if relying on a 'default' event is a bad thing for an
application to do. Let's say an app decides to handle NEW_EVENT using this
default handler. Then, libvirt gains official support for NEW_EVENT. When the
libvirt package is updated in the application's environment, NEW_EVENT will no
longer trigger via the default handler. Thus, the application is broken by a
libvirt upgrade. Would it be better to have a 'raw event' sink where all events
(whether supported or not) would be sent?
In order to test this patch, see the attached python test case. When
domains are started,
it will be able to catch RESUME events.
Tested-by: Adam Litke <agl(a)us.ibm.com>
Signed-off-by: Shaohe Feng <shaohef(a)linux.vnet.ibm.com>
---
daemon/remote.c | 34 ++++++++++++++++++++++
include/libvirt/libvirt.h.in | 14 +++++++++
python/libvirt-override-virConnect.py | 12 ++++++++
python/libvirt-override.c | 50 +++++++++++++++++++++++++++++++++
src/conf/domain_event.c | 46 ++++++++++++++++++++++++++++++
src/conf/domain_event.h | 5 +++
src/libvirt_private.syms | 2 +
src/qemu/qemu_monitor.c | 9 ++++++
src/qemu/qemu_monitor.h | 6 ++++
src/qemu/qemu_monitor_json.c | 31 ++++++++++++++++++++
src/qemu/qemu_process.c | 23 +++++++++++++++
src/remote/remote_driver.c | 31 ++++++++++++++++++++
src/remote/remote_protocol.x | 8 ++++-
src/remote_protocol-structs | 5 +++
14 files changed, 275 insertions(+), 1 deletions(-)
--
Adam Litke <agl(a)us.ibm.com>
IBM Linux Technology Center