[libvirt] [PATCH v2 03/12] Introduce two public APIs for keepalive protocol
Jiri Denemark
jdenemar at redhat.com
Thu Oct 6 13:06:44 UTC 2011
On Mon, Oct 03, 2011 at 10:42:30 +0100, Daniel P. Berrange wrote:
> On Mon, Oct 03, 2011 at 10:26:30AM +0100, Daniel P. Berrange wrote:
> > On Fri, Sep 23, 2011 at 10:24:48AM +0200, Jiri Denemark wrote:
> > > This introduces virConnectAllowKeepAlive and virConnectStartKeepAlive
> > > public APIs which can be used by a client connecting to remote server to
> > > indicate support for keepalive protocol. Both APIs are handled directly
> > > by remote driver and not transmitted over the wire to the server.
> > > ---
> > > include/libvirt/libvirt.h.in | 5 ++
> > > src/driver.h | 9 ++++
> > > src/libvirt.c | 107 ++++++++++++++++++++++++++++++++++++++++++
> > > src/libvirt_internal.h | 10 +++-
> > > src/libvirt_public.syms | 6 ++
> > > 5 files changed, 135 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> > > index 39155a6..6f61cc0 100644
> > > --- a/include/libvirt/libvirt.h.in
> > > +++ b/include/libvirt/libvirt.h.in
> > > @@ -3210,6 +3210,11 @@ typedef struct _virTypedParameter virMemoryParameter;
> > > */
> > > typedef virMemoryParameter *virMemoryParameterPtr;
> > >
> > > +int virConnectAllowKeepAlive(virConnectPtr conn);
> > > +int virConnectStartKeepAlive(virConnectPtr conn,
> > > + int interval,
> > > + unsigned int count);
> >
> > With this design, even if both the client and server support
> > keepalive at a protocol level, it will only ever be enabled if
> > the client application remembers to call virConnectAllowKeepAlive.
> > I think this puts too much responsibility on the client, at the
> > detriment of the server.
> >
> > An administrator of libvirtd might want to mandate use of keep
> > alive for all clients (knowing this would exclude any libvirt
> > client <= 0.9.6 of course). With this design they cannot do this
> > since they are reliant on the client application programmer to
> > call virConnectAllowKeepAlive, which I believe 95% of people will
> > never bother todo.
> >
> > IMHO we should change this so that
> >
> > - In remote_driver.c, doRemoteOpen(), after performing
> > authentication, but before opening the connection
> > we should send a
> >
> > supports_feature(KEEPALIVE)
> >
> > - Upon receiving supports_feature(KEEPALIVE) the server
> > shall be free to start sending keep alives, if it is
> > configured todo so.
>
>
> Hmm, actually I see elsewhere that responding to server initiated
> pings, requires help of the event loop which we can't assume is
> running.
>
> I guess we could enable it if we detect that an event loop has been
> registered. This would make us hit the virsh bug again where we
> register the event loop, but never run it. Arguably that bug should
> be fixed in virsh for other reasons, so perhaps this is justification
> enough todo so.
Right, we could do that once the bug in virsh is fixed so I'll try to
incorporate the virsh fix into this series.
> If only we had made use of an event loop mandatory all those years
> ago :-(
Oh yes, client-side implementation would be much more simple without the buck
passing algorithm. Although that would mean significantly less fun on that
part :-)
Jirka
More information about the libvir-list
mailing list