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

Reply via email to