#!/bin/sh
# Copyright (C) 2008 Red Hat, Inc. All rights reserved.
#
# 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,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

SKIP_WITH_LVMLOCKD=1

. lib/inittest

aux prepare_vg 4
aux lvmconf 'allocation/maximise_cling = 0' \
	    'allocation/mirror_logs_require_separate_pvs = 1'

# Clean-up and create a 2-way mirror, where the the
# leg devices are always on $dev[12] and the log
# is always on $dev3.  ($dev4 behaves as a spare)
cleanup_() {
	vgreduce --removemissing $vg
	for d in "$@"; do aux enable_dev "$d"; done
	for d in "$@"; do vgextend $vg "$d"; done
	lvremove -ff $vg/mirror
	lvcreate -aey --type mirror -m 1 --ignoremonitoring -l 2 -n mirror $vg "$dev1" "$dev2" "$dev3:0"
}

repair_() {
	lvconvert --repair --use-policies --config "$1" $vg/mirror
}

lvcreate -aey --type mirror -m 1 --ignoremonitoring -l 2 -n mirror $vg "$dev1" "$dev2" "$dev3:0"
lvchange -a n $vg/mirror

# Fail a leg of a mirror.
aux disable_dev "$dev1"
lvchange --partial -aey $vg/mirror
repair_ 'activation { mirror_image_fault_policy = "remove" }'
check linear $vg mirror
cleanup_ "$dev1"

# Fail a leg of a mirror.
# Expected result: Mirror (leg replaced, should retain log)
aux disable_dev "$dev1"
repair_ 'activation { mirror_image_fault_policy = "replace" mirror_log_fault_policy = "remove" }'
check mirror $vg mirror
check active $vg mirror_mlog
cleanup_ "$dev1"

# Fail a leg of a mirror.
# Expected result: Mirror (leg replaced)
aux disable_dev "$dev1"
repair_ 'activation { mirror_image_fault_policy = "replace" }'
check mirror $vg mirror
check active $vg mirror_mlog
cleanup_ "$dev1"

# Fail a leg of a mirror (use old name for policy specification)
# Expected result: Mirror (leg replaced)
aux disable_dev "$dev1"
repair_ 'activation { mirror_image_fault_policy = "replace" }'
check mirror $vg mirror
check active $vg mirror_mlog
not pvdisplay $vg
cleanup_ "$dev1"

# Fail a leg of a mirror w/ no available spare
# Expected result: linear
#                  (or 2-way with leg/log overlap if alloc anywhere)
aux disable_dev "$dev2" "$dev4"
repair_ 'activation { mirror_image_fault_policy = "replace" }'
check mirror $vg mirror
check lv_not_exists $vg mirror_mlog
cleanup_ "$dev2" "$dev4"

# Fail the log device of a mirror w/ no available spare
# Expected result: mirror w/ corelog
aux disable_dev "$dev3" "$dev4"
repair_ 'activation { mirror_image_fault_policy = "replace" }' $vg/mirror
check mirror $vg mirror
check lv_not_exists $vg mirror_mlog
cleanup_ "$dev3" "$dev4"

# Fail the log device with a remove policy
# Expected result: mirror w/ corelog
lvchange -aey $vg/mirror
aux disable_dev "$dev3" "$dev4"
repair_ 'activation { mirror_log_fault_policy = "remove" }'
check mirror $vg mirror core
check lv_not_exists $vg mirror_mlog
cleanup_ "$dev3" "$dev4"

vgremove -ff $vg
