Eduardo has uploaded a new change for review.
Change subject: Make getRepoStats() a hsm method.
......................................................................
Make getRepoStats() a hsm method.
Making repoStats pool independent.
Change-Id: I0273611a23f29b5c6be0354a4c6b2d6526a9b574
Signed-off-by: Eduardo <ewarszaw(a)redhat.com>
---
M vdsm/storage/hsm.py
M vdsm/storage/sp.py
2 files changed, 101 insertions(+), 99 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/73/14673/1
diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py
index 9a44795..d3e1beb 100644
--- a/vdsm/storage/hsm.py
+++ b/vdsm/storage/hsm.py
@@ -2473,7 +2473,15 @@
vars.task.setDefaultException(
se.StoragePoolActionError("spUUID=%s" % spUUID))
vars.task.getSharedLock(STORAGE, spUUID)
- return self.getPool(spUUID).getInfo()
+ pool = self.getPool(spUUID)
+ poolInfo = pool.getInfo()
+ doms = pool.getDomains()
+ domInfo = self._getDomsStats(pool.monitorDomains, doms)
+ for sdUUID in doms.iterkeys():
+ if domInfo[sdUUID]['isoprefix']:
+ poolInfo['isoprefix'] = domInfo[sdUUID]['isoprefix']
+
+ return dict(info=poolInfo, dominfo=domInfo)
@public
def createStorageDomain(self, storageType, sdUUID, domainName,
@@ -3466,6 +3474,92 @@
pool._upgradePool(targetDomVersion)
return {"upgradeStatus": "started"}
+ def _getDomsStats(self, domainMonitor, doms):
+ domInfo = {}
+ repoStats = self._getRepoStats(domainMonitor)
+
+ for sdUUID, sdStatus in doms:
+ # Return statistics for active domains only
+ domInfo[sdUUID] = {'status': sdStatus, 'alerts': []}
+
+ if sdStatus != sd.DOM_ACTIVE_STATUS or sdUUID not in repoStats:
+ continue
+
+ domInfo[sdUUID]['version'] =
repoStats[sdUUID]['result']['version']
+
+ # For unreachable domains repoStats will return disktotal and
+ # diskfree as None.
+ if (repoStats[sdUUID]['disktotal'] is not None
+ and repoStats[sdUUID]['diskfree'] is not None):
+ domInfo[sdUUID]['disktotal'] =
repoStats[sdUUID]['disktotal']
+ domInfo[sdUUID]['diskfree'] =
repoStats[sdUUID]['diskfree']
+
+ 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'])
+ return domInfo
+
+ def _getRepoStats(self, domainMonitor):
+ repoStats = {}
+ statsGenTime = time.time()
+
+ for sdUUID in domainMonitor.monitoredDomains:
+ domStatus = domainMonitor.getStatus(sdUUID)
+
+ if domStatus.error is None:
+ code = 0
+ elif isinstance(domStatus.error, se.StorageException):
+ code = domStatus.error.code
+ else:
+ code = se.StorageException.code
+
+ disktotal, diskfree = domStatus.diskUtilization
+ vgmdtotal, vgmdfree = domStatus.vgMdUtilization
+ lastcheck = '%.1f' % (statsGenTime - domStatus.lastCheck)
+
+ repoStats[sdUUID] = {
+ 'finish': domStatus.lastCheck,
+
+ 'result': {
+ 'code': code,
+ 'lastCheck': lastcheck,
+ 'delay': str(domStatus.readDelay),
+ 'valid': (domStatus.error is None),
+ 'version': domStatus.version,
+ },
+
+ 'disktotal': disktotal,
+ 'diskfree': diskfree,
+
+ 'mdavalid': domStatus.vgMdHasEnoughFreeSpace,
+ 'mdathreshold': domStatus.vgMdFreeBelowThreashold,
+ 'mdasize': vgmdtotal,
+ 'mdafree': vgmdfree,
+
+ 'masterValidate': {
+ 'mount': domStatus.masterMounted,
+ 'valid': domStatus.masterValid
+ },
+
+ 'isoprefix': domStatus.isoPrefix,
+ }
+
+ return repoStats
+
@public
def repoStats(self, options=None):
"""
@@ -3478,7 +3572,7 @@
result = {}
for p in self.pools.values():
- repo_stats = p.getRepoStats()
+ repo_stats = self._getRepoStats(p.domainMonitor)
for d in repo_stats:
result[d] = repo_stats[d]['result']
diff --git a/vdsm/storage/sp.py b/vdsm/storage/sp.py
index 19d1b0a..12b50e2 100644
--- a/vdsm/storage/sp.py
+++ b/vdsm/storage/sp.py
@@ -19,7 +19,6 @@
#
import os
-import time
from glob import iglob, glob
import logging
import threading
@@ -1413,66 +1412,16 @@
return self.getMetaParam(PMDK_SPM_ID)
@unsecured
- def getRepoStats(self):
- #FIXME : this should actually be built in HSM
- repoStats = {}
- statsGenTime = time.time()
-
- for sdUUID in self.domainMonitor.monitoredDomains:
- domStatus = self.domainMonitor.getStatus(sdUUID)
-
- if domStatus.error is None:
- code = 0
- elif isinstance(domStatus.error, se.StorageException):
- code = domStatus.error.code
- else:
- code = se.StorageException.code
-
- disktotal, diskfree = domStatus.diskUtilization
- vgmdtotal, vgmdfree = domStatus.vgMdUtilization
- lastcheck = '%.1f' % (statsGenTime - domStatus.lastCheck)
-
- repoStats[sdUUID] = {
- 'finish': domStatus.lastCheck,
-
- 'result': {
- 'code': code,
- 'lastCheck': lastcheck,
- 'delay': str(domStatus.readDelay),
- 'valid': (domStatus.error is None),
- 'version': domStatus.version,
- },
-
- 'disktotal': disktotal,
- 'diskfree': diskfree,
-
- 'mdavalid': domStatus.vgMdHasEnoughFreeSpace,
- 'mdathreshold': domStatus.vgMdFreeBelowThreashold,
- 'mdasize': vgmdtotal,
- 'mdafree': vgmdfree,
-
- 'masterValidate': {
- 'mount': domStatus.masterMounted,
- 'valid': domStatus.masterValid
- },
-
- 'isoprefix': domStatus.isoPrefix,
- }
-
- return repoStats
-
- @unsecured
def getInfo(self):
"""
Get storage pool info.
"""
- msdUUID = self.masterDomain.sdUUID
-
try:
msdInfo = self.masterDomain.getInfo()
except Exception:
self.log.error("Couldn't read from master domain",
exc_info=True)
- raise se.StoragePoolMasterNotFound(self.spUUID, msdUUID)
+ raise se.StoragePoolMasterNotFound(self.spUUID,
+ self.masterDomain.sdUUID)
try:
pmd = self._getPoolMD(self.masterDomain)
@@ -1484,57 +1433,16 @@
'type': msdInfo['type'],
'name': pmd[PMDK_POOL_DESCRIPTION],
'domains': domainListEncoder(pmd[PMDK_DOMAINS].iteritems()),
- 'master_uuid': msdUUID,
+ 'master_uuid': self.masterDomain.sdUUID,
'master_ver': pmd[PMDK_MASTER_VER],
'lver': pmd[PMDK_LVER],
'spm_id': pmd[PMDK_SPM_ID],
'pool_status': 'uninitialized',
'version': str(msdInfo['version']),
'isoprefix': '',
+ 'pool_status': 'connected',
}
-
- domInfo = {}
- repoStats = self.getRepoStats()
-
- for sdUUID, sdStatus in pmd[PMDK_DOMAINS].iteritems():
- # Return statistics for active domains only
- domInfo[sdUUID] = {'status': sdStatus, 'alerts': []}
-
- if sdStatus != sd.DOM_ACTIVE_STATUS or sdUUID not in repoStats:
- continue
-
- if repoStats[sdUUID]['isoprefix']:
- poolInfo['isoprefix'] = repoStats[sdUUID]['isoprefix']
-
- domInfo[sdUUID]['version'] =
repoStats[sdUUID]['result']['version']
-
- # For unreachable domains repoStats will return disktotal and
- # diskfree as None.
- if (repoStats[sdUUID]['disktotal'] is not None
- and repoStats[sdUUID]['diskfree'] is not None):
- domInfo[sdUUID]['disktotal'] =
repoStats[sdUUID]['disktotal']
- domInfo[sdUUID]['diskfree'] =
repoStats[sdUUID]['diskfree']
-
- 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)
+ return poolInfo
@unsecured
def getIsoDomain(self):
--
To view, visit
http://gerrit.ovirt.org/14673
To unsubscribe, visit
http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I0273611a23f29b5c6be0354a4c6b2d6526a9b574
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Eduardo <ewarszaw(a)redhat.com>