Change in vdsm[master]: sp: turn spm status attributes private
fsimonce at redhat.com
fsimonce at redhat.com
Thu Nov 21 23:59:23 UTC 2013
Federico Simoncelli has uploaded a new change for review.
Change subject: sp: turn spm status attributes private
......................................................................
sp: turn spm status attributes private
Change-Id: I3b71349e2a0dfc453b68cd2d9ca6c563b1bee90c
Signed-off-by: Federico Simoncelli <fsimonce at redhat.com>
---
M vdsm/storage/hsm.py
M vdsm/storage/sp.py
2 files changed, 41 insertions(+), 36 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/27/21527/1
diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py
index 301fbea..a4b2796 100644
--- a/vdsm/storage/hsm.py
+++ b/vdsm/storage/hsm.py
@@ -305,14 +305,12 @@
except se.StorageDomainDoesNotExist:
pass
- def validateSPM(self, spUUID):
- pool = self.getPool(spUUID)
- if pool.spmRole != sp.SPM_ACQUIRED:
+ def validateSPM(self, pool):
+ if pool.isSpmRoleAcquired():
raise se.SpmStatusError(spUUID)
- def validateNotSPM(self, spUUID):
- pool = self.getPool(spUUID)
- if pool.spmRole != sp.SPM_FREE:
+ def validateNotSPM(self, pool):
+ if pool.isSpmRoleFree():
raise se.IsSpm(spUUID)
@classmethod
@@ -580,15 +578,15 @@
# This code is repeated twice for performance reasons
# Avoid waiting for the lock for validate.
- self.getPool(spUUID)
- self.validateNotSPM(spUUID)
+ pool = self.getPool(spUUID)
+ self.validateNotSPM(pool)
vars.task.getExclusiveLock(STORAGE, spUUID)
pool = self.getPool(spUUID)
# We should actually just return true if we are SPM after lock,
# but seeing as it would break the API with Engine,
# it's easiest to fail.
- self.validateNotSPM(spUUID)
+ self.validateNotSPM(pool)
vars.task.setTag("hsm")
vars.task.setManager(self.taskMng)
@@ -616,12 +614,16 @@
pool = self.getPool(spUUID)
pool.stopSpm()
+ @staticmethod
+ def _getSpmStatusInfo(pool):
+ return dict(
+ zip(('spmStatus', 'spmLver', 'spmId'), pool.getSpmStatus()))
+
@public
def getSpmStatus(self, spUUID, options=None):
pool = self.getPool(spUUID)
try:
- status = {'spmStatus': pool.spmRole, 'spmLver': pool.getSpmLver(),
- 'spmId': pool.getSpmId()}
+ status = self._getSpmStatusInfo(pool)
except (se.LogicalVolumeRefreshError, IOError):
# This happens when we cannot read the MD LV
self.log.error("Can't read LV based metadata", exc_info=True)
@@ -831,8 +833,8 @@
pool.hsmMailer.sendExtendMsg(volDict, newSize, callbackFunc)
def _spmSchedule(self, spUUID, name, func, *args):
- self.validateSPM(spUUID)
pool = self.getPool(spUUID)
+ self.validateSPM(pool)
self.taskMng.scheduleJob("spm", pool.tasksDir, vars.task,
name, func, *args)
@@ -865,18 +867,18 @@
vars.task.getSharedLock(STORAGE, spUUID)
+ pool = self.getPool(spUUID)
+
try:
# The refreshStoragePool command is an HSM command and
# should not be issued (and executed) on the SPM. At the
# moment we just ignore it for legacy reasons but in the
# future vdsm could raise an exception.
- self.validateNotSPM(spUUID)
+ self.validateNotSPM(pool)
except se.IsSpm:
self.log.info("Ignoring the refreshStoragePool request "
"(the host is the SPM)")
return
-
- pool = self.getPool(spUUID)
try:
self.validateSdUUID(msdUUID)
@@ -1086,7 +1088,7 @@
spUUID, self.pools)
return
- self.validateNotSPM(spUUID)
+ self.validateNotSPM(pool)
vars.task.getExclusiveLock(STORAGE, spUUID)
pool = self.getPool(spUUID)
@@ -1094,7 +1096,7 @@
return self._disconnectPool(pool, hostID, scsiKey, remove)
def _disconnectPool(self, pool, hostID, scsiKey, remove):
- self.validateNotSPM(pool.spUUID)
+ self.validateNotSPM(pool)
with rmanager.acquireResource(STORAGE, HSM_DOM_MON_LOCK,
rm.LockType.exclusive):
res = pool.disconnect()
@@ -3568,9 +3570,7 @@
pool.invalidateMetadata()
vars.task.getExclusiveLock(STORAGE, spUUID)
pool.forceFreeSpm()
- st = {'spmStatus': pool.spmRole, 'spmLver': pool.getSpmLver(),
- 'spmId': pool.getSpmId()}
- return dict(spm_st=st)
+ return dict(spm_st=self._getSpmStatusInfo(pool))
@public
def upgradeStoragePool(self, spUUID, targetDomVersion):
diff --git a/vdsm/storage/sp.py b/vdsm/storage/sp.py
index d925879..9785882 100644
--- a/vdsm/storage/sp.py
+++ b/vdsm/storage/sp.py
@@ -128,18 +128,24 @@
self.hsmMailer = None
self.spmMailer = None
self.masterDomain = None
- self.spmRole = SPM_FREE
+ self._spmRole = SPM_FREE
self.domainMonitor = domainMonitor
self._upgradeCallback = partial(StoragePool._upgradePoolDomain,
proxy(self))
@unsecured
- def getSpmLver(self):
+ def _getSpmLver(self):
return self.getMetaParam(PMDK_LVER)
@unsecured
def getSpmStatus(self):
- return self.spmRole, self.getSpmLver(), self.getSpmId()
+ return self._spmRole, self._getSpmLver(), self._getSpmId()
+
+ def isSpmRoleAcquired(self):
+ return self._spmRole == SPM_ACQUIRED
+
+ def isSpmRoleFree(self):
+ return self._spmRole == SPM_FREE
def __del__(self):
if len(self.domainMonitor.poolMonitoredDomains) > 0:
@@ -151,7 +157,7 @@
# TODO: SCSI Fence the 'lastOwner'
self.setMetaParams({PMDK_SPM_ID: SPM_ID_FREE, PMDK_LVER: LVER_INVALID},
__securityOverride=True)
- self.spmRole = SPM_FREE
+ self._spmRole = SPM_FREE
def _upgradePoolDomain(self, sdUUID, isValid):
# This method is called everytime the onDomainStateChange
@@ -237,16 +243,15 @@
that it fails silently does not matter very much).
"""
with self.lock:
- if self.spmRole == SPM_ACQUIRED:
+ if self._spmRole == SPM_ACQUIRED:
return True
# Since we added the lock the following should NEVER happen
- if self.spmRole == SPM_CONTEND:
+ if self._spmRole == SPM_CONTEND:
raise se.OperationInProgress("spm start %s" % self.spUUID)
self.updateMonitoringThreads()
self.invalidateMetadata()
- oldlver = self.getSpmLver()
- oldid = self.getSpmId()
+ _, oldlver, oldid = self.getSpmStatus()
masterDomVersion = self.getVersion()
# If no specific domain version was specified use current master
# domain version
@@ -263,14 +268,14 @@
"previd:%s lver:%s" %
(oldid, oldlver, prevID, prevLVER))
- self.spmRole = SPM_CONTEND
+ self._spmRole = SPM_CONTEND
try:
# Forcing to acquire the host id (if it's not acquired already)
self.masterDomain.acquireHostId(self.id)
self.masterDomain.acquireClusterLock(self.id)
except:
- self.spmRole = SPM_FREE
+ self._spmRole = SPM_FREE
raise
self.log.debug("spm lock acquired successfully")
@@ -301,7 +306,7 @@
self.taskMng.loadDumpedTasks(self.tasksDir)
- self.spmRole = SPM_ACQUIRED
+ self._spmRole = SPM_ACQUIRED
# Once setSafe completes we are running as SPM
self._setSafe()
@@ -392,7 +397,7 @@
def stopSpm(self, force=False):
with self.lock:
- if not force and self.spmRole == SPM_FREE:
+ if not force and self._spmRole == SPM_FREE:
return True
self._shutDownUpgrade()
@@ -429,7 +434,7 @@
if stopFailed:
utils.panic("Unrecoverable errors during SPM stop process.")
- self.spmRole = SPM_FREE
+ self._spmRole = SPM_FREE
def _upgradePool(self, targetDomVersion):
with rmanager.acquireResource(STORAGE, "upgrade_" + self.spUUID,
@@ -1429,9 +1434,9 @@
return self.masterDomain.getVersion()
@unsecured
- def getSpmId(self):
+ def _getSpmId(self):
spmid = self.getMetaParam(PMDK_SPM_ID)
- if spmid != self.id or self.spmRole != SPM_FREE:
+ if spmid != self.id or self._spmRole != SPM_FREE:
return spmid
# If we claim to be the SPM we have to be really sure we are
@@ -1542,7 +1547,7 @@
@unsecured
def invalidateMetadata(self):
- if not self.spmRole == SPM_ACQUIRED:
+ if not self._spmRole == SPM_ACQUIRED:
self._metadata.invalidate()
@unsecured
--
To view, visit http://gerrit.ovirt.org/21527
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I3b71349e2a0dfc453b68cd2d9ca6c563b1bee90c
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Federico Simoncelli <fsimonce at redhat.com>
More information about the vdsm-patches
mailing list