#!/bin/sh
# Copyright (C) 2016 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
SKIP_WITH_LVMPOLLD=1

. lib/inittest

aux prepare_devs 2

# PV_EXT_USED flag
MARKED_AS_USED_MSG="is used by a VG but its metadata is missing"

######################################
### CHECK PV WITH 0 METADATA AREAS ###
######################################

pvcreate -ff -y --metadatacopies 0 "$dev1"
pvcreate -ff -y --metadatacopies 1 "$dev2"

# $dev1 and $dev2 not in any VG - pv_in_use field should be blank
check pv_field "$dev1" pv_in_use ""
check pv_field "$dev2" pv_in_use ""

# $dev1 and $dev now in a VG - pv_in_use should display "used"
vgcreate $vg1 "$dev1" "$dev2"
check pv_field "$dev1" pv_in_use "used"
check pv_field "$dev2" pv_in_use "used"

# disable $dev2 and dev1 with 0 MDAs remains, but still
# marked as used, so pvcreate/vgcreate/pvremove should fail
aux disable_dev "$dev2"
pvscan --cache

check pv_field "$dev1" pv_in_use "used"
not pvcreate "$dev1" 2>err
cat err
grep "$MARKED_AS_USED_MSG" err
not pvchange -u "$dev1" 2>err
grep "$MARKED_AS_USED_MSG" err
not vgcreate $vg2 "$dev1" 2>err
grep "$MARKED_AS_USED" err
not pvremove "$dev1" 2>err
grep "$MARKED_AS_USED_MSG" err

# save PV signature from dev1 for reuse later on in this
# test so we don't need to initialize all the VG stuff again
dd if="$dev1" of=dev1_backup bs=1M

# pvcreate and pvremove can be forced even if the PV is marked as used
pvremove -ff -y "$dev1"
dd if=dev1_backup of="$dev1" bs=1M
pvcreate -ff -y "$dev1"
dd if=dev1_backup of="$dev1" bs=1M

# prepare a VG with $dev1 and $dev both having 1 MDA
aux enable_dev "$dev2"
vgremove -ff $vg1
pvcreate --metadatacopies 1 "$dev1"
vgcreate $vg1 "$dev1" "$dev2"

# disable $dev1, then repair the VG - $dev1 is removed from VG
aux disable_dev "$dev1"
vgreduce --removemissing $vg1
# now, enable $dev1, automatic repair will happen on pvs call
# (or any other lvm command that does vg_read with repair inside)
aux enable_dev "$dev1"

# FIXME: once persistent cache does not cause races with timestamps
#        causing LVM tools to not see the VG inconsistency and once
#        VG repair is always done, delete this line which removes
#        persistent .cache as a workaround
rm -f $TESTDIR/etc/.cache

vgck $vg1
# check $dev1 does not contain the PV_EXT_FLAG anymore - it
# should be removed as part of the repaid during vg_read since
# $dev1 is not part of $vg1 anymore
check pv_field "$dev1" pv_in_use ""

#############################################
### CHECK PV WITH DISABLED METADATA AREAS ###
#############################################

pvcreate -ff -y --metadatacopies 1 "$dev1"
pvcreate -ff -y --metadatacopies 1 "$dev2"

# $dev1 and $dev2 not in any VG - pv_in_use field should be blank
check pv_field "$dev1" pv_in_use ""
check pv_field "$dev2" pv_in_use ""

# $dev1 and $dev now in a VG - pv_in_use should display "used"
vgcreate $vg1 "$dev1" "$dev2"
check pv_field "$dev1" pv_in_use "used"
check pv_field "$dev2" pv_in_use "used"

pvchange --metadataignore y "$dev1"
aux disable_dev "$dev2"
pvscan --cache

check pv_field "$dev1" pv_in_use "used"
not pvcreate "$dev1" 2>err
grep "$MARKED_AS_USED_MSG" err
not pvchange -u "$dev1" 2>err
grep "$MARKED_AS_USED_MSG" err
not vgcreate $vg2 "$dev1" 2>err
grep "$MARKED_AS_USED" err
not pvremove "$dev1" 2>err
grep "$MARKED_AS_USED_MSG" err

# save PV signature from dev1 for reuse later on in this
# test so we don't need to initialize all the VG stuff again
dd if="$dev1" of=dev1_backup bs=1M

# pvcreate and pvremove can be forced even if the PV is marked as used
pvremove -ff -y "$dev1"
dd if=dev1_backup of="$dev1" bs=1M
pvcreate -ff -y "$dev1"
dd if=dev1_backup of="$dev1" bs=1M

# prepare a VG with $dev1 and $dev both having 1 MDA
aux enable_dev "$dev2"
vgremove -ff $vg1
pvcreate --metadatacopies 1 "$dev1"
vgcreate $vg1 "$dev1" "$dev2"

# disable $dev1, then repair the VG - $dev1 is removed from VG
aux disable_dev "$dev1"
vgreduce --removemissing $vg1
# now, enable $dev1, automatic repair will happen on pvs call
# (or any other lvm command that does vg_read with repair inside)
aux enable_dev "$dev1"

# FIXME: once persistent cache does not cause races with timestamps
#        causing LVM tools to not see the VG inconsistency and once
#        VG repair is always done, delete this line which removes
#        persistent .cache as a workaround
rm -f $TESTDIR/etc/.cache

vgck $vg1
# check $dev1 does not contain the PV_EXT_FLAG anymore - it
# should be removed as part of the repaid during vg_read since
# $dev1 is not part of $vg1 anymore
check pv_field "$dev1" pv_in_use ""

###########################
# OTHER PV-RELATED CHECKS #
###########################

# vgcfgrestore should also set PV_EXT_FLAG on PVs where VG is restored
vgcfgbackup -f vg_backup $vg1
check pv_field "$dev2" pv_in_use "used"
vgremove -ff $vg1
check pv_field "$dev2" pv_in_use ""
vgcfgrestore -f vg_backup $vg1
check pv_field "$dev2" pv_in_use "used"
