[Libvir] Re: Asynchronous notifications of domain start/stop
Gerd Hoffmann
kraxel at redhat.com
Wed Jul 18 10:30:03 UTC 2007
Hi,
> libvirt, but requires asynch notifications of domain start/stop (and
Notification. Not async notification.
Point is I want avoid waking up every second or so to poll for rare
events. There is no need for the events being truly async.
> typedef int virEventHandle;
>
> /* Register a callback to catch domain start events. */
> virEventHandle virEventDomainStart (virConnectPtr, void (*f)
> (virConnectPtr, int domid));
>
> /* Register a callback to catch domain stop events. */ virEventHandle
> virEventDomainStop (virConnectPtr, void (*f) (virConnectPtr, int
> domid));
>
> /* Unregister any type of callback. */ int virEventCancel
> (virConnectPtr, virEventHandle handle);
Doesn't need to be a callback model.
> In the Xen case, we can use XenStore watches[1]. Callbacks from
> XenStore can be translated directly into event callbacks.
xenstore doesn't calls you back. xenstore gives you a file handle you
can select() on and a function you can call when data is available to
figure which watch did fire.
You can register a token together with the watch, which in turn you can
use to implement callbacks. But libxenstore itself doesn't callback you.
> In the qemu/remote case, asynch notifications are nominally supported
> by the protocol, but I haven't really looked at all the implications.
> Seems like we'd need to use MSG_OOB to signal the client process, and
> translate the SIGURG signal received into a callback.
I'd like to veto that idea. Calling a callback from a signal handler is
just asking for trouble. It isn't safe to call libc functions from a
signal handler for example. Also libvirt hijacking the SIGURG signal is
not very nice.
> We would also need to avoid mixing ordinary request/response with the
> notifications
Why? Just disallowing notifications while a request is in flight should
be enougth I think.
I'd like to have something which integrates nicely with the usual
select() based event loops, like the xenstore model. Sort of "here is a
file handle, and if data comes in call this function." The function in
turn could either call callbacks or return some event struct.
cheers,
Gerd
More information about the libvir-list
mailing list