Nir Soffer has uploaded a new change for review.

Change subject: fencing: Make getHostLeaseStatus API public
......................................................................

fencing: Make getHostLeaseStatus API public

Getting host lease status will allow engine to make smarter decisions
when a host is non-responsive by using a proxy host to get the
non-responsive host status.

See http://pastebin.com/KqqeAdSu for example output from this API.

Change-Id: I415c1fee6256bf8d4e03ee542cc58e193162e9b8
Signed-off-by: Nir Soffer <[email protected]>
---
M client/vdsClient.py
M vdsm/API.py
M vdsm/rpc/BindingXMLRPC.py
M vdsm/rpc/Bridge.py
M vdsm/rpc/vdsmapi-schema.json
5 files changed, 62 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/49/31149/1

diff --git a/client/vdsClient.py b/client/vdsClient.py
index 2c09b28..aea1503 100644
--- a/client/vdsClient.py
+++ b/client/vdsClient.py
@@ -1760,6 +1760,18 @@
         status = self.s.stopMonitoringDomain(sdUUID)
         return status['status']['code'], status['status']['message']
 
+    def getHostLeaseStatus(self, args):
+        domains = {}
+        for pair in args:
+            sdUUID, hostId = pair.split('=', 1)
+            domains[sdUUID] = int(hostId)
+        response = self.s.getHostLeaseStatus(domains)
+        if response['status']['code']:
+            print "Cannot get host storage liveliness"
+            return response['status']['code'], response['status']['message']
+        pp.pprint(response['domains'])
+        return 0, ''
+
     def snapshot(self, args):
         vmUUID, sdUUID, imgUUID, baseVolUUID, volUUID = args
 
@@ -2579,6 +2591,11 @@
                                  ('<sdUUID>',
                                   'Stop monitoring SD: sdUUID'
                                   )),
+        'getHostLeaseStatus': (serv.getHostLeaseStatus,
+                               ('<sdUUID>=<hostId> [<sdUUID>=<hostId>] ...',
+                                'Returns host lease status for hostId on '
+                                'each domain.'
+                                )),
         'snapshot': (serv.snapshot,
                      ('<vmId> <sdUUID> <imgUUID> <baseVolUUID> <volUUID>',
                       'Take a live snapshot'
diff --git a/vdsm/API.py b/vdsm/API.py
index f328a0b..95317f1 100644
--- a/vdsm/API.py
+++ b/vdsm/API.py
@@ -1495,6 +1495,9 @@
     def stopMonitoringDomain(self, sdUUID):
         return self._irs.stopMonitoringDomain(sdUUID)
 
+    def getHostLeaseStatus(self, domains):
+        return self._irs.getHostLeaseStatus(domains)
+
     def getLVMVolumeGroups(self, storageType=None):
         return self._irs.getVGList(storageType)
 
diff --git a/vdsm/rpc/BindingXMLRPC.py b/vdsm/rpc/BindingXMLRPC.py
index 30fc73c..cde4f44 100644
--- a/vdsm/rpc/BindingXMLRPC.py
+++ b/vdsm/rpc/BindingXMLRPC.py
@@ -937,6 +937,10 @@
         api = API.Global()
         return api.stopMonitoringDomain(sdUUID)
 
+    def getHostLeaseStatus(self, domains, options=None):
+        api = API.Global()
+        return api.getHostLeaseStatus(domains)
+
     def vgsGetList(self, storageType=None, options=None):
         api = API.Global()
         return api.getLVMVolumeGroups(storageType)
@@ -1090,6 +1094,7 @@
                 (self.storageRepoGetStats, 'repoStats'),
                 (self.startMonitoringDomain, 'startMonitoringDomain'),
                 (self.stopMonitoringDomain, 'stopMonitoringDomain'),
+                (self.getHostLeaseStatus, 'getHostLeaseStatus'),
                 (self.vgsGetList, 'getVGList'),
                 (self.devicesGetList, 'getDeviceList'),
                 (self.devicesGetVisibility, 'getDevicesVisibility'),
diff --git a/vdsm/rpc/Bridge.py b/vdsm/rpc/Bridge.py
index 4c5204d..2ef0921 100644
--- a/vdsm/rpc/Bridge.py
+++ b/vdsm/rpc/Bridge.py
@@ -387,6 +387,7 @@
     'Host_getStorageRepoStats': {'ret': Host_getStorageRepoStats_Ret},
     'Host_startMonitoringDomain': {},
     'Host_stopMonitoringDomain': {},
+    'Host_getHostLeaseStatus': {'ret': 'domains'},
     'Host_getVMList': {'call': Host_getVMList_Call, 'ret': Host_getVMList_Ret},
     'Host_getVMFullList': {'call': Host_getVMFullList_Call, 'ret': 'vmList'},
     'Host_getAllVmStats': {'ret': 'statsList'},
diff --git a/vdsm/rpc/vdsmapi-schema.json b/vdsm/rpc/vdsmapi-schema.json
index c301912..97fea55 100644
--- a/vdsm/rpc/vdsmapi-schema.json
+++ b/vdsm/rpc/vdsmapi-schema.json
@@ -2052,6 +2052,42 @@
  'returns': ''}
 
 ##
+# @HostIdMap:
+#
+# A mapping of hostId indexed by domain UUID.
+#
+# Since: 4.15.0
+##
+{'map': 'HostIdMap',
+ 'key': 'UUID', 'value': 'int'}
+
+##
+# @HostLeaseStatusMap:
+#
+# A mapping of status codes indexed by domain UUID.
+#
+# Since: 4.15.0
+##
+{'map': 'HostLeaseStatusMap',
+ 'key': 'UUID', 'value': 'str'}
+
+##
+# @Host.getHostLeaseStatus:
+#
+# Returns host status for for specified domains
+#
+# @domains:       A mapping of hostId indexed by domain UUID
+#
+# Returns:
+# Host status code for each domain
+#
+# Since: 4.15.0
+##
+{'command': {'class': 'Host', 'name': 'getHostLeaseStatus'},
+ 'data': {'domains': 'HostIdMap'}
+ 'returns': {'domains': 'HostLeaseStatusMap'}}
+
+##
 # @VmStatus:
 #
 # An enumeration of possible virtual machine statuses.


-- 
To view, visit http://gerrit.ovirt.org/31149
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I415c1fee6256bf8d4e03ee542cc58e193162e9b8
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: ovirt-3.5
Gerrit-Owner: Nir Soffer <[email protected]>
_______________________________________________
vdsm-patches mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches

Reply via email to