diff options
author | Peter Rajnoha <prajnoha@redhat.com> | 2022-10-12 14:41:58 +0200 |
---|---|---|
committer | Peter Rajnoha <prajnoha@redhat.com> | 2022-10-12 15:14:59 +0200 |
commit | 908555459f0abbcda687882439589209528e1dc0 (patch) | |
tree | d7b7d878fab9fbe5c050682924b013e1631fc45e /tools | |
parent | f6f2737015746b1b6c7fbd0d297a4596c584749b (diff) | |
download | lvm2-908555459f0abbcda687882439589209528e1dc0.tar.gz |
toollib: do not process just created historical LV
When executing process_each_lv_in_vg, we process live LVs first and
after that, we process any historical LVs. In case we have just removed
an LV, which also means we have just made it "historical" and so it
appears as fresh item in vg->historical_lvs list, we have to skip it
when we get to processing historical LVs inside the same process_each_lv_in_vg
call.
The simplest approach here, without introducing another LV list, is to
simply mark such historical LVs as "fresh" directly in struct
historical_logical_volume when we have just removed the original LV
and created the historical LV for it. Then, we just need to check the
flag when processing historical LVs and skip it if it is "fresh".
When we read historical LVs out of metadata, they are marked as
"not fresh" and so they can be processed as usual.
This was mainly an issue in conjuction with -S|--select use:
# lvmconfig --type diff
metadata {
record_lvs_history=1
}
(In this example, a thin pool with lvol1 thin LV and lvol2 and lvol3 snapshots.)
# lvs -H vg -o name,pool_lv,full_ancestors,full_descendants
LV Pool FAncestors FDescendants
lvol1 pool lvol2,lvol3
lvol2 pool lvol1 lvol3
lvol3 pool lvol2,lvol1
pool
# lvremove -S 'name=lvol2'
Logical volume "lvol2" successfully removed.
Historical logical volume "lvol2" successfully removed.
...here, the historical LV lvol2 should not have been removed because
we have just removed its original non-historical lvol2 and the fresh
historical lvol2 must not be included in the same processing spree.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/toollib.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/tools/toollib.c b/tools/toollib.c index e45afb6ee..5305e811b 100644 --- a/tools/toollib.c +++ b/tools/toollib.c @@ -3450,6 +3450,9 @@ int process_each_lv_in_vg(struct cmd_context *cmd, struct volume_group *vg, goto_out; } + if (glvl->glv->historical->fresh) + continue; + process_lv = process_all; if (lvargs_supplied && |