On Wed, Oct 19, 2011 at 04:42:59PM +0200, Michal Privoznik wrote:
If a disk source gets dropped because it is not accessible,
mgmt application might want to be informed about this. Therefore
we need to emit an event. The event presented in this patch
is however a bit superset of what written above. The reason is simple:
an intention to be easily expanded, e.g. on 'user ejected disk
in guest' events. Therefore, callback gets target string
(which should be unique among a domain) and reason (an integer);
It can't get alias, as some disk changes (esp. dropping source
caused by on_missing feature) might happen on inactive domain
where no disks aliases exists.
---
daemon/remote.c | 37 ++++++++++++++
examples/domain-events/events-c/event-test.c | 27 ++++++++++-
examples/domain-events/events-python/event-test.py | 4 ++
include/libvirt/libvirt.h.in | 28 +++++++++++
python/libvirt-override-virConnect.py | 9 ++++
python/libvirt-override.c | 51 ++++++++++++++++++++
src/conf/domain_event.c | 50 +++++++++++++++++++
src/conf/domain_event.h | 7 +++
src/libvirt_private.syms | 2 +
src/qemu/qemu_domain.c | 7 +++
src/remote/remote_driver.c | 34 +++++++++++++
src/remote/remote_protocol.x | 9 +++-
src/remote_protocol-structs | 5 ++
13 files changed, 268 insertions(+), 2 deletions(-)
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index 361881a..d6d928a 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -2996,6 +2996,33 @@ typedef void
(*virConnectDomainEventBlockJobCallback)(virConnectPtr conn,
void *opaque);
/**
+ * virConnectDomainEventDiskEjectReason:
+ *
+ * The reason describing why this callback is called
+ */
+typedef enum {
+ VIR_DOMAIN_DISK_EJECT_ON_MISSING = 0,
+} virConnectDomainEventDiskEjectReason;
I'd name this:
VIR_DOMAIN_DISK_EJECT_MISSING_ON_START
+
+/**
+ * virConnectDomainEventDiskEjectCallback:
+ * @conn: connection object
+ * @dom: domain on which the event occurred
+ * @target: target which changed status
In the I/O error event, we use 'srcPath' and 'devAlias' in the event
name. I think we probably ought todo the same here. So the app gets
details of which file was missing, and the unique alias of the device.
+ * @reason: reason why this callback was called; any of
+ * virConnectDomainEventDiskEjectReason
+ * @opaque: application specified data
+ *
+ * The callback signature to use when registering for an event of type
+ * VIR_DOMAIN_EVENT_ID_IO_ERROR with virConnectDomainEventRegisterAny()
+ */
+typedef void (*virConnectDomainEventDiskEjectCallback)(virConnectPtr conn,
+ virDomainPtr dom,
+ const char *target,
+ int reason,
+ void *opaque);
+
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|