From 003821957764be2af01cd07009a75d13f1512160 Mon Sep 17 00:00:00 2001 From: David Teigland Date: Fri, 12 Apr 2019 10:55:19 -0500 Subject: tests: add missing-pv --- test/shell/missing-pv.sh | 141 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 test/shell/missing-pv.sh diff --git a/test/shell/missing-pv.sh b/test/shell/missing-pv.sh new file mode 100644 index 000000000..3acc07d36 --- /dev/null +++ b/test/shell/missing-pv.sh @@ -0,0 +1,141 @@ +#!/usr/bin/env bash + +# Copyright (C) 2008-2013,2018 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 + +. lib/inittest + +aux prepare_devs 3 +get_devs + +vgcreate $SHARED $vg "$dev1" "$dev2" "$dev3" + +lvcreate -n $lv1 -L8M --type mirror -m 1 $vg +lvcreate -n $lv2 -L8M --type mirror -m 1 $vg + +vgchange -an $vg + +pvs +vgs +lvs -a -o+devices + +# Fail one leg of each mirror LV. +aux disable_dev "$dev1" + +pvs +vgs +lvs -a -o+devices + +# Cannot do normal activate of either LV with a failed leg. +not lvchange -ay $vg/$lv1 +not lvchange -ay $vg/$lv2 + +# Can activate with partial option. +lvchange -ay --activationmode partial $vg/$lv1 +lvchange -ay --activationmode partial $vg/$lv2 + +pvs +vgs +lvs -a -o+devices + +# Repair lv1 so it no longer uses failed dev. +lvconvert --repair --yes $vg/$lv1 + +# TODO: check that MISSING flag is set in ondisk metadata +# it should have been written by the lvconvert since the +# missing PV is still used by lv2 + +pvs +vgs +lvs -a -o+devices + +# Verify normal activation is possible of lv1 since it's +# not using any failed devs, and partial activation is +# required for lv2 since it's still using the failed dev. +vgchange -an $vg +lvchange -ay $vg/$lv1 +not lvchange -ay $vg/$lv2 +vgchange -an $vg + +aux enable_dev "$dev1" + +pvs +vgs +lvs -a -o+devices + +# TODO: check that lv2 has partial flag, lv1 does not +# (there's no partial reporting option, only attr p.) + +# TODO: check that MISSING flag is still set in ondisk +# metadata since the previously missing dev is still +# used by lv2. + +# The missing pv restrictions still apply even after +# the dev has reappeared since it has the MISSING flag. +not lvchange -ay $vg/$lv2 +not lvcreate -l1 $vg + +# Update old metadata on the previously missing PV. +# This should not clear the MISSING flag because the +# previously missing PV is still used by lv2. +# This would be done by any command that writes +# metadata, e.g. lvcreate, but since we are in a +# state with a missing pv, most commands that write +# metadata are restricted, so use a command that +# explicitly writes/fixes metadata. +vgck --updatemetadata $vg + +pvs +vgs +lvs -a -o+devices + +# TODO: check that MISSING flag is still set in ondisk +# metadata since the previously missing dev is still +# used by lv2. + +# The missing pv restrictions still apply since it +# has the MISSING flag. +not lvchange -ay $vg/$lv2 +not lvcreate -l1 $vg + +lvchange -ay --activationmode partial $vg/$lv2 + +# After repair, no more LVs will be using the previously +# missing PV. +lvconvert --repair --yes $vg/$lv2 + +pvs +vgs +lvs -a -o+devices + +vgchange -an $vg + +# The next write of the metadata will clear the MISSING +# flag in ondisk metadata because the previously missing +# PV is no longer used by any LVs. + +# Run a command to write ondisk metadata, which should clear +# the MISSING flag, options include: +# lvcreate -l1 $vg +# vgck --updatemetadata vg +# vgextend --restoremissing +# vgreduce --removemissing +vgreduce --removemissing $vg + +# TODO: check that the MISSING flag is no longer set +# in the ondisk metadata. + +pvs +vgs +lvs -a -o+devices + +vgchange -an $vg +vgremove -ff $vg + -- cgit v1.2.1