[master 9/9] Use relations between LVs to determine parent LV

vpodzime installerbot-noreply at redhat.com
Thu Jun 18 19:51:16 UTC 2015


From: Vratislav Podzimek <vpodzime at redhat.com>

Thin/cache pools have internal data/metadata LVs the name of which can be
queried. Let's use this functionality to help determining the parent LV if name
matching fails.
---
 blivet/devicelibs/lvm.py | 26 +++++++++++++++++++++++---
 python-blivet.spec       |  2 +-
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/blivet/devicelibs/lvm.py b/blivet/devicelibs/lvm.py
index 57aa740..ec4ca1e 100644
--- a/blivet/devicelibs/lvm.py
+++ b/blivet/devicelibs/lvm.py
@@ -126,6 +126,7 @@ def determine_parent_lv(vg_name, internal_lv, lvs):
     :type lvs: :class:`~.devices.lvm.LMVLogicalVolumeDevice`
 
     """
+    # try name matching first (fast, cheap, often works)
     for lv in lvs:
         if internal_lv.lvname == lv.lvname:
             # skip the internal_lv itself
@@ -136,15 +137,34 @@ def determine_parent_lv(vg_name, internal_lv, lvs):
         if re.match(lv.lvname+internal_lv.name_suffix+"$", internal_lv.lvname):
             return lv
 
+    # now try checking relations between LVs
+    for lv in lvs:
         # cache pools are internal LVs of cached LVs
         try:
             pool_name = blockdev.lvm.cache_pool_name(vg_name, lv.lvname)
+        except blockdev.LVMError:
+            # cannot determine, just go on
+            pass
+        else:
             if pool_name == internal_lv.lvname:
                 return lv
+
+        # pools have internal data and metadata LVs
+        try:
+            data_lv_name = blockdev.lvm.data_lv_name(vg_name, lv.lvname)
         except blockdev.LVMError:
-            # doesn't have a pool
+            # cannot determine, just go on
             pass
-
-        # TODO: use 'data_lv' and 'metadata_lv' on appropriate internal LVs
+        else:
+            if data_lv_name == internal_lv.lvname:
+                return lv
+        try:
+            metadata_lv_name = blockdev.lvm.metadata_lv_name(vg_name, lv.lvname)
+        except blockdev.LVMError:
+            # cannot determine, just go on
+            pass
+        else:
+            if metadata_lv_name == internal_lv.lvname:
+                return lv
 
     return None
diff --git a/python-blivet.spec b/python-blivet.spec
index f40bc21..ec39a14 100644
--- a/python-blivet.spec
+++ b/python-blivet.spec
@@ -18,7 +18,7 @@ Source0: http://github.com/dwlehman/blivet/archive/%{realname}-%{version}.tar.gz
 %define pypartedver 3.10.4
 %define e2fsver 1.41.0
 %define utillinuxver 2.15.1
-%define libblockdevver 1.0
+%define libblockdevver 1.1
 
 BuildArch: noarch
 BuildRequires: gettext


-- 
To view this commit on github, visit https://github.com/rhinstaller/blivet/commit/7f84fa49e146d3a4c0605b022e3572dacc1db39b


More information about the anaconda-patches mailing list