[NEW PATCH] BZ#732980 Check block size on VG commands (via gerrit-bot)
Federico Simoncelli
fsimonce at redhat.com
Thu Sep 15 16:10:27 UTC 2011
New patch submitted by Federico Simoncelli (fsimonce at redhat.com)
You can review this change at: http://gerrit.usersys.redhat.com/920
commit 2130ecda49226b275d8caed80075b0c294df03ea
Author: Federico Simoncelli <fsimonce at redhat.com>
Date: Thu Sep 8 13:38:18 2011 +0000
BZ#732980 Check block size on VG commands
Change-Id: Ie106491328f12f650b6bb234a92238d6c0aa70c8
diff --git a/vdsm/storage/blockSD.py b/vdsm/storage/blockSD.py
index ff021e7..94480ca 100644
--- a/vdsm/storage/blockSD.py
+++ b/vdsm/storage/blockSD.py
@@ -37,6 +37,7 @@ import lvm
import safelease
import blockVolume
import multipath
+import devicemapper
import resourceFactories
from resourceFactories import LVM_ACTIVATION_NAMESPACE
from persistentDict import PersistentDict, DictValidator
@@ -243,6 +244,17 @@ class BlockStorageDomain(sd.StorageDomain):
self.logBlkSize = self.getMetaParam(DMDK_LOGBLKSIZE)
self.phyBlkSize = self.getMetaParam(DMDK_PHYBLKSIZE)
+ # Checking that the block size of each device in the VG has the same
+ # logical and physical size.
+ domBlkSizes = (self.logBlkSize, self.phyBlkSize)
+
+ for pv in lvm.listPVNames(sdUUID):
+ dmId = devicemapper.getDmId(os.path.basename(pv))
+ devBlkSizes = multipath.getDeviceBlockSizes(dmId)
+
+ if devBlkSizes != domBlkSizes:
+ raise se.VolumeGroupBlockSizeError(domBlkSizes, devBlkSizes)
+
# _extendlock is used to prevent race between
# VG extend and LV extend.
self._extendlock = threading.Lock()
@@ -515,6 +527,8 @@ class BlockStorageDomain(sd.StorageDomain):
if len(mapping) + len(devlist) > MAX_PVS:
raise se.StorageDomainIsMadeFromTooManyPVs()
+ domBlkSizes = (self.logBlkSize, self.phyBlkSize)
+
self._extendlock.acquire()
try:
@@ -522,11 +536,18 @@ class BlockStorageDomain(sd.StorageDomain):
devices = []
for dev in devlist:
- if dev in knowndevs:
- devices.append(dev)
- else:
+ if dev not in knowndevs:
raise se.InvalidPhysDev(dev)
+ dmId = devicemapper.getDmId(dev)
+ devBlkSizes = multipath.getDeviceBlockSizes(dmId)
+
+ if devBlkSizes != domBlkSizes:
+ raise se.VolumeGroupBlockSizeError(
+ domBlkSizes, devBlkSizes)
+
+ devices.append(dev)
+
lvm.extendVG(self.sdUUID, devices)
self.updateMapping()
newsize = self.metaSize(self.sdUUID)
diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py
index b0ee212..50e2510 100644
--- a/vdsm/storage/hsm.py
+++ b/vdsm/storage/hsm.py
@@ -843,17 +843,28 @@ class HSM:
#getSharedLock(connectionsResource...)
knowndevs = list(multipath.getMPDevNamesIter())
devices = []
- devSizes = []
+ size = 0
+ domBlockSizes = None
for dev in devlist:
if dev in knowndevs:
+ dmId = devicemapper.getDmId(dev)
+ blkSize = multipath.getDeviceBlockSizes(dmId)
+
+ # Setting the domain block size to the first device found
+ if domBlockSizes == None:
+ domBlockSizes = blkSize
+
+ # Checking device block size
+ if blkSize != domBlockSizes:
+ raise se.VolumeGroupBlockSizeError(domBlockSizes, blkSize)
+
+ size += multipath.getDeviceSize(dmId)
devices.append(dev)
- devSizes.append(multipath.getDeviceSize(devicemapper.getDmId(dev)))
else:
raise se.InvalidPhysDev(dev)
#Minimal size check
- size = sum(devSizes)
if size < MINIMALVGSIZE:
raise se.VolumeGroupSizeError("VG size must be more than %s MiB" % str(MINIMALVGSIZE / constants.MEGAB))
diff --git a/vdsm/storage/storage_exception.py b/vdsm/storage/storage_exception.py
index 0a0ab22..7bb3f1c 100644
--- a/vdsm/storage/storage_exception.py
+++ b/vdsm/storage/storage_exception.py
@@ -1001,6 +1001,15 @@ class VolumeGroupReplaceTagError(StorageException):
code = 516
message = "Replace Volume Group tag error"
+class VolumeGroupBlockSizeError(StorageException):
+ def __init__(self, domsizes, devsizes):
+ self.value = "domlogblksize=%s domphyblksize=%s " \
+ "devlogblksize=%s devphyblksize=%s" % (
+ domsizes[0], domsizes[1],
+ devsizes[0], devsizes[1])
+ code = 517
+ message = "All devices in domain must have the same block size"
+
class CannotCreateLogicalVolume(StorageException):
code = 550
message = "Cannot create Logical Volume"
More information about the vdsm-patches
mailing list