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