[libvirt] [PATCH v2 3/9] admin: Introduce virAdmConnectIsAlive

Martin Kletzander mkletzan at redhat.com
Tue Nov 3 18:39:37 UTC 2015


On Fri, Oct 16, 2015 at 08:12:20PM +0200, Erik Skultety wrote:
>Since most of our APIs rely on an acive functional connection to a daemon and
>we have such a mechanism in libvirt already, there's need to have such a way in
>libvirt-admin as well. By introducing a new public API, this patch provides
>support to check for an active connection.
>---
> include/libvirt/libvirt-admin.h |  1 +
> src/libvirt-admin.c             | 31 +++++++++++++++++++++++++++++++
> src/libvirt_admin_public.syms   |  1 +
> tools/virt-admin.c              |  2 +-
> 4 files changed, 34 insertions(+), 1 deletion(-)
>
>diff --git a/include/libvirt/libvirt-admin.h b/include/libvirt/libvirt-admin.h
>index 9997cc2..72671c6 100644
>--- a/include/libvirt/libvirt-admin.h
>+++ b/include/libvirt/libvirt-admin.h
>@@ -52,6 +52,7 @@ virAdmConnectPtr virAdmConnectOpen(const char *name, unsigned int flags);
> int virAdmConnectClose(virAdmConnectPtr conn);
>
> int virAdmConnectRef(virAdmConnectPtr conn);
>+int virAdmConnectIsAlive(virAdmConnectPtr conn);
>
> # ifdef __cplusplus
> }
>diff --git a/src/libvirt-admin.c b/src/libvirt-admin.c
>index 5a4fc48..f0824dd 100644
>--- a/src/libvirt-admin.c
>+++ b/src/libvirt-admin.c
>@@ -386,3 +386,34 @@ virAdmConnectRef(virAdmConnectPtr conn)
>
>     return 0;
> }
>+
>+/**
>+ * virAdmConnectIsAlive:
>+ * @conn: connection to admin server
>+ *
>+ * Decide whether the connection to the admin server is alive or not.
>+ * Connection is considered alive if the channel it is running over is not
>+ * closed.
>+ *
>+ * Returns 1, if the connection is alive, 0 if the channel has already
>+ * been closed.
>+ */
>+int
>+virAdmConnectIsAlive(virAdmConnectPtr conn)
>+{
>+    bool ret;
>+    remoteAdminPrivPtr priv = conn->privateData;
>+
>+    VIR_DEBUG("conn=%p", conn);
>+
>+    virResetLastError();
>+
>+    virObjectLock(priv);
>+    ret = virNetClientIsOpen(priv->client);
>+    virObjectUnlock(priv);
>+
>+    if (ret)
>+        return 1;
>+    else
>+        return 0;

return ret; is fine here.

>+}
>diff --git a/src/libvirt_admin_public.syms b/src/libvirt_admin_public.syms
>index d9e3c0b..16cfd42 100644
>--- a/src/libvirt_admin_public.syms
>+++ b/src/libvirt_admin_public.syms
>@@ -15,4 +15,5 @@ LIBVIRT_ADMIN_1.3.0 {
>         virAdmConnectOpen;
>         virAdmConnectClose;
>         virAdmConnectRef;
>+        virAdmConnectIsAlive;
> };
>diff --git a/tools/virt-admin.c b/tools/virt-admin.c
>index cc33b7b..1bc10b0 100644
>--- a/tools/virt-admin.c
>+++ b/tools/virt-admin.c
>@@ -171,7 +171,7 @@ vshAdmConnectionHandler(vshControl *ctl)
>     if (!priv->conn || disconnected)
>         vshAdmReconnect(ctl);
>
>-    if (!priv->conn) {
>+    if (!priv->conn || !virAdmConnectIsAlive(priv->conn)) {

I know we don't do that in virsh, so it doesn't seem obvious here, but
shouldn't we do reconnect also when the connection is not alive?  I,
personally, would add it into the previous condition as well.

ACK.

>         vshError(ctl, "%s", _("no valid connection"));
>         return NULL;
>     }
>--
>2.4.3
>
>--
>libvir-list mailing list
>libvir-list at redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20151103/8d311b68/attachment-0001.sig>


More information about the libvir-list mailing list