From e682124a4473436379f23c1ab9396dc70b921655 Mon Sep 17 00:00:00 2001 From: Vratislav Podzimek Date: Mon, 8 Jun 2015 16:11:30 +0200 Subject: [PATCH] Use relations between LVs to determine parent LV 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 57aa740d0..8b7dfa174 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 1576c76d0..3ffdd88be 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