Eduardo has uploaded a new change for review. Change subject: Introduce lvm short filters. ......................................................................
Introduce lvm short filters. lvm commands that operate in a known VG can use the known pvs for filter. Change-Id: I26f3a7c712b6d7009f5f4e945374b62f18483889 Signed-off-by: Eduardo <[email protected]> --- M vdsm/storage/lvm.py 1 file changed, 38 insertions(+), 24 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/68/17968/1 diff --git a/vdsm/storage/lvm.py b/vdsm/storage/lvm.py index 8f957ec..90576c0 100644 --- a/vdsm/storage/lvm.py +++ b/vdsm/storage/lvm.py @@ -302,8 +302,8 @@ self._vgs = {} self._lvs = {} - def cmd(self, cmd): - finalCmd = self._addExtraCfg(cmd) + def cmd(self, cmd, devices=tuple()): + finalCmd = self._addExtraCfg(cmd, devices) rc, out, err = misc.execCmd(finalCmd, sudo=True) if rc != 0: # Filter might be stale @@ -362,13 +362,27 @@ return updatedPVs + def _getVGDevs(self, vgNames): + devices = [] + for name in vgNames: + try: + pvs = self._vgs[name].pv_name # pv_names tuple + except KeyError: # Yet unknown VG + devices = tuple() + log.warning("Known and unknown yet VG mix: %s", vgNames) + break # unknownVG = True + else: + devices.extend(pvs) + else: # All known VGs + devices = tuple(devices) + def _reloadvgs(self, vgName=None): cmd = list(VGS_CMD) vgNames = _normalizeargs(vgName) cmd.extend(vgNames) with self._oplock.acquireContext(LVM_OP_RELOAD): - rc, out, err = self.cmd(cmd) + rc, out, err = self.cmd(cmd, self._getVGDevs(vgNames)) if rc != 0: log.warning("lvm vgs failed: %s %s %s", str(rc), str(out), @@ -422,7 +436,7 @@ cmd.append(vgName) with self._oplock.acquireContext(LVM_OP_RELOAD): - rc, out, err = self.cmd(cmd) + rc, out, err = self.cmd(cmd, self._getVGDevs((vgName, ))) if rc != 0: log.warning("lvm lvs failed: %s %s %s", str(rc), str(out), @@ -629,7 +643,6 @@ lvs = dict(self._lvs) return lvs.values() - _lvminfo = LVMCache() @@ -656,7 +669,7 @@ cmd.extend(("--metadatasize", metadatasize, "--metadatacopies", "2", "--metadataignore", "y")) cmd.extend(devices) - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, devices) return rc, out, err @@ -719,7 +732,7 @@ def _setVgAvailability(vgs, available): vgs = _normalizeargs(vgs) cmd = ["vgchange", "--available", available] + vgs - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs(vgs)) for vg in vgs: _lvminfo._invalidatelvs(vg) if rc != 0: @@ -761,7 +774,7 @@ for attr in attrs: cmd.extend(attr) cmd.extend(lvnames) - rc, out, err = _lvminfo.cmd(tuple(cmd)) + rc, out, err = _lvminfo.cmd(tuple(cmd), _lvminfo._getVGDevs((vg, ))) _lvminfo._invalidatelvs(vg, lvs) if rc != 0 and len(out) < 1: raise se.StorageException("%d %s %s\n%s/%s" % (rc, out, err, vg, lvs)) @@ -868,7 +881,7 @@ # Activate the 1st PV metadata areas cmd = ["pvchange", "--metadataignore", "n"] cmd.append(pvs[0]) - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, tuple(pvs)) if rc != 0: raise se.PhysDevInitializationError(pvs[0]) @@ -876,7 +889,7 @@ if initialTag: options.extend(("--addtag", initialTag)) cmd = ["vgcreate"] + options + [vgName] + pvs - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, tuple(pvs)) if rc == 0: _lvminfo._invalidatepvs(pvs) _lvminfo._invalidatevgs(vgName) @@ -887,7 +900,7 @@ def removeVG(vgName): cmd = ["vgremove", "-f", vgName] - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs((vgName, ))) pvs = tuple(pvName for pvName, pv in _lvminfo._pvs.iteritems() if not isinstance(pv, Stub) and pv.vg_name == vgName) # PVS needs to be reloaded anyhow: if vg is removed they are staled, @@ -917,7 +930,8 @@ _initpvs(pvs, int(vg.vg_mda_size) / 2 ** 20, force) cmd = ["vgextend", vgName] + pvs - rc, out, err = _lvminfo.cmd(cmd) + devs = tuple(_lvminfo._getVGDevs((vgName, )) + tuple(pvs)) + rc, out, err = _lvminfo.cmd(cmd, devs) if rc == 0: _lvminfo._invalidatepvs(pvs) _lvminfo._invalidatevgs(vgName) @@ -928,7 +942,7 @@ def chkVG(vgName): cmd = ["vgck", vgName] - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs((vgName, ))) if rc != 0: _lvminfo._invalidatevgs(vgName) _lvminfo._invalidatelvs(vgName) @@ -1010,7 +1024,7 @@ if initialTag is not None: cmd.extend(("--addtag", initialTag)) cmd.extend(("--name", lvName, vgName)) - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs((vgName, ))) if rc == 0: _lvminfo._invalidatevgs(vgName) @@ -1053,7 +1067,7 @@ cmd.extend(LVM_NOBACKUP) for lvName in lvNames: cmd.append("%s/%s" % (vgName, lvName)) - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs((vgName, ))) if rc == 0: for lvName in lvNames: # Remove the LV from the cache @@ -1077,7 +1091,7 @@ # Capitalise to use multiples of 1000 (S.I.) instead of 1024. cmd = (op,) + LVM_NOBACKUP cmd += ("--size", "%sm" % (size,), "%s/%s" % (vgName, lvName)) - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs((vgName, ))) if rc == 0: _lvminfo._invalidatevgs(vgName) _lvminfo._invalidatelvs(vgName, lvName) @@ -1124,7 +1138,7 @@ def renameLV(vg, oldlv, newlv): cmd = ("lvrename",) + LVM_NOBACKUP + (vg, oldlv, newlv) - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs((vg, ))) if rc != 0: raise se.LogicalVolumeRenameError("%s %s %s" % (vg, oldlv, newlv)) @@ -1135,7 +1149,7 @@ def refreshLV(vgName, lvName): # If the logical volume is active, reload its metadata. cmd = ['lvchange', '--refresh', "%s/%s" % (vgName, lvName)] - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs((vgName, ))) _lvminfo._invalidatelvs(vgName, lvName) if rc != 0: raise se.LogicalVolumeRefreshError("%s failed" % list2cmdline(cmd)) @@ -1146,7 +1160,7 @@ def addtag(vg, lv, tag): lvname = "%s/%s" % (vg, lv) cmd = ("lvchange",) + LVM_NOBACKUP + ("--addtag", tag) + (lvname,) - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs((vg, ))) _lvminfo._invalidatelvs(vg, lv) if rc != 0: # Fix me: should be se.ChangeLogicalVolumeError but this not exists. @@ -1173,7 +1187,7 @@ cmd.append(lvname) - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs((vg, ))) _lvminfo._invalidatelvs(vg, lv) if rc != 0: raise se.LogicalVolumeReplaceTagError( @@ -1227,7 +1241,7 @@ cmd.extend(("--addtag", tag)) cmd.append(vgName) - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs((vgName, ))) _lvminfo._invalidatevgs(vgName) if rc != 0: raise se.VolumeGroupReplaceTagError( @@ -1238,7 +1252,7 @@ def addVGTag(vgName, tag): _lvminfo._invalidatevgs(vgName) cmd = ["vgchange", "--addtag", tag, vgName] - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs((vgName, ))) if rc != 0: raise se.VolumeGroupAddTagError("Failed adding tag %s to VG %s." % (tag, vgName)) @@ -1247,7 +1261,7 @@ def remVGTag(vgName, tag): _lvminfo._invalidatevgs(vgName) cmd = ["vgchange", "--deltag", tag, vgName] - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs((vgName, ))) if rc != 0: raise se.VolumeGroupRemoveTagError(vgName) @@ -1303,7 +1317,7 @@ lvname = "%s/%s" % (vg, lv) cmd = (("lvchange",) + LVM_NOBACKUP + ("--deltag", deltag) + ("--addtag", addtag) + (lvname,)) - rc, out, err = _lvminfo.cmd(cmd) + rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs((vg, ))) _lvminfo._invalidatelvs(vg, lv) if rc != 0: raise se.LogicalVolumeReplaceTagError("%s/%s" % (vg, lv), -- To view, visit http://gerrit.ovirt.org/17968 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I26f3a7c712b6d7009f5f4e945374b62f18483889 Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Eduardo <[email protected]> _______________________________________________ vdsm-patches mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches
