2017-07-02 22:38:32 +03:00
#!/usr/bin/env bash
2018-12-17 21:24:37 +03:00
# Copyright (C) 2008,2018 Red Hat, Inc. All rights reserved.
2010-04-14 17:51:58 +04:00
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions
# of the GNU General Public License v.2.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
2016-01-21 13:49:46 +03:00
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2010-04-14 17:51:58 +04:00
2018-05-30 20:55:49 +03:00
2016-02-23 01:13:42 +03:00
2014-06-06 19:40:04 +04:00
. lib/inittest
2010-04-14 17:51:58 +04:00
2011-01-05 03:16:18 +03:00
aux prepare_vg 6
2023-07-15 11:39:56 +03:00
aux lvmconf 'global/support_mirrored_mirror_log = 1' \
'allocation/maximise_cling = 0' \
2015-04-08 23:44:16 +03:00
'allocation/mirror_logs_require_separate_pvs = 1'
2010-04-14 17:51:58 +04:00
2011-01-11 20:05:08 +03:00
# 3-way, disk log
2010-04-14 17:51:58 +04:00
# multiple failures, full replace
2013-08-08 00:48:31 +04:00
lvcreate -aey --mirrorlog disk --type mirror -m 2 --ignoremonitoring --nosync -L 1 -n 3way $vg " $dev1 " " $dev2 " " $dev3 " " $dev4 " :0-1
2012-03-16 17:00:05 +04:00
aux disable_dev " $dev1 " " $dev2 "
2013-05-31 23:11:51 +04:00
lvconvert -y --repair $vg /3way 2>& 1 | tee 3way.out
2012-03-16 17:00:05 +04:00
lvs -a -o +devices $vg | not grep unknown
2010-04-14 17:51:58 +04:00
not grep "WARNING: Failed" 3way.out
vgreduce --removemissing $vg
check mirror $vg 3way
2012-03-16 17:00:05 +04:00
aux enable_dev " $dev1 " " $dev2 "
2013-05-31 23:11:51 +04:00
vgremove -ff $vg
2010-04-14 17:51:58 +04:00
2011-01-11 20:05:08 +03:00
# 3-way, disk log
2010-04-14 17:51:58 +04:00
# multiple failures, partial replace
2018-05-30 20:55:49 +03:00
vgcreate $SHARED $vg " $dev1 " " $dev2 " " $dev3 " " $dev4 " " $dev5 "
2013-08-08 00:48:31 +04:00
lvcreate -aey --mirrorlog disk --type mirror -m 2 --ignoremonitoring --nosync -L 1 -n 3way $vg " $dev1 " " $dev2 " " $dev3 " " $dev4 "
2012-03-16 17:00:05 +04:00
aux disable_dev " $dev1 " " $dev2 "
2013-05-31 23:11:51 +04:00
lvconvert -y --repair $vg /3way 2>& 1 | tee 3way.out
2010-04-14 17:51:58 +04:00
grep "WARNING: Failed" 3way.out
2012-03-16 17:00:05 +04:00
lvs -a -o +devices $vg | not grep unknown
2010-04-14 17:51:58 +04:00
vgreduce --removemissing $vg
check mirror $vg 3way
2012-03-16 17:00:05 +04:00
aux enable_dev " $dev1 " " $dev2 "
2013-05-31 23:11:51 +04:00
vgremove -ff $vg
2010-04-14 17:51:58 +04:00
2018-05-30 20:55:49 +03:00
vgcreate $SHARED $vg " $dev1 " " $dev2 " " $dev3 "
2013-08-08 00:48:31 +04:00
lvcreate -aey --mirrorlog disk --type mirror -m 1 --ignoremonitoring --nosync -l 1 -n 2way $vg " $dev1 " " $dev2 " " $dev3 "
2012-03-16 17:00:05 +04:00
aux disable_dev " $dev1 "
2013-05-31 23:11:51 +04:00
lvconvert -y --repair $vg /2way 2>& 1 | tee 2way.out
2010-04-14 17:51:58 +04:00
grep "WARNING: Failed" 2way.out
2012-03-16 17:00:05 +04:00
lvs -a -o +devices $vg | not grep unknown
2010-04-14 17:51:58 +04:00
vgreduce --removemissing $vg
check mirror $vg 2way
2012-03-16 17:00:05 +04:00
aux enable_dev " $dev1 " " $dev2 "
2013-05-31 23:11:51 +04:00
vgremove -ff $vg
2010-04-14 17:51:58 +04:00
2014-05-21 00:50:52 +04:00
# FIXME - exclusive activation for mirrors should work here
# conversion of inactive cluster logs is also unsupported
test -e LOCAL_CLVMD && exit 0
2010-04-14 17:51:58 +04:00
# Test repair of inactive mirror with log failure
2013-05-31 23:11:51 +04:00
# Replacement should fail, but convert should succeed (switch to corelog)
2018-05-30 20:55:49 +03:00
vgcreate $SHARED $vg " $dev1 " " $dev2 " " $dev3 " " $dev4 "
2014-05-21 00:50:52 +04:00
lvcreate -aey --type mirror -m 2 --ignoremonitoring -l 2 -n mirror2 $vg " $dev1 " " $dev2 " " $dev3 " " $dev4 " :0
2010-04-14 17:51:58 +04:00
vgchange -a n $vg
2012-03-16 17:00:05 +04:00
pvremove -ff -y " $dev4 "
2013-05-31 23:11:51 +04:00
lvconvert -y --repair $vg /mirror2
2010-04-14 17:51:58 +04:00
check mirror $vg mirror2
2012-03-16 17:00:05 +04:00
vgs $vg
2013-05-31 23:11:51 +04:00
vgremove -ff $vg
2018-12-18 12:55:35 +03:00
if aux kernel_at_least 3 0 0; then
# 2-way, mirrored log
# Double log failure, full replace
vgcreate $SHARED $vg " $dev1 " " $dev2 " " $dev3 " " $dev4 " " $dev5 " " $dev6 "
lvcreate -aey --mirrorlog mirrored --type mirror -m 1 --ignoremonitoring --nosync -L 1 -n 2way $vg \
" $dev1 " " $dev2 " " $dev3 " :0 " $dev4 " :0
aux disable_dev " $dev3 " " $dev4 "
lvconvert -y --repair $vg /2way 2>& 1 | tee 2way.out
lvs -a -o +devices $vg | not grep unknown
not grep "WARNING: Failed" 2way.out
vgreduce --removemissing $vg
check mirror $vg 2way
aux enable_dev " $dev3 " " $dev4 "
vgremove -ff $vg
fi
# 3-way, mirrored log
# Single log failure, replace
vgcreate $SHARED $vg " $dev1 " " $dev2 " " $dev3 " " $dev4 " " $dev5 " " $dev6 "
lvcreate -aey --mirrorlog mirrored --type mirror -m 2 --ignoremonitoring --nosync -L 1 -n 3way $vg \
" $dev1 " " $dev2 " " $dev3 " " $dev4 " :0 " $dev5 " :0
aux disable_dev " $dev4 "
lvconvert -y --repair $vg /3way 2>& 1 | tee 3way.out
lvs -a -o +devices $vg | not grep unknown
not grep "WARNING: Failed" 3way.out
vgreduce --removemissing $vg
check mirror $vg 3way
aux enable_dev " $dev4 "
vgremove -ff $vg