[libvirt] [PATCH v5 5/5] startupPolicy: Emit event on disk source dropping

Eric Blake eblake at redhat.com
Fri Oct 21 15:05:49 UTC 2011


On 10/21/2011 07:13 AM, 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 source string and disk alias
> (which should be unique among a domain) and reason (an integer);

The guaranteed unique string is disk->dst, which is required by the 
schema and parser to be present for all disks (from <target dev='...'> 
in the XML).  While disk aliases are also unique, they are not part of 
the user's XML, and correspond only to what we create under the hood to 
pass to qemu.  I wonder if we should go with the disk target name, 
rather than the disk alias.  That would also match what I did for 
snapshots - a <domainsnapshot> prefers listing disk->dst anywhere on 
output where a unique name is needed.

>   /**
> + * virConnectDomainEventDisChangeReason:
> + *
> + * The reason describing why this callback is called
> + */
> +typedef enum {
> +    VIR_DOMAIN_DISK_CHANGE_MISSING_ON_START = 0, /* oldSrcPath is set */
> +} virConnectDomainEventDiskChangeReason;
> +
> +/**
> + * virConnectDomainEventDiskChangeCallback:
> + * @conn: connection object
> + * @dom: domain on which the event occurred
> + * @oldSrcPath: old source path
> + * @newSrcPath: new source path
> + * @reason: reason why this callback was called; any of
> + *          virConnectDomainEventDiskChangeReason
> + * @opaque: application specified data
> + *
> + * This callback occurs when disk gets changed. However,
> + * not all @reason mush cause both @oldSrcPath and @newSrcPath

s/mush/will/

> +++ b/src/conf/domain_event.c
> @@ -88,6 +88,12 @@ struct _virDomainEvent {
>               int type;
>               int status;
>           } blockJob;
> +        struct {
> +            char *oldSrcPath;
> +            char *newSrcPath;
> +            char *devAlias;

See for example where domain_conf.c lists _virDomainSnapshotDiskDef uses 
char *name as its mapping back to <target dev='...'>.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org




More information about the libvir-list mailing list