Federico Simoncelli has uploaded a new change for review.

Change subject: pool: refactor getInfo and getRepoStats
......................................................................

pool: refactor getInfo and getRepoStats

Change-Id: Ib151b9d19ea488ebbe4c0921a797ddda08141e49
Signed-off-by: Federico Simoncelli <[email protected]>
---
M vdsm/storage/sp.py
1 file changed, 89 insertions(+), 80 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/04/10304/1

diff --git a/vdsm/storage/sp.py b/vdsm/storage/sp.py
index 40d15b3..4c9d253 100644
--- a/vdsm/storage/sp.py
+++ b/vdsm/storage/sp.py
@@ -1345,57 +1345,56 @@
     @unsecured
     def getRepoStats(self):
         #FIXME : this should actually be  built in HSM
-        res = {}
-        now = time.time()
+        repoStats = {}
+        statsGenTime = time.time()
+
         for sdUUID in self.domainMonitor.monitoredDomains:
-            st = self.domainMonitor.getStatus(sdUUID)
-            if st.error is None:
+            domStatus = self.domainMonitor.getStatus(sdUUID)
+
+            if domStatus.error is None:
                 code = 0
-            elif isinstance(st.error, se.StorageException):
-                code = st.error.code
+            elif isinstance(domStatus.error, se.StorageException):
+                code = domStatus.error.code
             else:
                 code = se.StorageException.code
-            disktotal, diskfree = st.diskUtilization
-            vgmdtotal, vgmdfree = st.vgMdUtilization
-            res[sdUUID] = {
-                    'finish': st.lastCheck,
-                    'result': {
-                        'code': code,
-                        'lastCheck': '%.1f' % (now - st.lastCheck),
-                        'delay': str(st.readDelay),
-                        'valid': (st.error is None)
-                    },
-                    'disktotal': disktotal,
-                    'diskfree': diskfree,
 
-                    'mdavalid': st.vgMdHasEnoughFreeSpace,
-                    'mdathreshold': st.vgMdFreeBelowThreashold,
-                    'mdasize': vgmdtotal,
-                    'mdafree': vgmdfree,
+            disktotal, diskfree = domStatus.diskUtilization
+            vgmdtotal, vgmdfree = domStatus.vgMdUtilization
+            lastcheck = '%.1f' % (statsGenTime - domStatus.lastCheck)
 
-                    'masterValidate': {
-                        'mount': st.masterMounted,
-                        'valid': st.masterValid
-                    }
+            repoStats[sdUUID] = {
+                'finish': domStatus.lastCheck,
+
+                'result': {
+                    'code': code,
+                    'lastCheck': lastcheck,
+                    'delay': str(domStatus.readDelay),
+                    'valid': (domStatus.error is None)
+                },
+
+                'disktotal': disktotal,
+                'diskfree': diskfree,
+
+                'mdavalid': domStatus.vgMdHasEnoughFreeSpace,
+                'mdathreshold': domStatus.vgMdFreeBelowThreashold,
+                'mdasize': vgmdtotal,
+                'mdafree': vgmdfree,
+
+                'masterValidate': {
+                    'mount': domStatus.masterMounted,
+                    'valid': domStatus.masterValid
+                },
             }
-        return res
+
+        return repoStats
 
     @unsecured
     def getInfo(self):
         """
         Get storage pool info.
         """
-        ##self.log.info("Get info of the storage pool %s",
-        ##    self.spUUID)
-        if not self.spUUID:
-            raise se.StoragePoolInternalError
-
-        info = {'type': '', 'name': '', 'domains': '', 'master_uuid': '',
-                'master_ver': 0, 'lver': LVER_INVALID, 'spm_id': SPM_ID_FREE,
-                'isoprefix': '', 'pool_status': 'uninitialized', 'version': -1}
-        list_and_stats = {}
-
         msdUUID = self.masterDomain.sdUUID
+
         try:
             msdInfo = self.masterDomain.getInfo()
         except Exception:
@@ -1403,60 +1402,70 @@
             raise se.StoragePoolMasterNotFound(self.spUUID, msdUUID)
 
         try:
-            info['type'] = msdInfo['type']
-            info['domains'] = domainListEncoder(self.getDomains())
-            info['name'] = self.getDescription()
-            info['spm_id'] = self.getSpmId()
-            info['lver'] = self.getMetaParam(PMDK_LVER)
-            info['master_uuid'] = msdInfo['uuid']
-            info['master_ver'] = self.getMasterVersion()
-            info['version'] = str(self.getVersion())
+            poolInfo = {
+                'type': msdInfo['type'],
+                'name': self.getDescription(),
+                'domains': domainListEncoder(self.getDomains()),
+                'master_uuid': msdUUID,
+                'master_ver': self.getMasterVersion(),
+                'lver': self.getMetaParam(PMDK_LVER),
+                'spm_id': self.getSpmId(),
+                'pool_status': 'uninitialized',
+                'version': str(self.getVersion()),
+                'isoprefix': '',
+            }
         except Exception:
             self.log.error("Pool metadata error", exc_info=True)
             raise se.StoragePoolActionError(self.spUUID)
 
-        # Get info of all pool's domains
-        domDict = self.getDomains()
+        domInfo = {}
         repoStats = self.getRepoStats()
-        for item in domDict:
+
+        for sdUUID, sdStatus in self.getDomains().iteritems():
             # Return statistics for active domains only
-            stats = {}
-            alerts = []
-            if domDict[item] == sd.DOM_ACTIVE_STATUS:
-                try:
-                    dom = sdCache.produce(item)
-                    if dom.isISO():
-                        info['isoprefix'] = os.path.join(self.poolPath, item,
-                                              sd.DOMAIN_IMAGES, 
sd.ISO_IMAGE_UUID)
-                except:
-                    self.log.warn("Could not get full domain information, it 
is probably unavailable", exc_info=True)
+            domInfo[sdUUID] = {'status': sdStatus, 'alerts': []}
 
-                if item in repoStats:
-                    # For unreachable domains repoStats will return 
disktotal/diskfree as None.
-                    # We should drop these parameters in this case
-                    if repoStats[item]['disktotal'] != None and 
repoStats[item]['diskfree'] != None:
-                        stats['disktotal'] = repoStats[item]['disktotal']
-                        stats['diskfree'] = repoStats[item]['diskfree']
-                    if not repoStats[item]['mdavalid']:
-                        alerts.append({'code': se.SmallVgMetadata.code,
-                                       'message': se.SmallVgMetadata.message})
-                        self.log.warning("VG %s's metadata size too small %s",
-                                          dom.sdUUID, 
repoStats[item]['mdasize'])
+            if sdStatus != sd.DOM_ACTIVE_STATUS:
+                continue
 
-                    if not repoStats[item]['mdathreshold']:
-                        alerts.append({'code': 
se.VgMetadataCriticallyFull.code,
-                                       'message': 
se.VgMetadataCriticallyFull.message})
-                        self.log.warning("VG %s's metadata size exceeded 
critical size: \
-                                         mdasize=%s mdafree=%s", dom.sdUUID,
-                                         repoStats[item]['mdasize'], 
repoStats[item]['mdafree'])
+            try:
+                dom = sdCache.produce(sdUUID)
+                if dom.isISO():
+                    poolInfo['isoprefix'] = dom.getIsoDomainImagesDir()
+            except:
+                self.log.warn("Could not get full domain information, "
+                              "it is probably unavailable", exc_info=True)
 
-                    stats['alerts'] = alerts
+            if sdUUID not in repoStats:
+                continue
 
-            stats['status'] = domDict[item]
-            list_and_stats[item] = stats
+            # For unreachable domains repoStats will return disktotal and
+            # diskfree as None.
+            if (repoStats[sdUUID]['disktotal'] != None
+                    and repoStats[sdUUID]['diskfree'] != None):
+                domInfo[sdUUID]['disktotal'] = repoStats[sdUUID]['disktotal']
+                domInfo[sdUUID]['diskfree'] = repoStats[sdUUID]['diskfree']
 
-        info["pool_status"] = "connected"
-        return dict(info=info, dominfo=list_and_stats)
+            if not repoStats[sdUUID]['mdavalid']:
+                domInfo[sdUUID]['alerts'].append({
+                    'code': se.SmallVgMetadata.code,
+                    'message': se.SmallVgMetadata.message,
+                })
+                self.log.warning("VG %s's metadata size too small %s",
+                                 sdUUID, repoStats[sdUUID]['mdasize'])
+
+            if not repoStats[sdUUID]['mdathreshold']:
+                domInfo[sdUUID]['alerts'].append({
+                    'code': se.VgMetadataCriticallyFull.code,
+                    'message': se.VgMetadataCriticallyFull.message,
+                })
+                self.log.warning("VG %s's metadata size exceeded critical "
+                    "size: mdasize=%s mdafree=%s", sdUUID,
+                    repoStats[sdUUID]['mdasize'],
+                    repoStats[sdUUID]['mdafree'])
+
+        poolInfo["pool_status"] = "connected"
+        return dict(info=poolInfo, dominfo=domInfo)
 
     @unsecured
     def getIsoDomain(self):


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib151b9d19ea488ebbe4c0921a797ddda08141e49
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Federico Simoncelli <[email protected]>
_______________________________________________
vdsm-patches mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches

Reply via email to