[NEW PATCH] BZ#725241 Don't rotate a log file before it reaches a certain size (via gerrit-bot)
by Yotam Oron
New patch submitted by Yotam Oron (yoron(a)redhat.com)
You can review this change at: http://gerrit.usersys.redhat.com/743
commit 268c190df397881b59cad1170224c50e4333eddd
Author: Yotam Oron <yoron(a)redhat.com>
Date: Mon Jul 25 15:36:26 2011 +0300
BZ#725241 Don't rotate a log file before it reaches a certain size
No need to rotate log files if they are too small, so set the minimum rotation size.
Change-Id: I57a6f611146e4fc5b00109b52c071478e350db78
diff --git a/vdsm/vdsm-logrotate.conf b/vdsm/vdsm-logrotate.conf
index 12e16ad..4f02521 100644
--- a/vdsm/vdsm-logrotate.conf
+++ b/vdsm/vdsm-logrotate.conf
@@ -3,6 +3,7 @@
missingok
copytruncate
size 15M
+ minsize 15M
compress
compresscmd /usr/bin/xz
uncompresscmd /usr/bin/unxz
12 years, 8 months
[NEW PATCH] Add getDevUuid() to device mapper (via gerrit-bot)
by smizrahi@redhat.com
New patch submitted by Saggi Mizrahi (smizrahi(a)redhat.com)
You can review this change at: http://gerrit.usersys.redhat.com/768
commit 3030224e2d30415d58939e7e49f8912495316120
Author: Saggi Mizrahi <smizrahi(a)redhat.com>
Date: Sun Jul 31 16:44:17 2011 +0300
Add getDevUuid() to device mapper
This method though unused is pretty useful and I wouldn't want people
misimplementing it. This is a small part in making the device mapper
volume complete and useful outside of vdsm.
Change-Id: I4fe339f8cb03e0b3cb2c05fabd358bcfd58ade3e
diff --git a/vdsm/storage/devicemapper.py b/vdsm/storage/devicemapper.py
index 78e44a0..bb6b7e0 100644
--- a/vdsm/storage/devicemapper.py
+++ b/vdsm/storage/devicemapper.py
@@ -60,6 +60,11 @@ def getDevName(dmId):
with open(nameFilePath, "r") as f:
return f.readline().rstrip("\n")
+def getDevUuid(dmId):
+ nameFilePath = os.path.join(getSysfsPath(dmId), "dm", "uuid")
+ with open(nameFilePath, "r") as f:
+ return f.readline().rstrip("\n")
+
def resolveDevName(devName):
try:
if os.path.exists(getSysfsPath(devName)):
12 years, 8 months
[NEW PATCH] Get dmId from device number instead of looking for it (via gerrit-bot)
by smizrahi@redhat.com
New patch submitted by Saggi Mizrahi (smizrahi(a)redhat.com)
You can review this change at: http://gerrit.usersys.redhat.com/757
commit 1bf869ed7ab05bfe53ae6155b88962070d8d8a72
Author: Saggi Mizrahi <smizrahi(a)redhat.com>
Date: Thu Jul 28 13:47:14 2011 +0300
Get dmId from device number instead of looking for it
Change-Id: I2fa0444e370eb65c7251e4b1afaecff93e0cf937
diff --git a/vdsm/storage/devicemapper.py b/vdsm/storage/devicemapper.py
index bf155bc..20b1a2b 100644
--- a/vdsm/storage/devicemapper.py
+++ b/vdsm/storage/devicemapper.py
@@ -18,13 +18,14 @@ def getDmId(deviceMultipathName):
# Link doesn't exists for some reason, might be a weird
# udev configuration. Falling back to slow but sure method
- for nameFile in glob("/sys/block/dm-*/dm/name"):
- try:
- with open(nameFile, "r") as f:
- if f.read().rstrip("\n") == deviceMultipathName:
- return nameFile.split("/")[3]
- except (IOError, OSError):
- pass
+ devStat = os.stat(devlinkPath)
+ dmId = "dm-%d" % os.minor(devStat.st_rdev)
+ try:
+ with open("/sys/block/%s/dm/name" % dmId, "r") as f:
+ if f.read() == deviceMultipathName:
+ return dmId
+ except (IOError, OSError):
+ pass
raise OSError(errno.ENOENT, "Could not find dm device named `%s`" % deviceMultipathName)
12 years, 8 months
[NEW PATCH] BZ#722649 - Invalidate domain cache before chacking it's metadata in removeStorageDomain() (via gerrit-bot)
by smizrahi@redhat.com
New patch submitted by Saggi Mizrahi (smizrahi(a)redhat.com)
You can review this change at: http://gerrit.usersys.redhat.com/728
commit 38deabc8bdd04f59e30e10d5f46c8d463411a24f
Author: Saggi Mizrahi <smizrahi(a)redhat.com>
Date: Wed Jul 20 14:40:18 2011 +0300
BZ#722649 - Invalidate domain cache before chacking it's metadata in removeStorageDomain()
Change-Id: Ib436aa6b871014f87d2cd9929e7122d807f29ade
diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py
index ef472af..fefc87d 100644
--- a/vdsm/storage/hsm.py
+++ b/vdsm/storage/hsm.py
@@ -1218,7 +1218,9 @@ class HSM:
if not misc.parseBool(autoDetach):
# Allow format also for broken domain
try:
- if len(SDF.produce(sdUUID=sdUUID).getPools()) > 0:
+ dom = SDF.produce(sdUUID=sdUUID)
+ dom.invalidateMetadata()
+ if len(dom.getPools()) > 0:
raise se.CannotFormatAttachedStorageDomain(sdUUID)
except (se.StorageDomainMetadataNotFound, se.MetaDataGeneralError, se.MiscFileReadException,
12 years, 8 months
[NEW PATCH] BZ#725802 spmprotect: kill vdsm process, do not restart service (via gerrit-bot)
by Dan Kenigsberg
New patch submitted by Dan Kenigsberg (danken(a)redhat.com)
You can review this change at: http://gerrit.usersys.redhat.com/755
commit d59dc68c5b7f848516919d1b79d53426893cfbbd
Author: Dan Kenigsberg <danken(a)redhat.com>
Date: Thu Jul 28 13:07:01 2011 +0300
BZ#725802 spmprotect: kill vdsm process, do not restart service
restarting vdsmd service succeeds to stop vdsm process, but later fails
to start a new one because of various resons. This patch kills the
service just as `vdsmd stop` does, and waits for 'respawn' to fire up a
new process. Respawning would succeed once restarting vdsmd is possible.
Change-Id: Ic41b6676bde0033be8f3808f75ca80261f5ccc30
diff --git a/vdsm/storage/protect/spmprotect.sh b/vdsm/storage/protect/spmprotect.sh
index d664581..41bc70d 100755
--- a/vdsm/storage/protect/spmprotect.sh
+++ b/vdsm/storage/protect/spmprotect.sh
@@ -9,8 +9,6 @@ LEASE_UTIL="./safelease"
KILL="/bin/kill"
PKILL="/usr/bin/pkill"
spUUID=$2
-RESTARTVDSCMD=${RESTARTVDSCMD:-"sudo /sbin/service vdsmd restart"}
-STARTVDSCMD=${STARTVDSCMD:-"sudo /sbin/service vdsmd start"}
CHECKVDSM=${CHECKVDSM:-"/usr/bin/pgrep vdsm"}
REBOOTCMD=${REBOOTCMD:-"sudo /sbin/reboot -f"}
RENEWDIR="/var/run/vdsm/spmprotect/$$"
@@ -58,7 +56,9 @@ function fence() {
disown
(sleep 7
log "Trying to stop vdsm for spUUID=$spUUID id=$ID lease_path=$LEASE_FILE"
- echodo $RESTARTVDSCMD
+ echodo $KILL "$VDSM_PID"
+ sleep 2
+ echodo $KILL -9 "$VDSM_PID"
)&
disown
12 years, 8 months
[NEW PATCH] task.py: use LoggerAdapter (via gerrit-bot)
by Dan Kenigsberg
New patch submitted by Dan Kenigsberg (danken(a)redhat.com)
You can review this change at: http://gerrit.usersys.redhat.com/708
commit a76d5dab2ece859ef608dfab54997ceac49937bd
Author: Dan Kenigsberg <danken(a)redhat.com>
Date: Thu Jul 14 14:52:33 2011 +0300
task.py: use LoggerAdapter
Calling _debug() instread of having an adapter hides the line number of
the caller function.
Change-Id: Ia7a6e1a7de796bbafb45597221e83c7419ce69c8
diff --git a/vdsm/storage/task.py b/vdsm/storage/task.py
index ab62376..d430eb6 100644
--- a/vdsm/storage/task.py
+++ b/vdsm/storage/task.py
@@ -1,5 +1,5 @@
#
-# Copyright 2009 Red Hat, Inc. and/or its affiliates.
+# Copyright 2009-2011 Red Hat, Inc. and/or its affiliates.
#
# Licensed to you under the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
@@ -45,6 +45,7 @@ from threadLocal import vars
from weakref import proxy
from config import config
import outOfProcess as oop
+from logUtils import SimpleLogAdapter
KEY_SEPERATOR = "="
TASK_EXT = ".task"
@@ -487,9 +488,7 @@ class Task:
self.nrecoveries = 0 # just utility count - used by save/load
self.njobs = 0 # just utility count - used by save/load
-
- def _debug(self, msg, *args):
- self.log.debug("Task %s: " % str(self) + msg, *args)
+ self.log = SimpleLogAdapter(self.log, {"Task": self.id})
def __del__(self):
@@ -544,7 +543,7 @@ class Task:
def __state_aborting(self, fromState):
if self.ref > 1:
return
- self._debug("_aborting: recover policy %s", self.recoveryPolicy)
+ self.log.debug("_aborting: recover policy %s", self.recoveryPolicy)
if self.recoveryPolicy == TaskRecoveryType.auto:
self._updateState(State.racquiring)
elif self.recoveryPolicy == TaskRecoveryType.none:
@@ -595,9 +594,9 @@ class Task:
state = State.raborting
self._aborting = False
if requestedState == state:
- self._debug("moving from state %s -> state %s", fromState, state)
+ self.log.debug("moving from state %s -> state %s", fromState, state)
else:
- self._debug("moving from state %s -> state %s instead of %s", fromState, state, requestedState)
+ self.log.debug("moving from state %s -> state %s instead of %s", fromState, state, requestedState)
self.state.moveto(state, force)
if self.persistPolicy == TaskPersistType.auto:
@@ -749,7 +748,7 @@ class Task:
if not oop.os.path.exists(origTaskDir):
raise se.TaskDirError("_save: no such task dir '%s'" % origTaskDir)
taskDir = os.path.join(storPath, self.id + TEMP_EXT)
- self._debug("_save: orig %s temp %s", origTaskDir, taskDir)
+ self.log.debug("_save: orig %s temp %s", origTaskDir, taskDir)
if oop.os.path.exists(taskDir):
oop.fileUtils.cleanupdir(taskDir)
oop.os.mkdir(taskDir)
@@ -785,7 +784,7 @@ class Task:
def _recoverDone(self):
# protect agains races with stop/abort
- self._debug("Recover Done: state %s", self.state)
+ self.log.debug("Recover Done: state %s", self.state)
while True:
try:
if self.state == State.recovering:
@@ -798,13 +797,13 @@ class Task:
def _recover(self):
- self._debug("_recover")
+ self.log.debug("_recover")
if not self.state == State.recovering:
raise se.TaskStateError("%s: _recover in state %s" % (str(self), self.state))
try:
while self.state == State.recovering:
rec = self.popRecovery()
- self._debug("running recovery %s", str(rec))
+ self.log.debug("running recovery %s", str(rec))
if not rec:
break
self._run(rec.run)
@@ -826,7 +825,7 @@ class Task:
try:
self.callbackLock.acquire()
try:
- self._debug("_resourcesAcquired: %s.%s (%s)", namespace, resource, locktype)
+ self.log.debug("_resourcesAcquired: %s.%s (%s)", namespace, resource, locktype)
if self.state == State.preparing:
return
if self.state == State.acquiring:
@@ -836,7 +835,7 @@ class Task:
elif self.state == State.blocked:
self._updateState(State.preparing)
elif self.state == State.aborting or self.state == State.raborting:
- self._debug("resource %s.%s acquired while in state %s", namespace, resource, self.state)
+ self.log.debug("resource %s.%s acquired while in state %s", namespace, resource, self.state)
else:
raise se.TaskStateError("acquire is not allowed in state %s" % self.state)
finally:
@@ -851,7 +850,7 @@ class Task:
self.callbackLock.acquire()
try:
# Callback from resourceManager.Owner. May be called by another thread.
- self._debug("_resourcesAcquired: %s.%s (%s)", namespace, resource, locktype)
+ self.log.debug("_resourcesAcquired: %s.%s (%s)", namespace, resource, locktype)
# Protect against races with stop/abort
if self.state == State.preparing:
self._updateState(State.blocked)
@@ -881,7 +880,7 @@ class Task:
except:
self._setError()
- self._debug("Task._run: %s %s %s failed - stopping task", str(self), str(args), str(kargs))
+ self.log.debug("Task._run: %s %s %s failed - stopping task", str(self), str(args), str(kargs))
self.stop()
raise se.TaskAborted(message, code)
@@ -922,7 +921,7 @@ class Task:
def _doAbort(self, force=False):
- self._debug("Task._doAbort: force %s" % force)
+ self.log.debug("Task._doAbort: force %s" % force)
self.lock.acquire()
# Am I really the last?
if self.ref != 0:
@@ -987,7 +986,7 @@ class Task:
ref = self.ref
self.lock.release()
- self._debug("ref %d aborting %s", ref, self.aborting())
+ self.log.debug("ref %d aborting %s", ref, self.aborting())
if ref == 0 and self.aborting():
self._doAbort(force)
return ref
@@ -1179,17 +1178,17 @@ class Task:
message = e.value
if self.aborting():
- self._debug("Prepare: aborted: %s", str(message))
+ self.log.debug("Prepare: aborted: %s", str(message))
self._updateResult(code, "Task prepare failed: %s" % (message), "")
raise self.error
if self.jobs:
- self._debug("Prepare: %s jobs exist, move to acquiring", self.njobs)
+ self.log.debug("Prepare: %s jobs exist, move to acquiring", self.njobs)
self._updateState(State.acquiring)
self.log.debug("returning")
return dict(uuid=str(self.id))
- self._debug("finished: %s", result)
+ self.log.debug("finished: %s", result)
self._updateResult(0, "OK", result)
self._updateState(State.finished)
return result
@@ -1216,11 +1215,11 @@ class Task:
def stop(self, force=False):
- self._debug("stopping in state %s (force %s)", self.state, force)
+ self.log.debug("stopping in state %s (force %s)", self.state, force)
self._incref(force)
try:
if self.state.isDone():
- self._debug("Task allready stopped (%s), ignoring", self.state)
+ self.log.debug("Task allready stopped (%s), ignoring", self.state)
return
self._aborting = True
self._forceAbort = force
@@ -1232,7 +1231,7 @@ class Task:
''' Do not call this function while the task is actually running. this
method should only be used to recover tasks state after (vdsmd) restart.
'''
- self._debug('(recover): recovering: state %s', self.state)
+ self.log.debug('(recover): recovering: state %s', self.state)
vars.task = self
try:
self._incref(force=True)
@@ -1241,7 +1240,7 @@ class Task:
return
try:
if self.isDone():
- self._debug('(recover): task is done: state %s', self.state)
+ self.log.debug('(recover): task is done: state %s', self.state)
return
# if we are not during recover, just abort
if self.state.canAbort():
@@ -1257,7 +1256,7 @@ class Task:
self.stop(force=True)
finally:
self._decref(force=True)
- self._debug('(recover): recovered: state %s', self.state)
+ self.log.debug('(recover): recovered: state %s', self.state)
def getState(self):
12 years, 8 months
[NEW PATCH] formatStorageDomain removes the VG too. (via gerrit-bot)
by ewarszaw@redhat.com
New patch submitted by Eduardo Warszawski (ewarszaw(a)redhat.com)
You can review this change at: http://gerrit.usersys.redhat.com/659
commit dbe4caf20df8893f3e53440900241489aeb581f6
Author: Eduardo Warszawski <ewarszaw(a)redhat.com>
Date: Tue Jul 5 15:32:53 2011 +0300
formatStorageDomain removes the VG too.
Change-Id: Ie993abd2a812f1ecec127cc637794994591e48ea
diff --git a/vdsm/storage/blockSD.py b/vdsm/storage/blockSD.py
index 0c00dd3..3e08aff 100644
--- a/vdsm/storage/blockSD.py
+++ b/vdsm/storage/blockSD.py
@@ -679,8 +679,7 @@ class BlockStorageDomain(sd.StorageDomain):
except se.CannotRemoveLogicalVolume, e:
cls.log.warning("Remove logical volume failed %s/%s %s", sdUUID, lv.name, str(e))
- # Remove SD tag
- lvm.replaceVGTag(sdUUID, STORAGE_DOMAIN_TAG, STORAGE_UNREADY_DOMAIN_TAG)
+ lvm.removeVG(sdUUID)
return True
def getInfo(self):
diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py
index ef472af..78cbe98 100644
--- a/vdsm/storage/hsm.py
+++ b/vdsm/storage/hsm.py
@@ -831,17 +831,20 @@ class HSM:
def public_removeVG(self, vgUUID, options = None):
"""
+ DEPRECATED: formatSD effectively removes the VG.
+
Removes a volume group.
:param vgUUID: The UUID of the VG you want removed.
:type vgUUID: UUID
:param options: ?
-
- :raises: :exc:`storage_exception.VolumeGroupDoesNotExist` if no VG with this UUID exists.
"""
vars.task.setDefaultException(se.VolumeGroupActionError("%s" % str(vgUUID)))
#getSharedLock(connectionsResource...)
- lvm.removeVGbyUUID(vgUUID)
+ try:
+ lvm.removeVGbyUUID(vgUUID)
+ except se.VolumeGroupDoesNotExist:
+ pass
def public_getTaskStatus(self, taskID, spUUID=None, options = None):
12 years, 9 months
[NEW PATCH] Related to BZ#701671 - Return ENODEV if device does not exist. (via gerrit-bot)
by ewarszaw@redhat.com
New patch submitted by Eduardo Warszawski (ewarszaw(a)redhat.com)
You can review this change at: http://gerrit.usersys.redhat.com/760
commit 8e1ce57293b79f0a570e0afc106c4e6e4d252329
Author: Eduardo Warszawski <ewarszaw(a)redhat.com>
Date: Thu Jul 28 16:22:30 2011 +0300
Related to BZ#701671 - Return ENODEV if device does not exist.
Change-Id: Ibcf14a4d6f3492697d6ba2b9c37de2722de4c6b0
diff --git a/vdsm/storage/devicemapper.py b/vdsm/storage/devicemapper.py
index bf155bc..bb74355 100644
--- a/vdsm/storage/devicemapper.py
+++ b/vdsm/storage/devicemapper.py
@@ -70,7 +70,7 @@ def resolveDevName(devName):
try:
return getDmId(devName)
except Exception:
- raise OSError(errno.ENOENT, "No such block device `%s`" % devName)
+ raise OSError(errno.ENODEV, "No such block device `%s`" % devName)
def isVirtualDevice(devName):
devName = resolveDevName(devName)
diff --git a/vdsm/storage/lvm.py b/vdsm/storage/lvm.py
index 55e790e..43d73ee 100644
--- a/vdsm/storage/lvm.py
+++ b/vdsm/storage/lvm.py
@@ -13,6 +13,7 @@ Generic LVM interface wrapper
Incapsulates the actual LVM mechanics.
"""
+import errno
import os
import pwd
@@ -703,7 +704,13 @@ def _initpv(device, withmetadata=False):
if isPvPartOfVg(device):
raise se.PhysDevInitializationError(device)
- devicemapper.removeMappingsHoldingDevice(os.path.basename(device))
+ try:
+ devicemapper.removeMappingsHoldingDevice(os.path.basename(device))
+ except OSError, e:
+ if e.errno == errno.ENODEV:
+ raise se.PhysDevInitializationError("%s: %s" % (device, str(e)))
+ else:
+ raise
rc, out, err = _lvminfo.cmd(cmd)
if rc != 0:
raise se.PhysDevInitializationError(device)
12 years, 9 months
[NEW PATCH] Related to BZ#704131 - Reduce the number of lvm ops during image mgmt. (via gerrit-bot)
by ewarszaw@redhat.com
New patch submitted by Eduardo Warszawski (ewarszaw(a)redhat.com)
You can review this change at: http://gerrit.usersys.redhat.com/764
commit 5e42dbbeb6d1a5b040d9e4fd7254f66ae98569ea
Author: Eduardo Warszawski <ewarszaw(a)redhat.com>
Date: Thu Jul 28 11:26:42 2011 +0300
Related to BZ#704131 - Reduce the number of lvm ops during image mgmt.
Change-Id: I90d7d1277eac207dd59376c95810b8325a52031e
diff --git a/vdsm/storage/blockVolume.py b/vdsm/storage/blockVolume.py
index 6b04047..1b4988f 100644
--- a/vdsm/storage/blockVolume.py
+++ b/vdsm/storage/blockVolume.py
@@ -427,23 +427,23 @@ class BlockVolume(volume.Volume):
Find the image(s) UUID by one of its volume UUID.
Templated and shared disks volumes may result more then one image.
"""
- vollist = lvm.lvsByTag(self.sdUUID, "%s%s" % (TAG_PREFIX_PARENT, self.volUUID))
- vollist.append(self.volUUID)
- imglist = []
- for vol in vollist:
- for tag in lvm.getLV(self.sdUUID, vol).tags:
+ volumes = lvm.lvsByTag(self.sdUUID, "%s%s" % (TAG_PREFIX_PARENT, self.volUUID))
+ volumes.append(lvm.getLV(self.volUUID))
+ images = []
+ for vol in volumes:
+ for tag in vol.tags:
if tag.startswith(TAG_PREFIX_IMAGE):
img = tag[3:]
if image.REMOVED_IMAGE_PREFIX not in img:
- imglist.append(img)
+ images.append(img)
# Check image legallity, if needed
if legal:
- for img in imglist[:]:
+ for img in images[:]:
if not image.Image(self.repoPath).isLegal(self.sdUUID, img):
- imglist.remove(img)
+ images.remove(img)
- return imglist
+ return images
def getVolumeTag(self, tagPrefix):
return _getVolumeTag(self.sdUUID, self.volUUID, tagPrefix)
@@ -499,7 +499,8 @@ class BlockVolume(volume.Volume):
"""
Fetch the list of the Volumes UUIDs, not including the shared base (template)
"""
- return lvm.lvsByTag(sdUUID, "%s%s" % (TAG_PREFIX_IMAGE, imgUUID))
+ lvs = lvm.lvsByTag(sdUUID, "%s%s" % (TAG_PREFIX_IMAGE, imgUUID))
+ return [lv.name for lv in lvs]
@classmethod
def getAllChildrenList(cls, repoPath, sdUUID, imgUUID, pvolUUID):
@@ -508,11 +509,11 @@ class BlockVolume(volume.Volume):
"""
chList = []
- vollist = lvm.lvsByTag(sdUUID, "%s%s" % (TAG_PREFIX_PARENT, pvolUUID))
- for v in vollist:
- for t in lvm.getLV(sdUUID, v).tags:
- if t.startswith(TAG_PREFIX_IMAGE):
- chList.append({'imgUUID':t[3:], 'volUUID':v})
+ volumes = lvm.lvsByTag(sdUUID, "%s%s" % (TAG_PREFIX_PARENT, pvolUUID))
+ for vol in volumes:
+ for tag in vol.tags:
+ if tag.startswith(TAG_PREFIX_IMAGE):
+ chList.append({'imgUUID':tag[3:], 'volUUID':vol.name})
return chList
diff --git a/vdsm/storage/lvm.py b/vdsm/storage/lvm.py
index 049f373..6f0a036 100644
--- a/vdsm/storage/lvm.py
+++ b/vdsm/storage/lvm.py
@@ -1166,8 +1166,8 @@ def setrwLV(vgName, lvNames, rw=True):
raise se.CannotSetRWLogicalVolume(vgName, " ".join(failed), permission)
-def lvsByTag(vg, tag):
- return [lv.name for lv in getLV(vg) if tag in lv.tags]
+def lvsByTag(vgName, tag):
+ return [lv for lv in getLV(vgName) if tag in lv.tags]
#Fix me: unify with addTag
12 years, 9 months
[NEW PATCH] Related to BZ#704131 - Simplify getDomains. (via gerrit-bot)
by ewarszaw@redhat.com
New patch submitted by Eduardo Warszawski (ewarszaw(a)redhat.com)
You can review this change at: http://gerrit.usersys.redhat.com/762
commit 90ae63fe3b896607efd9b1e44e7795c1870dbb95
Author: Eduardo Warszawski <ewarszaw(a)redhat.com>
Date: Mon Jul 25 16:15:38 2011 +0300
Related to BZ#704131 - Simplify getDomains.
Change-Id: I332524d5e2a060ed11cb2d2b78235701080cb6fe
diff --git a/vdsm/storage/sp.py b/vdsm/storage/sp.py
index 24722d6..4de022e 100644
--- a/vdsm/storage/sp.py
+++ b/vdsm/storage/sp.py
@@ -1181,14 +1181,8 @@ class StoragePool:
self.log.error("Unexpected error while trying to monitor domain `%s`", sdUUID, exc_info=True)
def getDomains(self, activeOnly=False):
- doms = self.getMetaParam(PMDK_DOMAINS)
- if activeOnly:
- for sdUUID in doms.keys():
- status = doms[sdUUID]
- if status != sd.DOM_ACTIVE_STATUS:
- del doms[sdUUID]
-
- return doms
+ isActive = lambda v: True if not activeOnly else v == sd.DOM_ACTIVE_STATUS
+ return dict((k, v) for k, v in self.getMetaParam(PMDK_DOMAINS).iteritems() if isActive(v))
def checkBackupDomain(self):
domDict = self.getDomains(activeOnly=True)
12 years, 9 months