]> xenbits.xensource.com Git - libvirt.git/commitdiff
Implement virConnectIsAlive in all drivers
authorJiri Denemark <jdenemar@redhat.com>
Fri, 23 Sep 2011 06:56:13 +0000 (08:56 +0200)
committerJiri Denemark <jdenemar@redhat.com>
Thu, 24 Nov 2011 11:00:10 +0000 (12:00 +0100)
16 files changed:
src/esx/esx_driver.c
src/hyperv/hyperv_driver.c
src/libxl/libxl_driver.c
src/lxc/lxc_driver.c
src/openvz/openvz_driver.c
src/phyp/phyp_driver.c
src/qemu/qemu_driver.c
src/remote/remote_driver.c
src/rpc/virnetclient.c
src/rpc/virnetclient.h
src/test/test_driver.c
src/uml/uml_driver.c
src/vbox/vbox_tmpl.c
src/vmware/vmware_driver.c
src/xen/xen_driver.c
src/xenapi/xenapi_driver.c

index 01b9cec6d2e879e0621d9d725d2ea3decb5fb8c3..0b39ef187eb5aa65392b1d190cbb889c9d15a3e5 100644 (file)
@@ -4175,6 +4175,23 @@ esxIsSecure(virConnectPtr conn)
 
 
 
+static int
+esxIsAlive(virConnectPtr conn)
+{
+    esxPrivate *priv = conn->privateData;
+
+    /* XXX we should be able to do something better than this but this is
+     * simple, safe, and good enough for now. In worst case, the function will
+     * return true even though the connection is not alive.
+     */
+    if (priv->primary)
+        return 1;
+    else
+        return 0;
+}
+
+
+
 static int
 esxDomainIsActive(virDomainPtr domain)
 {
@@ -4996,6 +5013,7 @@ static virDriver esxDriver = {
     .domainSnapshotCurrent = esxDomainSnapshotCurrent, /* 0.8.0 */
     .domainRevertToSnapshot = esxDomainRevertToSnapshot, /* 0.8.0 */
     .domainSnapshotDelete = esxDomainSnapshotDelete, /* 0.8.0 */
+    .isAlive = esxIsAlive, /* 0.9.7 */
 };
 
 
index 39b55f8330fbcd2a6ac87e794f17313d33c1781f..7665a766997334206b5e3bcb538fe8082c75c44b 100644 (file)
@@ -1118,6 +1118,23 @@ hypervIsSecure(virConnectPtr conn)
 
 
 
+static int
+hypervIsAlive(virConnectPtr conn)
+{
+    hypervPrivate *priv = conn->privateData;
+
+    /* XXX we should be able to do something better than this is simple, safe,
+     * and good enough for now. In worst case, the function will return true
+     * even though the connection is not alive.
+     */
+    if (priv->client)
+        return 1;
+    else
+        return 0;
+}
+
+
+
 static int
 hypervDomainIsActive(virDomainPtr domain)
 {
@@ -1276,6 +1293,7 @@ static virDriver hypervDriver = {
     .domainManagedSave = hypervDomainManagedSave, /* 0.9.5 */
     .domainHasManagedSaveImage = hypervDomainHasManagedSaveImage, /* 0.9.5 */
     .domainManagedSaveRemove = hypervDomainManagedSaveRemove, /* 0.9.5 */
+    .isAlive = hypervIsAlive, /* 0.9.7 */
 };
 
 
index 928d306b026fdf613a1e5f83e9a2eb4ef948759d..f21afe13f6b7e0a6f8fa7416a5f82ce097196615 100644 (file)
@@ -3877,6 +3877,13 @@ libxlDomainEventDeregisterAny(virConnectPtr conn, int callbackID)
 }
 
 
+static int
+libxlIsAlive(virConnectPtr conn ATTRIBUTE_UNUSED)
+{
+    return 1;
+}
+
+
 static virDriver libxlDriver = {
     .no = VIR_DRV_LIBXL,
     .name = "xenlight",
@@ -3950,6 +3957,7 @@ static virDriver libxlDriver = {
     .domainIsUpdated = libxlDomainIsUpdated, /* 0.9.0 */
     .domainEventRegisterAny = libxlDomainEventRegisterAny, /* 0.9.0 */
     .domainEventDeregisterAny = libxlDomainEventDeregisterAny, /* 0.9.0 */
+    .isAlive = libxlIsAlive, /* 0.9.7 */
 };
 
 static virStateDriver libxlStateDriver = {
index 1110c45d8c439109b1e2ec725ac82ea38ee668fc..30305d87a029537830dd7a8ac45fc6d6cdc0740e 100644 (file)
@@ -201,6 +201,12 @@ static int lxcIsEncrypted(virConnectPtr conn ATTRIBUTE_UNUSED)
 }
 
 
+static int lxcIsAlive(virConnectPtr conn ATTRIBUTE_UNUSED)
+{
+    return 1;
+}
+
+
 static char *lxcGetCapabilities(virConnectPtr conn) {
     lxc_driver_t *driver = conn->privateData;
     char *xml;
@@ -3273,6 +3279,7 @@ static virDriver lxcDriver = {
     .domainEventRegisterAny = lxcDomainEventRegisterAny, /* 0.8.0 */
     .domainEventDeregisterAny = lxcDomainEventDeregisterAny, /* 0.8.0 */
     .domainOpenConsole = lxcDomainOpenConsole, /* 0.8.6 */
+    .isAlive = lxcIsAlive, /* 0.9.7 */
 };
 
 static virStateDriver lxcStateDriver = {
index 8fc50127952f22eb398995b800cb4f17d19e0045..7872c0b3341dff54be19c17c04e68b5241da7ffb 100644 (file)
@@ -1424,6 +1424,12 @@ static int openvzIsSecure(virConnectPtr conn ATTRIBUTE_UNUSED) {
     return 1;
 }
 
+static int
+openvzIsAlive(virConnectPtr conn ATTRIBUTE_UNUSED)
+{
+    return 1;
+}
+
 static char *openvzGetCapabilities(virConnectPtr conn) {
     struct openvz_driver *driver = conn->privateData;
     char *ret;
@@ -1712,6 +1718,7 @@ static virDriver openvzDriver = {
     .domainIsActive = openvzDomainIsActive, /* 0.7.3 */
     .domainIsPersistent = openvzDomainIsPersistent, /* 0.7.3 */
     .domainIsUpdated = openvzDomainIsUpdated, /* 0.8.6 */
+    .isAlive = openvzIsAlive, /* 0.9.7 */
 };
 
 int openvzRegister(void) {
index 5873624788c4d75bdf7e2c22fa6a13518417b61a..cab28128517794a3ad7ee5dc4a8ddcd8aa369d56 100644 (file)
@@ -1293,6 +1293,23 @@ phypIsSecure(virConnectPtr conn ATTRIBUTE_UNUSED)
     return 1;
 }
 
+
+static int
+phypIsAlive(virConnectPtr conn)
+{
+    ConnectionData *connection_data = conn->networkPrivateData;
+
+    /* XXX we should be able to do something better but this is simple, safe,
+     * and good enough for now. In worst case, the function will return true
+     * even though the connection is not alive.
+     */
+    if (connection_data && connection_data->session)
+        return 1;
+    else
+        return 0;
+}
+
+
 static int
 phypIsUpdated(virDomainPtr conn ATTRIBUTE_UNUSED)
 {
@@ -3795,6 +3812,7 @@ static virDriver phypDriver = {
     .isEncrypted = phypIsEncrypted, /* 0.7.3 */
     .isSecure = phypIsSecure, /* 0.7.3 */
     .domainIsUpdated = phypIsUpdated, /* 0.8.6 */
+    .isAlive = phypIsAlive, /* 0.9.7 */
 };
 
 static virStorageDriver phypStorageDriver = {
index 94fbe94a29bef8e99e26aed1b5a15f10c2bee230..375cf898e9bdcec215004cb38df1d2df353dfcbe 100644 (file)
@@ -940,6 +940,11 @@ static int qemuIsEncrypted(virConnectPtr conn ATTRIBUTE_UNUSED)
     return 0;
 }
 
+static int qemuIsAlive(virConnectPtr conn ATTRIBUTE_UNUSED)
+{
+    return 1;
+}
+
 
 static int kvmGetMaxVCPUs(void) {
     int maxvcpus = 1;
@@ -10907,6 +10912,7 @@ static virDriver qemuDriver = {
     .domainGetBlockJobInfo = qemuDomainGetBlockJobInfo, /* 0.9.4 */
     .domainBlockJobSetSpeed = qemuDomainBlockJobSetSpeed, /* 0.9.4 */
     .domainBlockPull = qemuDomainBlockPull, /* 0.9.4 */
+    .isAlive = qemuIsAlive, /* 0.9.7 */
 };
 
 
index e0cd828921c05b25eb6b153beb4301c67ce7a85b..915b02f6f622b89b5343a66be1b3580bfd3ccf78 100644 (file)
@@ -4229,6 +4229,23 @@ cleanup:
 }
 
 
+static int
+remoteIsAlive(virConnectPtr conn)
+{
+    struct private_data *priv = conn->privateData;
+    bool ret;
+
+    remoteDriverLock(priv);
+    ret = virNetClientIsOpen(priv->client);
+    remoteDriverUnlock(priv);
+
+    if (ret)
+        return 1;
+    else
+        return 0;
+}
+
+
 #include "remote_client_bodies.h"
 #include "qemu_client_bodies.h"
 
@@ -4600,6 +4617,7 @@ static virDriver remote_driver = {
     .domainBlockJobSetSpeed = remoteDomainBlockJobSetSpeed, /* 0.9.4 */
     .domainBlockPull = remoteDomainBlockPull, /* 0.9.4 */
     .setKeepAlive = remoteSetKeepAlive, /* 0.9.7 */
+    .isAlive = remoteIsAlive, /* 0.9.7 */
 };
 
 static virNetworkDriver network_driver = {
index 3c97ad913338ff561280123aa9e01239b431ec07..aad7f5d79b3695e24cfbf9c9b60830a78ae6fd27 100644 (file)
@@ -677,6 +677,20 @@ bool virNetClientIsEncrypted(virNetClientPtr client)
 }
 
 
+bool virNetClientIsOpen(virNetClientPtr client)
+{
+    bool ret;
+
+    if (!client)
+        return false;
+
+    virNetClientLock(client);
+    ret = client->sock && !client->wantClose;
+    virNetClientUnlock(client);
+    return ret;
+}
+
+
 int virNetClientAddProgram(virNetClientPtr client,
                            virNetClientProgramPtr prog)
 {
index 530b0bb81f5250747be4d56ae4a6f268022cb033..61d51e16d64cafde6426caa5684e36f198edf65d 100644 (file)
@@ -86,6 +86,7 @@ int virNetClientSetTLSSession(virNetClientPtr client,
                               virNetTLSContextPtr tls);
 
 bool virNetClientIsEncrypted(virNetClientPtr client);
+bool virNetClientIsOpen(virNetClientPtr client);
 
 const char *virNetClientLocalAddrString(virNetClientPtr client);
 const char *virNetClientRemoteAddrString(virNetClientPtr client);
index f365bf440e264451426e060fb8de83c6863d28ce..180f36550b02aab901d2b2fdf2e13f0449aa59de 100644 (file)
@@ -1191,6 +1191,11 @@ static int testIsEncrypted(virConnectPtr conn ATTRIBUTE_UNUSED)
     return 0;
 }
 
+static int testIsAlive(virConnectPtr conn ATTRIBUTE_UNUSED)
+{
+    return 1;
+}
+
 static int testGetMaxVCPUs(virConnectPtr conn ATTRIBUTE_UNUSED,
                            const char *type ATTRIBUTE_UNUSED)
 {
@@ -5624,6 +5629,7 @@ static virDriver testDriver = {
     .domainIsUpdated = testDomainIsUpdated, /* 0.8.6 */
     .domainEventRegisterAny = testDomainEventRegisterAny, /* 0.8.0 */
     .domainEventDeregisterAny = testDomainEventDeregisterAny, /* 0.8.0 */
+    .isAlive = testIsAlive, /* 0.9.7 */
 };
 
 static virNetworkDriver testNetworkDriver = {
index a0e086a36aef4cd86a5d409aa5e10a23e00c948c..aedf650ff6021cde18e48821d0dff158867b3c5e 100644 (file)
@@ -1226,6 +1226,12 @@ static int umlIsEncrypted(virConnectPtr conn ATTRIBUTE_UNUSED)
 }
 
 
+static int umlIsAlive(virConnectPtr conn ATTRIBUTE_UNUSED)
+{
+    return 1;
+}
+
+
 static char *umlGetCapabilities(virConnectPtr conn) {
     struct uml_driver *driver = (struct uml_driver *)conn->privateData;
     char *xml;
@@ -2597,6 +2603,7 @@ static virDriver umlDriver = {
     .domainEventRegisterAny = umlDomainEventRegisterAny, /* 0.9.4 */
     .domainEventDeregisterAny = umlDomainEventDeregisterAny, /* 0.9.4 */
     .domainOpenConsole = umlDomainOpenConsole, /* 0.8.6 */
+    .isAlive = umlIsAlive, /* 0.9.7 */
 };
 
 static int
index 3338c05fff706e1116773fc627167828fece0d59..58c8af6709da612b6bc8b26ff6f0c7537f91a719 100644 (file)
@@ -1082,6 +1082,11 @@ static int vboxIsEncrypted(virConnectPtr conn ATTRIBUTE_UNUSED) {
     return 0;
 }
 
+static int vboxIsAlive(virConnectPtr conn ATTRIBUTE_UNUSED)
+{
+    return 1;
+}
+
 static int vboxGetMaxVcpus(virConnectPtr conn, const char *type ATTRIBUTE_UNUSED) {
     VBOX_OBJECT_CHECK(conn, int, -1);
     PRUint32 maxCPUCount = 0;
@@ -9194,6 +9199,7 @@ virDriver NAME(Driver) = {
     .domainSnapshotCurrent = vboxDomainSnapshotCurrent, /* 0.8.0 */
     .domainRevertToSnapshot = vboxDomainRevertToSnapshot, /* 0.8.0 */
     .domainSnapshotDelete = vboxDomainSnapshotDelete, /* 0.8.0 */
+    .isAlive = vboxIsAlive, /* 0.9.7 */
 };
 
 virNetworkDriver NAME(NetworkDriver) = {
index b2cfdcefac03dd9c8e1d3eb638c1b0702739c4a5..987a7a83a872b3db03f97e1fc6e7024b67e4ebb1 100644 (file)
@@ -958,6 +958,12 @@ vmwareDomainGetState(virDomainPtr dom,
     return ret;
 }
 
+static int
+vmwareIsAlive(virConnectPtr conn ATTRIBUTE_UNUSED)
+{
+    return 1;
+}
+
 static virDriver vmwareDriver = {
     .no = VIR_DRV_VMWARE,
     .name = "VMWARE",
@@ -990,6 +996,7 @@ static virDriver vmwareDriver = {
     .domainUndefineFlags = vmwareDomainUndefineFlags, /* 0.9.4 */
     .domainIsActive = vmwareDomainIsActive, /* 0.8.7 */
     .domainIsPersistent = vmwareDomainIsPersistent, /* 0.8.7 */
+    .isAlive = vmwareIsAlive, /* 0.9.7 */
 };
 
 int
index beb2ba31af8830f5c5148341d2717e305c2f6275..6b54a6570c812f670c2ac215f1fc88444e326004 100644 (file)
@@ -506,6 +506,13 @@ xenUnifiedIsSecure(virConnectPtr conn)
     return ret;
 }
 
+static int
+xenUnifiedIsAlive(virConnectPtr conn ATTRIBUTE_UNUSED)
+{
+    /* XenD reconnects for each request */
+    return 1;
+}
+
 int
 xenUnifiedGetMaxVcpus (virConnectPtr conn, const char *type)
 {
@@ -2249,6 +2256,7 @@ static virDriver xenUnifiedDriver = {
     .domainEventRegisterAny = xenUnifiedDomainEventRegisterAny, /* 0.8.0 */
     .domainEventDeregisterAny = xenUnifiedDomainEventDeregisterAny, /* 0.8.0 */
     .domainOpenConsole = xenUnifiedDomainOpenConsole, /* 0.8.6 */
+    .isAlive = xenUnifiedIsAlive, /* 0.9.7 */
 };
 
 /**
index a835b2dae2fdaeb20b396364081f74b2888122c2..8017894ea04352b2043fd49dbf06c86fa2ff32bb 100644 (file)
@@ -1895,6 +1895,17 @@ xenapiNodeGetCellsFreeMemory (virConnectPtr conn, unsigned long long *freeMems,
     }
 }
 
+static int
+xenapiIsAlive(virConnectPtr conn)
+{
+    struct _xenapiPrivate *priv = conn->privateData;
+
+    if (priv->session && priv->session->ok)
+        return 1;
+    else
+        return 0;
+}
+
 /* The interface which we export upwards to libvirt.c. */
 static virDriver xenapiDriver = {
     .no = VIR_DRV_XENAPI,
@@ -1945,6 +1956,7 @@ static virDriver xenapiDriver = {
     .nodeGetCellsFreeMemory = xenapiNodeGetCellsFreeMemory, /* 0.8.0 */
     .nodeGetFreeMemory = xenapiNodeGetFreeMemory, /* 0.8.0 */
     .domainIsUpdated = xenapiDomainIsUpdated, /* 0.8.6 */
+    .isAlive = xenapiIsAlive, /* 0.9.7 */
 };
 
 /**