Change in vdsm[master]: rsourceFactories: Use new resourceManager module api
by Nir Soffer
Nir Soffer has uploaded a new change for review.
Change subject: rsourceFactories: Use new resourceManager module api
......................................................................
rsourceFactories: Use new resourceManager module api
Replace usage of getInstance with direct module access.
Change-Id: Icdb30f34257f31622a87d1f496b3f516803eeda8
Signed-off-by: Nir Soffer <nsoffer(a)redhat.com>
---
M vdsm/storage/resourceFactories.py
1 file changed, 3 insertions(+), 5 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/36/65036/1
diff --git a/vdsm/storage/resourceFactories.py b/vdsm/storage/resourceFactories.py
index bf8e498..4126db8 100644
--- a/vdsm/storage/resourceFactories.py
+++ b/vdsm/storage/resourceFactories.py
@@ -31,8 +31,6 @@
import sd
import image
-rmanager = rm.ResourceManager.getInstance()
-
log = logging.getLogger('storage.ResourcesFactories')
@@ -152,12 +150,12 @@
try:
if template:
if len(volUUIDChain) > 0:
- volRes = rmanager.acquireResource(
+ volRes = rm.acquireResource(
self.volumeResourcesNamespace,
template, rm.SHARED,
timeout=self.resource_default_timeout)
else:
- volRes = rmanager.acquireResource(
+ volRes = rm.acquireResource(
self.volumeResourcesNamespace,
template, lockType,
timeout=self.resource_default_timeout)
@@ -165,7 +163,7 @@
# Acquire 'lockType' volume locks
for volUUID in volUUIDChain:
- volRes = rmanager.acquireResource(
+ volRes = rm.acquireResource(
self.volumeResourcesNamespace,
volUUID, lockType,
timeout=self.resource_default_timeout)
--
To view, visit https://gerrit.ovirt.org/65036
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Icdb30f34257f31622a87d1f496b3f516803eeda8
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Nir Soffer <nsoffer(a)redhat.com>
7 years, 7 months
Change in vdsm[master]: resourcemanager: Use new module api
by Nir Soffer
Nir Soffer has uploaded a new change for review.
Change subject: resourcemanager: Use new module api
......................................................................
resourcemanager: Use new module api
Replace client code to use the resourceManager module directly instead
of using ResourceManager.getInstance().
After this patch only the resourceManager and resourceFactories are
using the old getInstance api.
Tests that used to mock modules "rmanager" variable are mocking the "rm"
variable, and storagefakelib.FakeResourceManager implements now the
resourceManager module api instead of the
resourceManager.ResourceManager class. This seems to be the quickest
solution for keeping these tests working, but we may use differnet way
later.
Change-Id: Ib33d9fad90551a0c2e9b1e8a89c5f9f920681c6b
Signed-off-by: Nir Soffer <nsoffer(a)redhat.com>
---
M tests/storage_sdm_copy_data_test.py
M tests/storage_sdm_create_volume_test.py
M tests/storagefakelib.py
M vdsm/storage/blockSD.py
M vdsm/storage/blockVolume.py
M vdsm/storage/hsm.py
M vdsm/storage/image.py
M vdsm/storage/sd.py
M vdsm/storage/sdm/api/create_volume.py
M vdsm/storage/sp.py
M vdsm/storage/volume.py
11 files changed, 73 insertions(+), 91 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/35/65035/1
diff --git a/tests/storage_sdm_copy_data_test.py b/tests/storage_sdm_copy_data_test.py
index db4d99e..d60936a 100644
--- a/tests/storage_sdm_copy_data_test.py
+++ b/tests/storage_sdm_copy_data_test.py
@@ -82,7 +82,7 @@
with MonkeyPatchScope([
(guarded, 'context', fake_guarded_context()),
(storage.sdm.api.copy_data, 'sdCache', env.sdcache),
- (blockVolume, 'rmanager', rm),
+ (blockVolume, 'rm', rm),
]):
src_vols = make_qemu_chain(env, size, src_fmt, chain_length)
dst_vols = make_qemu_chain(env, size, dst_fmt, chain_length)
diff --git a/tests/storage_sdm_create_volume_test.py b/tests/storage_sdm_create_volume_test.py
index 9c9295f..0fb7e4b 100644
--- a/tests/storage_sdm_create_volume_test.py
+++ b/tests/storage_sdm_create_volume_test.py
@@ -103,7 +103,7 @@
@contextmanager
def _fake_env(self):
self.rm = FakeResourceManager()
- with MonkeyPatchScope([(storage.sdm.api.create_volume, 'rmanager',
+ with MonkeyPatchScope([(storage.sdm.api.create_volume, 'rm',
self.rm)]):
yield
diff --git a/tests/storagefakelib.py b/tests/storagefakelib.py
index 7ea0cee..3fff119 100644
--- a/tests/storagefakelib.py
+++ b/tests/storagefakelib.py
@@ -30,6 +30,7 @@
from vdsm import utils
from storage import lvm as real_lvm
+from storage import resourceManager as rm
class FakeLVM(object):
@@ -278,6 +279,9 @@
class FakeResourceManager(object):
+ SHARED = rm.SHARED
+ EXCLUSIVE = rm.EXCLUSIVE
+
@recorded
@contextmanager
def acquireResource(self, *args, **kwargs):
diff --git a/vdsm/storage/blockSD.py b/vdsm/storage/blockSD.py
index 0f094fd..f39d41a 100644
--- a/vdsm/storage/blockSD.py
+++ b/vdsm/storage/blockSD.py
@@ -862,15 +862,13 @@
"""
sd.StorageDomain._registerResourceNamespaces(self)
- rmanager = rm.ResourceManager.getInstance()
# Register lvm activation resource namespace for the underlying VG
lvmActivationFactory = resourceFactories.LvmActivationFactory(
self.sdUUID)
lvmActivationNamespace = sd.getNamespace(sc.LVM_ACTIVATION_NAMESPACE,
self.sdUUID)
try:
- rmanager.registerNamespace(lvmActivationNamespace,
- lvmActivationFactory)
+ rm.registerNamespace(lvmActivationNamespace, lvmActivationFactory)
except KeyError:
self.log.info("Resource namespace %s already registered",
lvmActivationNamespace)
diff --git a/vdsm/storage/blockVolume.py b/vdsm/storage/blockVolume.py
index 6d68d26..c6d128a 100644
--- a/vdsm/storage/blockVolume.py
+++ b/vdsm/storage/blockVolume.py
@@ -60,7 +60,6 @@
RESERVED_LEASES = 100
log = logging.getLogger('storage.Volume')
-rmanager = rm.ResourceManager.getInstance()
class BlockVolumeManifest(volume.VolumeManifest):
@@ -372,8 +371,8 @@
if setrw:
self.setrw(rw=rw)
access = rm.EXCLUSIVE if rw else rm.SHARED
- activation = rmanager.acquireResource(self.lvmActivationNamespace,
- self.volUUID, access)
+ activation = rm.acquireResource(self.lvmActivationNamespace,
+ self.volUUID, access)
activation.autoRelease = False
@classmethod
@@ -387,7 +386,7 @@
% (sdUUID, volUUID, justme))
lvmActivationNamespace = sd.getNamespace(sc.LVM_ACTIVATION_NAMESPACE,
sdUUID)
- rmanager.releaseResource(lvmActivationNamespace, volUUID)
+ rm.releaseResource(lvmActivationNamespace, volUUID)
if not justme:
try:
pvolUUID = getVolumeTag(sdUUID, volUUID, sc.TAG_PREFIX_PARENT)
diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py
index 106eb27..e1d6d1e 100644
--- a/vdsm/storage/hsm.py
+++ b/vdsm/storage/hsm.py
@@ -94,9 +94,6 @@
logUtils.logcall, "dispatcher", "Run and protect: %s",
resPattern="Run and protect: %(name)s, Return response: %(result)s")
-rmanager = rm.ResourceManager.getInstance()
-
-
STORAGE_CONNECTION_DIR = os.path.join(constants.P_VDSM_LIB, "connections/")
QEMU_READABLE_TIMEOUT = 30
@@ -337,8 +334,7 @@
:type defExcFun: function
"""
self._ready = False
- rm.ResourceManager.getInstance().registerNamespace(
- STORAGE, rm.SimpleResourceFactory())
+ rm.registerNamespace(STORAGE, rm.SimpleResourceFactory())
self.storage_repository = config.get('irs', 'repository')
self.taskMng = taskManager.TaskManager()
@@ -976,7 +972,7 @@
"spUUID=%s, msdUUID=%s, masterVersion=%s, hostID=%s, "
"domainsMap=%s" %
(spUUID, msdUUID, masterVersion, hostID, domainsMap)))
- with rmanager.acquireResource(STORAGE, HSM_DOM_MON_LOCK, rm.EXCLUSIVE):
+ with rm.acquireResource(STORAGE, HSM_DOM_MON_LOCK, rm.EXCLUSIVE):
return self._connectStoragePool(
spUUID, hostID, msdUUID, masterVersion, domainsMap)
@@ -1014,7 +1010,7 @@
except se.StoragePoolUnknown:
pass # pool not connected yet
else:
- with rmanager.acquireResource(STORAGE, spUUID, rm.SHARED):
+ with rm.acquireResource(STORAGE, spUUID, rm.SHARED):
# FIXME: this breaks in case of a race as it assumes that the
# pool is still available. At the moment we maintain this
# behavior as it's inherited from the previous implementation
@@ -1024,7 +1020,7 @@
masterVersion, domainsMap)
return True
- with rmanager.acquireResource(STORAGE, spUUID, rm.EXCLUSIVE):
+ with rm.acquireResource(STORAGE, spUUID, rm.EXCLUSIVE):
try:
pool = self.getPool(spUUID)
except se.StoragePoolUnknown:
@@ -1090,7 +1086,7 @@
def _disconnectPool(self, pool, hostID, remove):
pool.validateNotSPM()
- with rmanager.acquireResource(STORAGE, HSM_DOM_MON_LOCK, rm.EXCLUSIVE):
+ with rm.acquireResource(STORAGE, HSM_DOM_MON_LOCK, rm.EXCLUSIVE):
res = pool.disconnect()
del self.pools[pool.spUUID]
return res
@@ -1814,8 +1810,7 @@
repoPath = os.path.join(self.storage_repository, sdDom.getPools()[0])
imageResourcesNamespace = sd.getNamespace(sc.IMAGE_NAMESPACE, sdUUID)
- with rmanager.acquireResource(imageResourcesNamespace, imgUUID,
- rm.SHARED):
+ with rm.acquireResource(imageResourcesNamespace, imgUUID, rm.SHARED):
image.Image(repoPath).syncVolumeChain(sdUUID, imgUUID, volUUID,
newChain)
@@ -3235,7 +3230,7 @@
for sdUUID in activeDoms:
dom = sdCache.produce(sdUUID=sdUUID)
if dom.isData():
- with rmanager.acquireResource(STORAGE, sdUUID, rm.SHARED):
+ with rm.acquireResource(STORAGE, sdUUID, rm.SHARED):
try:
imgs = dom.getAllImages()
except se.StorageDomainDoesNotExist:
@@ -3464,7 +3459,7 @@
@deprecated
@public
def startMonitoringDomain(self, sdUUID, hostID, options=None):
- with rmanager.acquireResource(STORAGE, HSM_DOM_MON_LOCK, rm.EXCLUSIVE):
+ with rm.acquireResource(STORAGE, HSM_DOM_MON_LOCK, rm.EXCLUSIVE):
# Note: We cannot raise here StorageDomainIsMemberOfPool, as it
# will break old hosted engine agent.
self.domainMonitor.startMonitoring(sdUUID, int(hostID), False)
@@ -3472,7 +3467,7 @@
@deprecated
@public
def stopMonitoringDomain(self, sdUUID, options=None):
- with rmanager.acquireResource(STORAGE, HSM_DOM_MON_LOCK, rm.EXCLUSIVE):
+ with rm.acquireResource(STORAGE, HSM_DOM_MON_LOCK, rm.EXCLUSIVE):
if sdUUID in self.domainMonitor.poolDomains:
raise se.StorageDomainIsMemberOfPool(sdUUID)
self.domainMonitor.stopMonitoring([sdUUID])
diff --git a/vdsm/storage/image.py b/vdsm/storage/image.py
index ccaf971..e98ca9b 100644
--- a/vdsm/storage/image.py
+++ b/vdsm/storage/image.py
@@ -43,7 +43,6 @@
import resourceManager as rm
log = logging.getLogger('storage.Image')
-rmanager = rm.ResourceManager.getInstance()
# Disk type
UNKNOWN_DISK_TYPE = 0
@@ -376,8 +375,7 @@
dstImageResourcesNamespace = sd.getNamespace(sc.IMAGE_NAMESPACE,
destDom.sdUUID)
# In destination domain we need to lock image's template if exists
- with rmanager.acquireResource(dstImageResourcesNamespace, pimg,
- rm.SHARED) \
+ with rm.acquireResource(dstImageResourcesNamespace, pimg, rm.SHARED) \
if pimg != sc.BLANK_UUID else justLogIt(imgUUID):
if fakeTemplate:
self.createFakeTemplate(destDom.sdUUID, volParams)
diff --git a/vdsm/storage/sd.py b/vdsm/storage/sd.py
index 25bf1a4..7fa02b7 100644
--- a/vdsm/storage/sd.py
+++ b/vdsm/storage/sd.py
@@ -641,14 +641,12 @@
Register resources namespaces and create
factories for it.
"""
- rmanager = rm.ResourceManager.getInstance()
# Register image resource namespace
imageResourceFactory = \
resourceFactories.ImageResourceFactory(self.sdUUID)
imageResourcesNamespace = getNamespace(sc.IMAGE_NAMESPACE, self.sdUUID)
try:
- rmanager.registerNamespace(imageResourcesNamespace,
- imageResourceFactory)
+ rm.registerNamespace(imageResourcesNamespace, imageResourceFactory)
except KeyError:
self.log.info("Resource namespace %s already registered",
imageResourcesNamespace)
@@ -656,8 +654,8 @@
volumeResourcesNamespace = getNamespace(sc.VOLUME_NAMESPACE,
self.sdUUID)
try:
- rmanager.registerNamespace(volumeResourcesNamespace,
- rm.SimpleResourceFactory())
+ rm.registerNamespace(volumeResourcesNamespace,
+ rm.SimpleResourceFactory())
except KeyError:
self.log.info("Resource namespace %s already registered",
volumeResourcesNamespace)
diff --git a/vdsm/storage/sdm/api/create_volume.py b/vdsm/storage/sdm/api/create_volume.py
index c400dc0..ea8d7de 100644
--- a/vdsm/storage/sdm/api/create_volume.py
+++ b/vdsm/storage/sdm/api/create_volume.py
@@ -29,8 +29,6 @@
from . import base
-rmanager = rm.ResourceManager.getInstance()
-
class Job(base.Job):
def __init__(self, job_id, host_id, sd_manifest, vol_info):
@@ -44,8 +42,8 @@
with self.sd_manifest.domain_lock(self.host_id):
image_res_ns = sd.getNamespace(sc.IMAGE_NAMESPACE,
self.sd_manifest.sdUUID)
- with rmanager.acquireResource(image_res_ns, self.vol_info.img_id,
- rm.EXCLUSIVE):
+ with rm.acquireResource(image_res_ns, self.vol_info.img_id,
+ rm.EXCLUSIVE):
artifacts = self.sd_manifest.get_volume_artifacts(
self.vol_info.img_id, self.vol_info.vol_id)
artifacts.create(
diff --git a/vdsm/storage/sp.py b/vdsm/storage/sp.py
index 0eda145..b56792a 100644
--- a/vdsm/storage/sp.py
+++ b/vdsm/storage/sp.py
@@ -52,8 +52,6 @@
POOL_MASTER_DOMAIN = 'mastersd'
-rmanager = rm.ResourceManager.getInstance()
-
SPM_ACQUIRED = 'SPM'
SPM_CONTEND = 'Contend'
SPM_FREE = 'Free'
@@ -140,14 +138,14 @@
return
domain = sdCache.produce(sdUUID)
- with rmanager.acquireResource(sc.STORAGE, self.spUUID, rm.SHARED):
+ with rm.acquireResource(sc.STORAGE, self.spUUID, rm.SHARED):
if sdUUID not in self.getDomains(activeOnly=True):
self.log.debug("Domain %s is not an active pool domain, "
"skipping domain links refresh",
sdUUID)
return
- with rmanager.acquireResource(sc.STORAGE, sdUUID + "_repo",
- rm.EXCLUSIVE):
+ with rm.acquireResource(sc.STORAGE, sdUUID + "_repo",
+ rm.EXCLUSIVE):
self.log.debug("Refreshing domain links for %s", sdUUID)
self._refreshDomainLinks(domain)
@@ -173,9 +171,9 @@
exc_info=True)
return
- with rmanager.acquireResource(sc.STORAGE, "upgrade_" + self.spUUID,
- rm.SHARED):
- with rmanager.acquireResource(sc.STORAGE, sdUUID, rm.EXCLUSIVE):
+ with rm.acquireResource(sc.STORAGE, "upgrade_" + self.spUUID,
+ rm.SHARED):
+ with rm.acquireResource(sc.STORAGE, sdUUID, rm.EXCLUSIVE):
if sdUUID not in self._domainsToUpgrade:
return
@@ -347,8 +345,8 @@
@unsecured
def _shutDownUpgrade(self):
self.log.debug("Shutting down upgrade process")
- with rmanager.acquireResource(sc.STORAGE, "upgrade_" + self.spUUID,
- rm.EXCLUSIVE):
+ with rm.acquireResource(sc.STORAGE, "upgrade_" + self.spUUID,
+ rm.EXCLUSIVE):
try:
self.domainMonitor.onDomainStateChange.unregister(
self._upgradeCallback)
@@ -418,14 +416,13 @@
def _upgradePool(self, targetDomVersion, lockTimeout=None):
try:
- with rmanager.acquireResource(sc.STORAGE, "upgrade_" + self.spUUID,
- rm.EXCLUSIVE, timeout=lockTimeout):
+ with rm.acquireResource(sc.STORAGE, "upgrade_" + self.spUUID,
+ rm.EXCLUSIVE, timeout=lockTimeout):
sd.validateDomainVersion(targetDomVersion)
self.log.info("Trying to upgrade master domain `%s`",
self.masterDomain.sdUUID)
- with rmanager.acquireResource(sc.STORAGE,
- self.masterDomain.sdUUID,
- rm.EXCLUSIVE):
+ with rm.acquireResource(sc.STORAGE, self.masterDomain.sdUUID,
+ rm.EXCLUSIVE):
self._convertDomain(self.masterDomain,
str(targetDomVersion))
@@ -1346,8 +1343,8 @@
def extendVolumeSize(self, sdUUID, imgUUID, volUUID, newSize):
imageResourcesNamespace = sd.getNamespace(sc.IMAGE_NAMESPACE, sdUUID)
- with rmanager.acquireResource(imageResourcesNamespace, imgUUID,
- rm.EXCLUSIVE):
+ with rm.acquireResource(imageResourcesNamespace, imgUUID,
+ rm.EXCLUSIVE):
return sdCache.produce(sdUUID) \
.produceVolume(imgUUID, volUUID).extendSize(int(newSize))
@@ -1535,10 +1532,10 @@
else:
dstImageResourcesNamespace = srcImageResourcesNamespace
- with nested(rmanager.acquireResource(srcImageResourcesNamespace,
- srcImgUUID, rm.SHARED),
- rmanager.acquireResource(dstImageResourcesNamespace,
- dstImgUUID, rm.EXCLUSIVE)
+ with nested(rm.acquireResource(srcImageResourcesNamespace,
+ srcImgUUID, rm.SHARED),
+ rm.acquireResource(dstImageResourcesNamespace,
+ dstImgUUID, rm.EXCLUSIVE)
):
dstUUID = image.Image(self.poolPath).copyCollapsed(
sdUUID, vmUUID, srcImgUUID, srcVolUUID, dstImgUUID,
@@ -1583,10 +1580,10 @@
else:
raise se.MoveImageError(imgUUID)
- with nested(rmanager.acquireResource(srcImageResourcesNamespace,
- imgUUID, srcLock),
- rmanager.acquireResource(dstImageResourcesNamespace,
- imgUUID, rm.EXCLUSIVE)):
+ with nested(rm.acquireResource(srcImageResourcesNamespace,
+ imgUUID, srcLock),
+ rm.acquireResource(dstImageResourcesNamespace,
+ imgUUID, rm.EXCLUSIVE)):
image.Image(self.poolPath).move(srcDomUUID, dstDomUUID, imgUUID,
vmUUID, op, postZero, force)
@@ -1624,10 +1621,8 @@
# Since source volume is only a parent of temporary volume, we don't
# need to acquire any lock for it.
with nested(
- rmanager.acquireResource(srcNamespace, tmpImgUUID,
- rm.EXCLUSIVE),
- rmanager.acquireResource(dstNamespace, dstImgUUID,
- rm.EXCLUSIVE)):
+ rm.acquireResource(srcNamespace, tmpImgUUID, rm.EXCLUSIVE),
+ rm.acquireResource(dstNamespace, dstImgUUID, rm.EXCLUSIVE)):
image.Image(self.poolPath).sparsify(
tmpSdUUID, tmpImgUUID, tmpVolUUID, dstSdUUID, dstImgUUID,
dstVolUUID)
@@ -1650,7 +1645,7 @@
dstImgResNs = sd.getNamespace(sc.IMAGE_NAMESPACE, dstSdUUID)
# Preparing the ordered resource list to be acquired
- resList = (rmanager.acquireResource(*x) for x in sorted((
+ resList = (rm.acquireResource(*x) for x in sorted((
(srcImgResNs, imgUUID, rm.SHARED),
(dstImgResNs, imgUUID, rm.EXCLUSIVE),
)))
@@ -1678,7 +1673,7 @@
dstImgResNs = sd.getNamespace(sc.IMAGE_NAMESPACE, dstSdUUID)
# Preparing the ordered resource list to be acquired
- resList = (rmanager.acquireResource(*x) for x in sorted((
+ resList = (rm.acquireResource(*x) for x in sorted((
(srcImgResNs, imgUUID, rm.SHARED),
(dstImgResNs, imgUUID, rm.EXCLUSIVE),
)))
@@ -1692,7 +1687,7 @@
Upload an image to a remote endpoint using the specified method and
methodArgs.
"""
- imgResourceLock = rmanager.acquireResource(
+ imgResourceLock = rm.acquireResource(
sd.getNamespace(sc.IMAGE_NAMESPACE, sdUUID), imgUUID, rm.SHARED)
with imgResourceLock:
@@ -1704,7 +1699,7 @@
Download an image from a remote endpoint using the specified method
and methodArgs.
"""
- imgResourceLock = rmanager.acquireResource(
+ imgResourceLock = rm.acquireResource(
sd.getNamespace(sc.IMAGE_NAMESPACE, sdUUID), imgUUID, rm.EXCLUSIVE)
with imgResourceLock:
@@ -1720,7 +1715,7 @@
while not startEvent.is_set():
startEvent.wait()
- imgResourceLock = rmanager.acquireResource(
+ imgResourceLock = rm.acquireResource(
sd.getNamespace(sc.IMAGE_NAMESPACE, sdUUID), imgUUID, rm.SHARED)
with imgResourceLock:
@@ -1735,7 +1730,7 @@
"""
Download an image from a stream.
"""
- imgResourceLock = rmanager.acquireResource(
+ imgResourceLock = rm.acquireResource(
sd.getNamespace(sc.IMAGE_NAMESPACE, sdUUID), imgUUID, rm.EXCLUSIVE)
with imgResourceLock:
@@ -1774,9 +1769,9 @@
resourceList = []
for imgUUID in imgList:
- resourceList.append(rmanager.acquireResource(
+ resourceList.append(rm.acquireResource(
srcImageResourcesNamespace, imgUUID, rm.EXCLUSIVE))
- resourceList.append(rmanager.acquireResource(
+ resourceList.append(rm.acquireResource(
dstImageResourcesNamespace, imgUUID, rm.EXCLUSIVE))
with nested(*resourceList):
@@ -1799,8 +1794,8 @@
:rtype: dict
"""
imageResourcesNamespace = sd.getNamespace(sc.IMAGE_NAMESPACE, sdUUID)
- with rmanager.acquireResource(imageResourcesNamespace, imgUUID,
- rm.EXCLUSIVE):
+ with rm.acquireResource(imageResourcesNamespace, imgUUID,
+ rm.EXCLUSIVE):
img = image.Image(self.poolPath)
chain = img.reconcileVolumeChain(sdUUID, imgUUID, leafVolUUID)
return dict(volumes=chain)
@@ -1826,8 +1821,8 @@
"""
imageResourcesNamespace = sd.getNamespace(sc.IMAGE_NAMESPACE, sdUUID)
- with rmanager.acquireResource(imageResourcesNamespace, imgUUID,
- rm.EXCLUSIVE):
+ with rm.acquireResource(imageResourcesNamespace, imgUUID,
+ rm.EXCLUSIVE):
image.Image(self.poolPath).merge(
sdUUID, vmUUID, imgUUID, ancestor, successor, postZero)
@@ -1883,9 +1878,9 @@
if not srcVol.isShared():
if srcVol.getParent() == sc.BLANK_UUID:
- with rmanager.acquireResource(imageResourcesNamespace,
- srcImgUUID,
- rm.EXCLUSIVE):
+ with rm.acquireResource(imageResourcesNamespace,
+ srcImgUUID,
+ rm.EXCLUSIVE):
self.log.debug("volume %s is not shared. "
"Setting it as shared", srcVolUUID)
@@ -1893,8 +1888,8 @@
else:
raise se.VolumeNonShareable(srcVol)
- with rmanager.acquireResource(imageResourcesNamespace, imgUUID,
- rm.EXCLUSIVE):
+ with rm.acquireResource(imageResourcesNamespace, imgUUID,
+ rm.EXCLUSIVE):
newVolUUID = sdCache.produce(sdUUID).createVolume(
imgUUID=imgUUID, size=size, volFormat=volFormat,
preallocate=preallocate, diskType=diskType, volUUID=volUUID,
@@ -1922,8 +1917,8 @@
"""
imageResourcesNamespace = sd.getNamespace(sc.IMAGE_NAMESPACE, sdUUID)
- with rmanager.acquireResource(imageResourcesNamespace, imgUUID,
- rm.EXCLUSIVE):
+ with rm.acquireResource(imageResourcesNamespace, imgUUID,
+ rm.EXCLUSIVE):
dom = sdCache.produce(sdUUID)
for volUUID in volumes:
dom.produceVolume(imgUUID, volUUID).delete(
@@ -1975,8 +1970,8 @@
def setVolumeDescription(self, sdUUID, imgUUID, volUUID, description):
self.validatePoolSD(sdUUID)
imageResourcesNamespace = sd.getNamespace(sc.IMAGE_NAMESPACE, sdUUID)
- with rmanager.acquireResource(imageResourcesNamespace, imgUUID,
- rm.EXCLUSIVE):
+ with rm.acquireResource(imageResourcesNamespace, imgUUID,
+ rm.EXCLUSIVE):
sdCache.produce(sdUUID).produceVolume(
imgUUID=imgUUID,
volUUID=volUUID).setDescription(descr=description)
@@ -1984,8 +1979,8 @@
def setVolumeLegality(self, sdUUID, imgUUID, volUUID, legality):
self.validatePoolSD(sdUUID)
imageResourcesNamespace = sd.getNamespace(sc.IMAGE_NAMESPACE, sdUUID)
- with rmanager.acquireResource(imageResourcesNamespace, imgUUID,
- rm.EXCLUSIVE):
+ with rm.acquireResource(imageResourcesNamespace, imgUUID,
+ rm.EXCLUSIVE):
sdCache.produce(sdUUID).produceVolume(
imgUUID=imgUUID,
volUUID=volUUID).setLegality(legality=legality)
diff --git a/vdsm/storage/volume.py b/vdsm/storage/volume.py
index d2c6754..dab2e55 100644
--- a/vdsm/storage/volume.py
+++ b/vdsm/storage/volume.py
@@ -38,8 +38,6 @@
from sdc import sdCache
import task
import resourceManager as rm
-rmanager = rm.ResourceManager.getInstance()
-
DOMAIN_MNT_POINT = 'mnt'
@@ -651,8 +649,7 @@
imageResourcesNamespace = sd.getNamespace(sc.IMAGE_NAMESPACE, sdUUID)
- with rmanager.acquireResource(imageResourcesNamespace, srcImg,
- rm.EXCLUSIVE):
+ with rm.acquireResource(imageResourcesNamespace, srcImg, rm.EXCLUSIVE):
vol = sdCache.produce(sdUUID).produceVolume(srcImg, srcVol)
vol.prepare(rw=True, chainrw=True, setrw=True)
--
To view, visit https://gerrit.ovirt.org/65035
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib33d9fad90551a0c2e9b1e8a89c5f9f920681c6b
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Nir Soffer <nsoffer(a)redhat.com>
7 years, 7 months
Change in vdsm[master]: resourceManager: Add module api
by Nir Soffer
Nir Soffer has uploaded a new change for review.
Change subject: resourceManager: Add module api
......................................................................
resourceManager: Add module api
resourceManager has a Java like verbose api that make it hard to use and
is not safe. Add module api hiding the single ResourceManager instance.
Instead of this:
manager = rm.ResourceManager.getInstance()
manager.acquireResource("mamespace", "name", rm.SHRARED)
Or this wrong usage:
manager = ResourceManager()
manager.acquireResource("mamespace", "name", rm.SHRARED)
We can use now this:
rm.acquireResource("mamespace", "name", rm.SHRARED)
This is the simplest and safest way to implement a singleton in Python,
a module.
This patch adds the new api and update the tests to use this api.
Change-Id: Ie315f10bacdf49f1023d1991811afec28ed0d7f9
Signed-off-by: Nir Soffer <nsoffer(a)redhat.com>
---
M tests/storage_resourcemanager_test.py
M vdsm/storage/resourceManager.py
2 files changed, 96 insertions(+), 102 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/34/65034/1
diff --git a/tests/storage_resourcemanager_test.py b/tests/storage_resourcemanager_test.py
index 307fea5..8ff65c8 100644
--- a/tests/storage_resourcemanager_test.py
+++ b/tests/storage_resourcemanager_test.py
@@ -132,9 +132,8 @@
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testErrorInFactory(self):
- manager = rm.ResourceManager.getInstance()
- req = manager.registerResource("error", "resource", rm.EXCLUSIVE,
- lambda req, res: 1)
+ req = rm._registerResource(
+ "error", "resource", rm.EXCLUSIVE, lambda req, res: 1)
self.assertTrue(req.canceled())
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
@@ -145,10 +144,8 @@
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testRegisterInvalidNamespace(self):
- manager = rm.ResourceManager.getInstance()
try:
- manager.registerNamespace("I.HEART.DOTS",
- rm.SimpleResourceFactory())
+ rm.registerNamespace("I.HEART.DOTS", rm.SimpleResourceFactory())
except ValueError:
return
@@ -161,10 +158,9 @@
def callback(req, res):
resources.append(res)
- manager = rm.ResourceManager.getInstance()
- exclusive1 = manager.acquireResource(
+ exclusive1 = rm.acquireResource(
"failAfterSwitch", "resource", rm.EXCLUSIVE)
- sharedReq1 = manager.registerResource(
+ sharedReq1 = rm._registerResource(
"failAfterSwitch", "resource", rm.SHARED, callback)
exclusive1.release()
self.assertTrue(sharedReq1.canceled())
@@ -172,8 +168,7 @@
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testReregisterNamespace(self):
- manager = rm.ResourceManager.getInstance()
- self.assertRaises((ValueError, KeyError), manager.registerNamespace,
+ self.assertRaises((ValueError, KeyError), rm.registerNamespace,
"storage", rm.SimpleResourceFactory())
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
@@ -182,27 +177,22 @@
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testRequestInvalidResource(self):
- manager = rm.ResourceManager.getInstance()
- self.assertRaises(ValueError, manager.acquireResource,
+ self.assertRaises(ValueError, rm.acquireResource,
"storage", "DOT.DOT", rm.SHARED)
- self.assertRaises(ValueError, manager.acquireResource,
+ self.assertRaises(ValueError, rm.acquireResource,
"DOT.DOT", "resource", rm.SHARED)
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testReleaseInvalidResource(self):
- manager = rm.ResourceManager.getInstance()
- self.assertRaises(ValueError, manager.releaseResource,
+ self.assertRaises(ValueError, rm.releaseResource,
"DONT_EXIST", "resource")
- self.assertRaises(ValueError, manager.releaseResource, "storage",
+ self.assertRaises(ValueError, rm.releaseResource, "storage",
"DOT")
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testResourceWrapper(self):
- manager = rm.ResourceManager.getInstance()
s = StringIO
- with manager.acquireResource(
- "string", "test",
- rm.EXCLUSIVE) as resource:
+ with rm.acquireResource("string", "test", rm.EXCLUSIVE) as resource:
for attr in dir(s):
if attr == "close":
continue
@@ -210,10 +200,7 @@
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testAccessAttributeNotExposedByWrapper(self):
- manager = rm.ResourceManager.getInstance()
- with manager.acquireResource(
- "string", "test",
- rm.EXCLUSIVE) as resource:
+ with rm.acquireResource("string", "test", rm.EXCLUSIVE) as resource:
try:
resource.THERE_IS_NO_WAY_I_EXIST
except AttributeError:
@@ -232,9 +219,7 @@
def callback(req, res):
resources.insert(0, res)
- manager = rm.ResourceManager.getInstance()
- req = manager.registerResource(
- "string", "resource", rm.SHARED, callback)
+ req = rm._registerResource("string", "resource", rm.SHARED, callback)
try:
req.grant()
except AttributeError:
@@ -255,9 +240,7 @@
def callback(req, res):
resources.insert(0, res)
- manager = rm.ResourceManager.getInstance()
- req = manager.registerResource(
- "string", "resource", rm.SHARED, callback)
+ req = rm._registerResource("string", "resource", rm.SHARED, callback)
try:
str(req)
finally:
@@ -273,10 +256,9 @@
resources.insert(0, res)
requests.insert(0, req)
- manager = rm.ResourceManager.getInstance()
- req1 = manager.registerResource(
+ req1 = rm._registerResource(
"string", "resource", rm.EXCLUSIVE, callback)
- req2 = manager.registerResource(
+ req2 = rm._registerResource(
"string", "resource", rm.EXCLUSIVE, callback)
self.assertNotEqual(req1, req2)
@@ -303,9 +285,8 @@
def callback(req, res):
resources.insert(0, res)
- manager = rm.ResourceManager.getInstance()
- blocker = manager.acquireResource("string", "resource", rm.EXCLUSIVE)
- req = manager.registerResource(
+ blocker = rm.acquireResource("string", "resource", rm.EXCLUSIVE)
+ req = rm._registerResource(
"string", "resource", rm.EXCLUSIVE, callback)
req.cancel()
@@ -330,9 +311,8 @@
def callback(req, res):
raise Exception("BUY MILK!")
- manager = rm.ResourceManager.getInstance()
- blocker = manager.acquireResource("string", "resource", rm.EXCLUSIVE)
- req = manager.registerResource(
+ blocker = rm.acquireResource("string", "resource", rm.EXCLUSIVE)
+ req = rm._registerResource(
"string", "resource", rm.EXCLUSIVE, callback)
req.cancel()
@@ -345,15 +325,13 @@
res.release()
raise Exception("BUY MILK!")
- manager = rm.ResourceManager.getInstance()
- req = manager.registerResource(
+ req = rm._registerResource(
"string", "resource", rm.EXCLUSIVE, callback)
req.wait()
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testRereleaseResource(self):
- manager = rm.ResourceManager.getInstance()
- res = manager.acquireResource("string", "resource", rm.EXCLUSIVE)
+ res = rm.acquireResource("string", "resource", rm.EXCLUSIVE)
res.release()
res.release()
@@ -364,18 +342,16 @@
def callback(req, res):
resources.insert(0, res)
- manager = rm.ResourceManager.getInstance()
- exclusive1 = manager.acquireResource(
- "string", "resource", rm.EXCLUSIVE)
- sharedReq1 = manager.registerResource(
+ exclusive1 = rm.acquireResource( "string", "resource", rm.EXCLUSIVE)
+ sharedReq1 = rm._registerResource(
"string", "resource", rm.SHARED, callback)
- sharedReq2 = manager.registerResource(
+ sharedReq2 = rm._registerResource(
"string", "resource", rm.SHARED, callback)
- exclusiveReq1 = manager.registerResource(
+ exclusiveReq1 = rm._registerResource(
"string", "resource", rm.EXCLUSIVE, callback)
- sharedReq3 = manager.registerResource(
+ sharedReq3 = rm._registerResource(
"string", "resource", rm.SHARED, callback)
- sharedReq4 = manager.registerResource(
+ sharedReq4 = rm._registerResource(
"string", "resource", rm.SHARED, callback)
self.assertFalse(sharedReq1.granted())
@@ -414,18 +390,16 @@
def callback(req, res):
resources.insert(0, res)
- manager = rm.ResourceManager.getInstance()
- exclusive1 = manager.acquireResource(
- namespace, "resource", rm.EXCLUSIVE)
- sharedReq1 = manager.registerResource(
+ exclusive1 = rm.acquireResource(namespace, "resource", rm.EXCLUSIVE)
+ sharedReq1 = rm._registerResource(
namespace, "resource", rm.SHARED, callback)
- sharedReq2 = manager.registerResource(
+ sharedReq2 = rm._registerResource(
namespace, "resource", rm.SHARED, callback)
- exclusive2 = manager.registerResource(
+ exclusive2 = rm._registerResource(
namespace, "resource", rm.EXCLUSIVE, callback)
- exclusive3 = manager.registerResource(
+ exclusive3 = rm._registerResource(
namespace, "resource", rm.EXCLUSIVE, callback)
- sharedReq3 = manager.registerResource(
+ sharedReq3 = rm._registerResource(
namespace, "resource", rm.SHARED, callback)
self.assertEquals(exclusive1.read(), "resource:exclusive")
@@ -452,25 +426,20 @@
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testResourceAcquireTimeout(self):
- manager = rm.ResourceManager.getInstance()
- exclusive1 = manager.acquireResource(
- "string", "resource", rm.EXCLUSIVE)
+ exclusive1 = rm.acquireResource("string", "resource", rm.EXCLUSIVE)
self.assertRaises(rm.RequestTimedOutError,
- manager.acquireResource, "string", "resource",
+ rm.acquireResource, "string", "resource",
rm.EXCLUSIVE, 1)
exclusive1.release()
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testResourceAcquireInvalidTimeout(self):
- manager = rm.ResourceManager.getInstance()
- self.assertRaises(TypeError, manager.acquireResource, "string",
+ self.assertRaises(TypeError, rm.acquireResource, "string",
"resource", rm.EXCLUSIVE, "A")
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testResourceInvalidation(self):
- manager = rm.ResourceManager.getInstance()
- resource = manager.acquireResource("string", "test",
- rm.EXCLUSIVE)
+ resource = rm.acquireResource("string", "test", rm.EXCLUSIVE)
try:
resource.write("dsada")
except:
@@ -480,14 +449,12 @@
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testForceRegisterNamespace(self):
- manager = rm.ResourceManager.getInstance()
- manager.registerNamespace("storage", rm.SimpleResourceFactory(), True)
+ rm.registerNamespace("storage", rm.SimpleResourceFactory(), True)
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testResourceAutorelease(self):
- manager = rm.ResourceManager.getInstance()
self.log.info("Acquiring resource", extra={'resource': "bob"})
- res = manager.acquireResource("storage", "resource", rm.SHARED)
+ res = rm.acquireResource("storage", "resource", rm.SHARED)
resProxy = proxy(res)
res = None
# wait for object to die
@@ -499,36 +466,33 @@
pass
self.log.info("Waiting for autoclean")
while True:
- resStatus = manager.getResourceStatus("storage", "resource")
+ resStatus = rm._getResourceStatus("storage", "resource")
if resStatus == rm.LockState.free:
break
time.sleep(1)
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testAcquireResourceShared(self):
- manager = rm.ResourceManager.getInstance()
- res1 = manager.acquireResource("storage", "resource", rm.SHARED)
- res2 = manager.acquireResource("storage", "resource", rm.SHARED, 10)
+ res1 = rm.acquireResource("storage", "resource", rm.SHARED)
+ res2 = rm.acquireResource("storage", "resource", rm.SHARED, 10)
res1.release()
res2.release()
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testResourceStatuses(self):
- manager = rm.ResourceManager.getInstance()
- self.assertEquals(manager.getResourceStatus("storage", "resource"),
+ self.assertEquals(rm._getResourceStatus("storage", "resource"),
rm.LockState.free)
- exclusive1 = manager.acquireResource(
- "storage", "resource", rm.EXCLUSIVE)
- self.assertEquals(manager.getResourceStatus("storage", "resource"),
+ exclusive1 = rm.acquireResource("storage", "resource", rm.EXCLUSIVE)
+ self.assertEquals(rm._getResourceStatus("storage", "resource"),
rm.LockState.locked)
exclusive1.release()
- shared1 = manager.acquireResource("storage", "resource", rm.SHARED)
- self.assertEquals(manager.getResourceStatus("storage", "resource"),
+ shared1 = rm.acquireResource("storage", "resource", rm.SHARED)
+ self.assertEquals(rm._getResourceStatus("storage", "resource"),
rm.LockState.shared)
shared1.release()
try:
- self.assertEquals(manager.getResourceStatus("null", "resource"),
+ self.assertEquals(rm._getResourceStatus("null", "resource"),
rm.LockState.free)
except KeyError:
return
@@ -537,9 +501,8 @@
@MonkeyPatch(rm.ResourceManager, "_instance", manager())
def testAcquireNonExistingResource(self):
- manager = rm.ResourceManager.getInstance()
try:
- manager.acquireResource("null", "resource", rm.EXCLUSIVE)
+ rm.acquireResource("null", "resource", rm.EXCLUSIVE)
except KeyError:
return
@@ -552,16 +515,14 @@
def callback(req, res):
resources.append(res)
- manager = rm.ResourceManager.getInstance()
- exclusive1 = manager.acquireResource(
- "storage", "resource", rm.EXCLUSIVE)
- sharedReq1 = manager.registerResource(
+ exclusive1 = rm.acquireResource( "storage", "resource", rm.EXCLUSIVE)
+ sharedReq1 = rm._registerResource(
"storage", "resource", rm.SHARED, callback)
- sharedReq2 = manager.registerResource(
+ sharedReq2 = rm._registerResource(
"storage", "resource", rm.SHARED, callback)
- exclusiveReq1 = manager.registerResource(
+ exclusiveReq1 = rm._registerResource(
"storage", "resource", rm.EXCLUSIVE, callback)
- exclusiveReq2 = manager.registerResource(
+ exclusiveReq2 = rm._registerResource(
"storage", "resource", rm.EXCLUSIVE, callback)
self.assertFalse(sharedReq1.granted())
@@ -594,12 +555,11 @@
def callback(req, res):
resources.append(res)
- manager = rm.ResourceManager.getInstance()
- exclusiveReq1 = manager.registerResource(
+ exclusiveReq1 = rm._registerResource(
"storage", "resource", rm.EXCLUSIVE, callback)
- exclusiveReq2 = manager.registerResource(
+ exclusiveReq2 = rm._registerResource(
"storage", "resource", rm.EXCLUSIVE, callback)
- exclusiveReq3 = manager.registerResource(
+ exclusiveReq3 = rm._registerResource(
"storage", "resource", rm.EXCLUSIVE, callback)
self.assertTrue(exclusiveReq1.granted())
@@ -637,9 +597,10 @@
def register():
time.sleep(rnd.randint(0, 4))
- manager.registerResource(
- "string", "resource", lockTranslator[rnd.randint(0, 1)],
- callback)
+ rm._registerResource("string",
+ "resource",
+ lockTranslator[rnd.randint(0, 1)],
+ callback)
threadLimit.release()
def releaseShared(req, res):
@@ -651,7 +612,6 @@
res.release()
threadLimit.release()
- manager = rm.ResourceManager.getInstance()
rnd = Random()
lockTranslator = [rm.EXCLUSIVE, rm.SHARED]
diff --git a/vdsm/storage/resourceManager.py b/vdsm/storage/resourceManager.py
index 338a885..5bb4550 100644
--- a/vdsm/storage/resourceManager.py
+++ b/vdsm/storage/resourceManager.py
@@ -1025,3 +1025,37 @@
def release(self):
self._rm.releaseResource(self.ns, self.name)
+
+
+# Public api - client should use only these to manage resources.
+
+def registerNamespace(namespace, factory, force=False):
+ manager = ResourceManager.getInstance()
+ manager.registerNamespace(namespace, factory, force=force)
+
+
+def unregisterNamespace(namespace):
+ manager = ResourceManager.getInstance()
+ manager.unregisterNamespace(namespace)
+
+
+def acquireResource(namespace, name, lockType, timeout=None):
+ manager = ResourceManager.getInstance()
+ return manager.acquireResource(namespace, name, lockType, timeout=timeout)
+
+
+def releaseResource(namespace, name):
+ manager = ResourceManager.getInstance()
+ manager.releaseResource(namespace, name)
+
+
+# Private apis for the tests - clients should never use these!
+
+def _registerResource(namespace, name, lockType, callback):
+ manager = ResourceManager.getInstance()
+ return manager.registerResource(namespace, name, lockType, callback)
+
+
+def _getResourceStatus(namespace, name):
+ manager = ResourceManager.getInstance()
+ return manager.getResourceStatus(namespace, name)
--
To view, visit https://gerrit.ovirt.org/65034
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie315f10bacdf49f1023d1991811afec28ed0d7f9
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Nir Soffer <nsoffer(a)redhat.com>
7 years, 7 months
Change in vdsm[master]: tests: Run mount tests multiple times
by automation@ovirt.org
gerrit-hooks has posted comments on this change.
Change subject: tests: Run mount tests multiple times
......................................................................
Patch Set 8:
* Update tracker: IGNORE, no Bug-Url found
--
To view, visit https://gerrit.ovirt.org/56545
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: Idaed2e8e1c5b2bd04c412233d94e94005c23189c
Gerrit-PatchSet: 8
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Nir Soffer <nsoffer(a)redhat.com>
Gerrit-Reviewer: Adam Litke <alitke(a)redhat.com>
Gerrit-Reviewer: Allon Mureinik <amureini(a)redhat.com>
Gerrit-Reviewer: Dan Kenigsberg <danken(a)redhat.com>
Gerrit-Reviewer: Idan Shaby <ishaby(a)redhat.com>
Gerrit-Reviewer: Jenkins CI
Gerrit-Reviewer: Nir Soffer <nsoffer(a)redhat.com>
Gerrit-Reviewer: gerrit-hooks <automation(a)ovirt.org>
Gerrit-HasComments: No
7 years, 7 months
Change in vdsm[master]: tests: Run mount tests multiple times
by Nir Soffer
Nir Soffer has abandoned this change.
Change subject: tests: Run mount tests multiple times
......................................................................
Abandoned
Not needed now.
--
To view, visit https://gerrit.ovirt.org/56545
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: abandon
Gerrit-Change-Id: Idaed2e8e1c5b2bd04c412233d94e94005c23189c
Gerrit-PatchSet: 8
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Nir Soffer <nsoffer(a)redhat.com>
Gerrit-Reviewer: Adam Litke <alitke(a)redhat.com>
Gerrit-Reviewer: Allon Mureinik <amureini(a)redhat.com>
Gerrit-Reviewer: Dan Kenigsberg <danken(a)redhat.com>
Gerrit-Reviewer: Idan Shaby <ishaby(a)redhat.com>
Gerrit-Reviewer: Jenkins CI
Gerrit-Reviewer: Nir Soffer <nsoffer(a)redhat.com>
Gerrit-Reviewer: gerrit-hooks <automation(a)ovirt.org>
7 years, 7 months
Change in vdsm[master]: service: Add vdsm-tool-update service
by Douglas Schilling Landgraf
Hello Fabian Deutsch,
I'd like you to do a code review. Please visit
https://gerrit.ovirt.org/64904
to review the following change.
Change subject: service: Add vdsm-tool-update service
......................................................................
service: Add vdsm-tool-update service
oVirt-Node Next provides updates via squashfs images and
between major/minor updates based on EL7 might occur changes
of selinux policy/booleans affecting previous vdsm settings.
This patch creates a new service 'vdsm-tool-update' that handle
such image updates scenarios.
Change-Id: Ib9c4fffb09d2a5c49b0462693fb2beca47fb58ea
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1373389
Signed-off-by: Fabian Deutsch <fabiand(a)fedoraproject.org>
Signed-off-by: Douglas Schilling Landgraf <dougsland(a)redhat.com>
---
M init/systemd/85-vdsmd.preset
M static/Makefile.am
A static/usr/lib/systemd/system/vdsm-tool-update.service
M vdsm.spec.in
4 files changed, 19 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/04/64904/1
diff --git a/init/systemd/85-vdsmd.preset b/init/systemd/85-vdsmd.preset
index 6da4332c..632235f 100644
--- a/init/systemd/85-vdsmd.preset
+++ b/init/systemd/85-vdsmd.preset
@@ -5,6 +5,7 @@
enable supervdsmd.service
enable vdsm-network.service
enable vdsm-network-init.service
+enable vdsm-tool-update.service
enable mom-vdsm.service
disable ksmtuned.service
diff --git a/static/Makefile.am b/static/Makefile.am
index 040d6ec..68a98c0 100644
--- a/static/Makefile.am
+++ b/static/Makefile.am
@@ -86,6 +86,7 @@
./usr/lib/systemd/system/supervdsmd.service \
./usr/lib/systemd/system/vdsm-network.service \
./usr/lib/systemd/system/vdsm-network-init.service \
+ ./usr/lib/systemd/system/vdsm-tool-update.service \
./usr/lib/systemd/system/vdsmd.service \
$(NULL)
@@ -111,5 +112,6 @@
./usr/lib/systemd/system/supervdsmd.service.in \
./usr/lib/systemd/system/vdsm-network.service.in \
./usr/lib/systemd/system/vdsm-network-init.service.in \
+ ./usr/lib/systemd/system/vdsm-tool-update.service \
./usr/lib/systemd/system/vdsmd.service.in \
$(NULL)
diff --git a/static/usr/lib/systemd/system/vdsm-tool-update.service b/static/usr/lib/systemd/system/vdsm-tool-update.service
new file mode 100644
index 0000000..ad39290
--- /dev/null
+++ b/static/usr/lib/systemd/system/vdsm-tool-update.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Reconfigure vdsmd
+Conflicts=shutdown.target
+Before=supervdsmd.service vdsmd.service shutdown.target systemd-update-done.service
+ConditionNeedsUpdate=/usr
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/bin/vdsm-tool configure --force
+
+[Install]
+WantedBy=multi-user.target
diff --git a/vdsm.spec.in b/vdsm.spec.in
index 80360d0..23e079e 100644
--- a/vdsm.spec.in
+++ b/vdsm.spec.in
@@ -849,6 +849,7 @@
%systemd_post supervdsmd.service
%systemd_post vdsm-network.service
%systemd_post vdsm-network-init.service
+%systemd_post vdsm-tool-update.service
%systemd_post mom-vdsm.service
%systemd_post ksmtuned.service
@@ -863,6 +864,7 @@
%systemd_preun vdsmd.service
%systemd_preun vdsm-network.service
%systemd_preun vdsm-network-init.service
+%systemd_preun vdsm-tool-update.service
%systemd_preun supervdsmd.service
%systemd_preun mom-vdsm.service
%systemd_preun ksmtuned.service
@@ -907,6 +909,7 @@
%{_unitdir}/vdsmd.service
%{_unitdir}/vdsm-network.service
%{_unitdir}/vdsm-network-init.service
+%{_unitdir}/vdsm-tool-update.service
%{_unitdir}/supervdsmd.service
%{_unitdir}/mom-vdsm.service
%{_sysconfdir}/systemd/system/libvirtd.service.d/unlimited-core.conf
--
To view, visit https://gerrit.ovirt.org/64904
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib9c4fffb09d2a5c49b0462693fb2beca47fb58ea
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Douglas Schilling Landgraf <dougsland(a)redhat.com>
Gerrit-Reviewer: Fabian Deutsch <fabiand(a)redhat.com>
7 years, 7 months
Change in vdsm[master]: yml: return type fixes for StoragePool.getSpmStatus
by Piotr Kliczewski
Piotr Kliczewski has uploaded a new change for review.
Change subject: yml: return type fixes for StoragePool.getSpmStatus
......................................................................
yml: return type fixes for StoragePool.getSpmStatus
Change-Id: Ieb9fbae250507d4cf02ef9b73eee6403a06cd9d2
Signed-off-by: Piotr Kliczewski <piotr.kliczewski(a)gmail.com>
---
M lib/api/vdsm-api.yml
M tests/vdsmapi_test.py
2 files changed, 7 insertions(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/06/59706/1
diff --git a/lib/api/vdsm-api.yml b/lib/api/vdsm-api.yml
index 20de0a6..7dd95d1 100644
--- a/lib/api/vdsm-api.yml
+++ b/lib/api/vdsm-api.yml
@@ -5468,7 +5468,7 @@
- description: The lock version of the Storage Pool
name: spmLver
- type: int
+ type: long
type: object
StorageDomainCreateArgumentsBlock: &StorageDomainCreateArgumentsBlock
diff --git a/tests/vdsmapi_test.py b/tests/vdsmapi_test.py
index c3cacf0..eddb735 100644
--- a/tests/vdsmapi_test.py
+++ b/tests/vdsmapi_test.py
@@ -601,3 +601,9 @@
_schema.schema().verify_retval(
vdsmapi.MethodRep('Task', 'getStatus'), ret)
+
+ def test_spm_status(self):
+ ret = {'spmId': 1, 'spmStatus': 'SPM', 'spmLver': 10}
+
+ _schema.schema().verify_retval(
+ vdsmapi.MethodRep('StoragePool', 'getSpmStatus'), ret)
--
To view, visit https://gerrit.ovirt.org/59706
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ieb9fbae250507d4cf02ef9b73eee6403a06cd9d2
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Piotr Kliczewski <piotr.kliczewski(a)gmail.com>
7 years, 7 months
Change in vdsm[master]: yml: return type fixes for Task.getStatus
by Piotr Kliczewski
Piotr Kliczewski has uploaded a new change for review.
Change subject: yml: return type fixes for Task.getStatus
......................................................................
yml: return type fixes for Task.getStatus
Change-Id: I7ce3e3ab2e21e5d1f6da6bdf5dc89a3db40e2160
Signed-off-by: Piotr Kliczewski <piotr.kliczewski(a)gmail.com>
---
M lib/api/vdsm-api.yml
M tests/vdsmapi_test.py
2 files changed, 11 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/05/59705/1
diff --git a/lib/api/vdsm-api.yml b/lib/api/vdsm-api.yml
index 670eed7..20de0a6 100644
--- a/lib/api/vdsm-api.yml
+++ b/lib/api/vdsm-api.yml
@@ -5818,6 +5818,7 @@
cleanFailure: The task failed and recovery also failed
cleanSuccess: The task failed but was successfully recovered
success: The task was successful
+ '': Task is in progress
TaskState: &TaskState
added: '3.1'
diff --git a/tests/vdsmapi_test.py b/tests/vdsmapi_test.py
index 04297b1..c3cacf0 100644
--- a/tests/vdsmapi_test.py
+++ b/tests/vdsmapi_test.py
@@ -591,3 +591,13 @@
_schema.schema().verify_args(
vdsmapi.MethodRep('StoragePool', 'spmStart'), params)
+
+ def test_task_status(self):
+ ret = {'code': 0,
+ 'message': 'running job 1 of 1',
+ 'taskState': 'running',
+ 'taskResult': '',
+ 'taskID': '72fdf1ca-8826-4688-9c8c-e175d4253e2a'}
+
+ _schema.schema().verify_retval(
+ vdsmapi.MethodRep('Task', 'getStatus'), ret)
--
To view, visit https://gerrit.ovirt.org/59705
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I7ce3e3ab2e21e5d1f6da6bdf5dc89a3db40e2160
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Piotr Kliczewski <piotr.kliczewski(a)gmail.com>
7 years, 7 months
Change in vdsm[master]: yml: parameter type fixes for StoragePool.spmStart
by Piotr Kliczewski
Piotr Kliczewski has uploaded a new change for review.
Change subject: yml: parameter type fixes for StoragePool.spmStart
......................................................................
yml: parameter type fixes for StoragePool.spmStart
Change-Id: I49072827b8ac04f720d50aca8e5a24b4be7582b7
Signed-off-by: Piotr Kliczewski <piotr.kliczewski(a)gmail.com>
---
M lib/api/vdsm-api.yml
M tests/vdsmapi_test.py
2 files changed, 17 insertions(+), 3 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/04/59704/1
diff --git a/lib/api/vdsm-api.yml b/lib/api/vdsm-api.yml
index a289b7f..670eed7 100644
--- a/lib/api/vdsm-api.yml
+++ b/lib/api/vdsm-api.yml
@@ -8602,11 +8602,13 @@
- description: Deprecated. The lver of the previous SPM
name: prevLver
- type: int
+ type: string
+ datatype: int
- description: This parameter is not used
name: enableScsiFencing
- type: boolean
+ type: string
+ datatype: boolean
- defaultvalue: null
description: The maximum number of hosts that could be in the cluster
@@ -8616,7 +8618,8 @@
- defaultvalue: null
description: The expected Storage Domain version of the master domain
name: domVersion
- type: int
+ type: string
+ datatype: int
return:
description: A task UUID
type: *UUID
diff --git a/tests/vdsmapi_test.py b/tests/vdsmapi_test.py
index bff578c..04297b1 100644
--- a/tests/vdsmapi_test.py
+++ b/tests/vdsmapi_test.py
@@ -580,3 +580,14 @@
_schema.schema().verify_retval(
vdsmapi.MethodRep('Host', 'hostdevListByCaps'), ret)
+
+ def test_start_spm(self):
+ params = {u'prevLver': u'-1',
+ u'enableScsiFencing': u'false',
+ u'storagepoolID': u'636d9c59-f7ba-4115-87a1-44d6563a9610',
+ u'prevID': -1,
+ u'domVersion': u'3',
+ u'maxHostID': 250}
+
+ _schema.schema().verify_args(
+ vdsmapi.MethodRep('StoragePool', 'spmStart'), params)
--
To view, visit https://gerrit.ovirt.org/59704
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I49072827b8ac04f720d50aca8e5a24b4be7582b7
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Piotr Kliczewski <piotr.kliczewski(a)gmail.com>
7 years, 7 months
Change in vdsm[ovirt-4.0]: virt: Don't crash in migration progress on compression bytes
by mzamazal@redhat.com
Hello Francesco Romani, Michal Skrivanek,
I'd like you to do a code review. Please visit
https://gerrit.ovirt.org/64499
to review the following change.
Change subject: virt: Don't crash in migration progress on compression bytes
......................................................................
virt: Don't crash in migration progress on compression bytes
If compression is not enabled for a migration then compression stats are
not provided by libvirt. So when we try to retrieve them in migration
Progress, we must not expect their presence, otherwise we crash there.
Backport-To: 4.0
Change-Id: I1885940843d705ead161c13258f1979025a03873
Signed-off-by: Milan Zamazal <mzamazal(a)redhat.com>
Reviewed-on: https://gerrit.ovirt.org/64468
Reviewed-by: Michal Skrivanek <michal.skrivanek(a)redhat.com>
Continuous-Integration: Jenkins CI
Reviewed-by: Francesco Romani <fromani(a)redhat.com>
---
M vdsm/virt/migration.py
1 file changed, 1 insertion(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/99/64499/1
diff --git a/vdsm/virt/migration.py b/vdsm/virt/migration.py
index 8f2af23..e502756 100644
--- a/vdsm/virt/migration.py
+++ b/vdsm/virt/migration.py
@@ -769,7 +769,7 @@
stats[libvirt.VIR_DOMAIN_JOB_MEMORY_REMAINING],
stats[libvirt.VIR_DOMAIN_JOB_MEMORY_BPS],
stats[libvirt.VIR_DOMAIN_JOB_MEMORY_CONSTANT],
- stats[libvirt.VIR_DOMAIN_JOB_COMPRESSION_BYTES],
+ stats.get(libvirt.VIR_DOMAIN_JOB_COMPRESSION_BYTES, 0),
# available since libvirt 1.3
stats.get('memory_dirty_rate', -1),
# available since libvirt 1.3
--
To view, visit https://gerrit.ovirt.org/64499
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I1885940843d705ead161c13258f1979025a03873
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: ovirt-4.0
Gerrit-Owner: Milan Zamazal <mzamazal(a)redhat.com>
Gerrit-Reviewer: Francesco Romani <fromani(a)redhat.com>
Gerrit-Reviewer: Michal Skrivanek <michal.skrivanek(a)redhat.com>
7 years, 7 months