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

vpodzime installerbot-noreply at redhat.com
Fri Jun 12 13:48:51 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 | 21 +++++++++++++++++++--
 python-blivet.spec       |  2 +-
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/blivet/devicelibs/lvm.py b/blivet/devicelibs/lvm.py
index 57aa740..8b7dfa1 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,31 @@ 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)
             if pool_name == internal_lv.lvname:
                 return lv
         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
+        # pools have internal data and metadata LVs
+        try:
+            data_lv_name = blockdev.lvm.data_lv_name(vg_name, lv.lvname)
+            if data_lv_name == internal_lv.lvname:
+                return lv
+        except blockdev.LVMError:
+            # cannot determine, just go on
+            pass
+        try:
+            metadata_lv_name = blockdev.lvm.metadata_lv_name(vg_name, lv.lvname)
+            if metadata_lv_name == internal_lv.lvname:
+                return lv
+        except blockdev.LVMError:
+            # cannot determine, just go on
+            pass
 
     return None
diff --git a/python-blivet.spec b/python-blivet.spec
index 1576c76..3ffdd88 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/a06fa1a12952cd31b55ac1ba135812b2c5c119ed


More information about the anaconda-patches mailing list