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 <[email protected]> --- 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 <[email protected]> _______________________________________________ vdsm-patches mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches
