On Wed, Oct 12, 2011 at 07:16:21AM +0200, Jiri Denemark wrote:
virConnectSetKeepAlive public API can be used by a client connecting
to
remote server to start using keepalive protocol. The API is handled
directly by remote driver and not transmitted over the wire to the
server.
---
Notes:
Version 3:
- remove virConnectAllowKeepAlive
- rename virConnectStartKeepAlive as virConnectSetKeepAlive
- add a note to virEventRegisterImpl that running the event loop
is mandatory once registered
Version 2:
- no change
include/libvirt/libvirt.h.in | 4 +++
src/driver.h | 5 ++++
src/libvirt.c | 54 ++++++++++++++++++++++++++++++++++++++++++
src/libvirt_internal.h | 10 ++++++-
src/libvirt_public.syms | 1 +
src/util/event.c | 6 ++--
6 files changed, 75 insertions(+), 5 deletions(-)
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index c991dfc..ad59804 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -3235,6 +3235,10 @@ typedef struct _virTypedParameter virMemoryParameter;
*/
typedef virMemoryParameter *virMemoryParameterPtr;
+int virConnectSetKeepAlive(virConnectPtr conn,
+ int interval,
+ unsigned int count);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/driver.h b/src/driver.h
index b899d0e..c1223c1 100644
--- a/src/driver.h
+++ b/src/driver.h
@@ -735,6 +735,10 @@ typedef int
(*virDrvDomainBlockPull)(virDomainPtr dom, const char *path,
unsigned long bandwidth, unsigned int flags);
+typedef int
+ (*virDrvSetKeepAlive)(virConnectPtr conn,
+ int interval,
+ unsigned int count);
/**
* _virDriver:
@@ -893,6 +897,7 @@ struct _virDriver {
virDrvDomainGetBlockJobInfo domainGetBlockJobInfo;
virDrvDomainBlockJobSetSpeed domainBlockJobSetSpeed;
virDrvDomainBlockPull domainBlockPull;
+ virDrvSetKeepAlive setKeepAlive;
};
typedef int
diff --git a/src/libvirt.c b/src/libvirt.c
index f07c720..23602f7 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -16817,3 +16817,57 @@ error:
virDispatchError(dom->conn);
return -1;
}
+
+/**
+ * virConnectSetKeepAlive:
+ * @conn: pointer to a hypervisor connection
+ * @interval: number of seconds of inactivity before a keepalive message is sent
+ * @count: number of messages that can be sent in a row
+ *
+ * Start sending keepalive messages after interval second of inactivity and
+ * consider the connection to be broken when no response is received after
+ * count keepalive messages sent in a row. In other words, sending count + 1
+ * keepalive message results in closing the connection.
+ *
+ * Note: client has to implement and run event loop to be able to use keepalive
+ * messages. Failure to do so may result in connections being closed
+ * unexpectedly.
It is probably obvious, but we should document that if either interval or
count are zero, then keepalives are disabled.
ACK to patch
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 :|