[libvirt] [PATCH v5 06/13] Add support for non-blocking calls in client RPC

Daniel P. Berrange berrange at redhat.com
Mon Nov 7 21:32:34 UTC 2011


On Thu, Nov 03, 2011 at 11:03:13AM +0100, Jiri Denemark wrote:
> When a client wants to send a keepalive message it needs to do so in a
> non-blocking way to avoid blocking its event loop. This patch adds
> dontBlock flag which says that the call should be processed without
> blocking. Such calls do not have a thread waiting for the result
> associated with them. This means, that sending such call fails if no
> thread is dispatching and writing to the socket would block. In case
> there is a thread waiting for its (normal) call to finish, sending
> non-blocking call just pushes it into the queue and lets the dispatching
> thread send it. The thread which has the buck tries to send all
> non-blocking calls in the queue in a best effort way---if sending them
> would block or there's an error on the socket, non-blocking calls are
> simply removed from the queue and discarded.  In case a non-blocking
> call is partially sent but sending the rest of it would block, it is
> moved into client's unfinishedCall and left for future delivery.  Every
> sending attempt first sends the rest of unfinishedCall and than
> continues with other queued calls.
> ---
> Notes:
>     Version 5:
>     - partially sent non-blocking calls now work even for SASL (or other
>       transports that cache data internally)
>     - fixed several other bugs in that area
>     
>     Version 4:
>     - correctly handle partially sent non-blocking calls that would block
>     
>     Version 3:
>     - no changes
>     
>     Version 2:
>     - no changes
> 
>  src/rpc/virnetclient.c |  285 ++++++++++++++++++++++++++++++++++++++----------
>  1 files changed, 229 insertions(+), 56 deletions(-)

I started reviewing this patch, but I'm finding the changes somewhat
confusing. I think there might be a different way to go about it, so
I'm hacking up a proof of concept counter-proposal for non-blocking
I/O. We sort of needed this already for the streams code, but we
rather ignored it because it was rarely important in practice.

Regards,
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 :|




More information about the libvir-list mailing list