[NEW PATCH] BZ#720257 - Resouce manage volume activation properly (via gerrit-bot)
Saggi Mizrahi
smizrahi at redhat.com
Tue Jul 26 15:17:33 UTC 2011
New patch submitted by Saggi Mizrahi (smizrahi at redhat.com)
You can review this change at: http://gerrit.usersys.redhat.com/724
commit ceda43f2717b5e7a6ea237bdc6b159fed77900a9
Author: Saggi Mizrahi <smizrahi at redhat.com>
Date: Mon Jul 18 16:23:28 2011 +0300
BZ#720257 - Resouce manage volume activation properly
- Instead of using autorelese = False, hsm will save a record of all
prepare operations so whenever you teardown a volume you know that the
operation is accounted for.
- Ignore errors in domain production after release.
Change-Id: Iaf3311790a7927e3bf3d5e7a4820462d213bcdb6
diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py
index ef472af..558e162 100644
--- a/vdsm/storage/hsm.py
+++ b/vdsm/storage/hsm.py
@@ -18,6 +18,7 @@ from fnmatch import fnmatch
from copy import deepcopy
from config import config
from itertools import imap
+from collections import defaultdict
import sp
import sd
@@ -139,6 +140,8 @@ class HSM:
self._cachedStats = {}
self._statslock = threading.Lock()
+ self._preparedVolumes = defaultdict(list)
+
if not iscsi.isConfigured():
iscsi.setupiSCSI()
@@ -1662,8 +1665,9 @@ class HSM:
vars.task.getSharedLock(STORAGE, sdUUID)
imageResourcesNamespace = sd.getNamespace(sdUUID, IMAGE_NAMESPACE)
- imgResource = rmanager.acquireResource(imageResourcesNamespace, imgUUID, rm.LockType.exclusive)
- imgResource.autoRelease = False
+ lockType = rm.LockType.exclusive if rw else rm.LockType.shared
+
+ imgResource = rmanager.acquireResource(imageResourcesNamespace, imgUUID, lockType)
try:
vol = SDF.produce(sdUUID=sdUUID).produceVolume(imgUUID=imgUUID, volUUID=volUUID)
# NB We want to be sure that at this point HSM does not use stale LVM
@@ -1671,9 +1675,11 @@ class HSM:
# this refresh later, when we come up with something better.
vol.refreshVolume()
vol.prepare(rw=rw)
+
+ self._preparedVolumes[sdUUID + volUUID].append(imgResource)
except:
self.log.error("Prepare volume %s in domain %s failed", volUUID, sdUUID, exc_info=True)
- rmanager.releaseResource(imageResourcesNamespace, imgUUID)
+ imgResource.release()
raise
@@ -1690,18 +1696,22 @@ class HSM:
:type imgUUID: UUID
:param volUUID: The UUID of the volume you want to teardown.
:type volUUID: UUID
- :param rw: Should the voulme be set as RW. ?
- :type rw: bool
+ :param rw: deprecated
:param options: ?
"""
- self.validatePoolSD(spUUID, sdUUID)
-
vars.task.getSharedLock(STORAGE, sdUUID)
- volclass = SDF.produce(sdUUID).getVolumeClass()
- volclass.teardown(sdUUID=sdUUID, volUUID=volUUID)
- imageResourcesNamespace = sd.getNamespace(sdUUID, IMAGE_NAMESPACE)
- rmanager.releaseResource(imageResourcesNamespace, imgUUID)
+ try:
+ imgResource = self._preparedVolumes[sdUUID + volUUID].pop()
+ except IndexError:
+ raise se.VolumeWasNotPreparedBeforeTeardown()
+ imgResource.release()
+
+ try:
+ volclass = SDF.produce(sdUUID).getVolumeClass()
+ volclass.teardown(sdUUID=sdUUID, volUUID=volUUID)
+ except Exception:
+ self.log.warn("Problem tearing down volume", exc_info=True)
def public_getVolumesList(self, sdUUID, spUUID, imgUUID=volume.BLANK_UUID, options = None):
"""
diff --git a/vdsm/storage/resourceFactories.py b/vdsm/storage/resourceFactories.py
index ce3ec70..0948084 100644
--- a/vdsm/storage/resourceFactories.py
+++ b/vdsm/storage/resourceFactories.py
@@ -36,7 +36,9 @@ class LvmActivation(object):
def __init__(self, vg, lv, lockType):
self._vg = vg
self._lv = lv
+
lvm.activateLVs(self._vg, self._lv)
+ self.switchLockType(lockType)
def close(self):
try:
diff --git a/vdsm/storage/storage_exception.py b/vdsm/storage/storage_exception.py
index c9df109..1496bbc 100644
--- a/vdsm/storage/storage_exception.py
+++ b/vdsm/storage/storage_exception.py
@@ -245,6 +245,10 @@ class createVolumeSizeError(StorageException):
code = 229
message = "Requested size is too small. Must be larger or equal to 1"
+class VolumeWasNotPreparedBeforeTeardown(StorageException):
+ code = 230
+ message = "Volume was not prepared before being torn down"
+
#################################################
# Images Exceptions
#################################################
More information about the vdsm-patches
mailing list