[libvirt] [PATCH 1/9] Add support for event tray moved of removable disks

Daniel Veillard veillard at redhat.com
Mon Mar 12 08:31:26 UTC 2012


On Fri, Mar 09, 2012 at 06:49:20PM +0800, Osier Yang wrote:
> On 2012年03月09日 16:55, Daniel Veillard wrote:
> >On Mon, Mar 05, 2012 at 06:25:39PM +0800, Osier Yang wrote:
> >>This patch introduces a new event type for the QMP event
> >>DEVICE_TRAY_MOVED, which occurs when the tray of a removable
> >>disk is moved (i.e opened or closed):
> >>
> >>     VIR_DOMAIN_EVENT_ID_TRAY_MOVED
> >>
> >>The event's data includes the device alias and the tray's
> >>status, which indicates whether the tray has been opened
> >>or closed.  Thus the callback definition for the event is:
> >>
> >>typedef void
> >>(*virConnectDomainEventTrayMovedCallback)(virConnectPtr conn,
> >>                                           virDomainPtr dom,
> >>                                           const char *devAlias,
> >>                                           unsigned int trayOpened,
> >>                                           void *opaque);
> >
> >   Hum ... could we make that slightly more generic.
> >Instead of just being able to report on tray opened or not (i.e. closed)
> >Let's report TrayChangeCallback,  and have an 'int reason' instead.
> 
> Hmm, yes, 'int reason' is good idea.
> 
> But for the name, TrayMoved might describe the real action more
> precisely. Unlike DiskChange, it says there was some medium was
> changed, TrayMoved only intends to report the tray status changeing
> event, nothing really changed, or we can rename it to TrayStatusChange
> to indicate the tray status is changed, but IMO it's not much
> difference except getting a longer name. :-)
> 
> >Then for example the API would be able to cope with more set of events,
> >one of the thing I can think of now would be the ability to emulate
> >multiple device in one as disk changers,
> 
> What does "emulate multiple device" mean? is it "s/device/event/"?

  Nahh, I was thinking of thinks like cdrom changers, where the
  enclosure can hold multiple disks and swap them. But in retrospect
  I dould we will have much need to emulate such hardware ever...

> and also possibly be able to
> >provide invormations about the kind of media, i.e. switch from a CD-ROM
> >to a DVD-WR in the tray.
> 
> IMHO we should seperate the events for "tray change" and
> "medium change", the info such as the kind of media should handled
> by DiskChange instead,

  yes, reasonnable.

> How about defining the callback like:
> 
> /**
>  * virConnectDomainEventTrayMovedReason:
>  *
>  * The reason describing why the callback was called
>  */
> enum {
>     VIR_DOMAIN_EVENT_TRAY_MOVED_OPEN = 0,
>     VIR_DOMAIN_EVENT_TRAY_MOVED_CLOSE,
> 
>     /* Something else such as other driver only emits a
>      * event for OPEN+CLOSE.
>      */
> 
> #ifdef VIR_ENUM_SENTINELS
>     VIR_DOMAIN_EVENT_TRAY_MOVED_LAST
> #endif
> } virDomainEventTrayMovedReason;
> 
> 
> /**
>  * virConnectDomainEventTrayMovedCallback:
>  * @conn: connection object
>  * @dom: domain on which the event occurred
>  * @devAlias: device alias
>  * @reason: reason why this callback was called, any of
>             virDomainEventTrayMovedReason
>  * @opaque: application specified data
>  *
>  * This callback occurs when the tray of a removable device is moved.
>  *
>  * The callback signature to use when registering for an event of type
>  * VIR_DOMAIN_EVENT_ID_TRAY_MOVED wit virConnectDomainEventRegisterAny()
>  */
> typedef void
> (*virConnectDomainEventTrayMovedCallback)(virConnectPtr conn,
>                                             virDomainPtr dom,
>                                             const char *devAlias,
>                                             int reason,
>                                             void *opaque);

  I think I would still feel a bit better with Changed rather than Moved
which is more specific, but not a blocker.

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list