1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
|
#! /bin/sh
# PCP QA Test No. 657
# checks pmdadm functionality
# Requires dmsetup utility to be installed, else the test will
# not run (PMDA will fail to install).
#
# Copyright (c) 2015 Red Hat, Inc. All Rights Reserved.
#
seq=`basename $0`
# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check
echo "QA output created by $seq"
[ $PCP_PLATFORM = linux ] || _notrun "Device Mapper is Linux-specific (dm)"
[ -d $PCP_PMDAS_DIR/dm ] || _notrun "dm PMDA directory is not installed"
[ -x $PCP_PMDAS_DIR/dm/pmdadm ] || _notrun "pcp-pmda-dm package not installed"
grep -qs "without support for dmstats" $PCP_PMDAS_DIR/dm/pmdadm && _notrun "PMDA not built with dmstats support"
which dmsetup >/dev/null 2>&1 || _notrun "dmsetup from device-mapper package is not installed"
root=$tmp.root
DM_SETUP_CACHE="cat $root/dmcache-caches"; export DM_SETUP_CACHE
DM_SETUP_THINPOOL="cat $root/dmthin-pool"; export DM_SETUP_THINPOOL
DM_SETUP_THIN="cat $root/dmthin-thin"; export DM_SETUP_THIN
DM_SETUP_CRYPT="cat $root/dmsetup-crypt"; export DM_SETUP_CRYPT
DM_SETUP_CRYPTSETUP="cat $root/cryptsetup-status"; export DM_SETUP_CRYPTSETUP
DM_SETUP_MULTIPATH="cat $root/multipathd"; export DM_SETUP_MULTIPATH
# don't want Install to possibly restart pmcd via systemctl, as this
# will clobber the environment, ...
#
if ! _service pmlogger stop 2>&1; then _exit 1; fi \
| _filter_pcp_stop
_wait_pmlogger_end || _exit 1
if ! _service pmcd stop 2>&1; then _exit 1; fi \
| _filter_pcp_stop
_wait_pmcd_end || _exit 1
if [ "$PCPQA_SYSTEMD" = x -o "${PCPQA_SYSTEMD-x}" != x ]
then
# $PCPQA_SYSTEMD is already set ...
save_pcpqa_systemd="$PCPQA_SYSTEMD"
restore_pcpqa_systemd=true
else
restore_pcpqa_systemd=false
fi
PCPQA_SYSTEMD=no; export PCPQA_SYSTEMD
# helper functions
_install_pmda()
{
# install the PMDA
# Note: warnings from dmstats install are optional, so filter 'em out
# Note: VDO stats are exercised via separate tests, so filter 'em out
#
cd $PCP_PMDAS_DIR/dm
$sudo ./Remove < /dev/null >/dev/null 2>&1
$sudo ./Install < /dev/null >$tmp.out 2>&1
cat $tmp.out \
| _filter_pmda_install \
| sed \
-e '/.*pmcd.*/d' \
-e '/.*pmlogger.*/d' \
-e '/^NOTE:.*/d' \
-e '/Latest.*/d' \
-e '/Duplicate.*/d' \
-e '/^See also.*/d' \
-e '/^Check vdo metrics.*/d' \
-e '/^To use the dmstats metrics.*/d' \
-e '/^Check dmstats metrics/s/[0-9][0-9]* warnings, //' \
-e 's/[0-9]* values/X values/' \
| tr -s '\n'
}
_remove_pmda()
{
cd $PCP_PMDAS_DIR/dm
$sudo ./Remove < /dev/null > /dev/null 2>&1
}
_cleanup()
{
if $restore_pcpqa_systemd
then
PCPQA_SYSTEMD="$save_pcpqa_systemd"; export PCPQA_SYSTEMD
else
unset PCPQA_SYSTEMD
fi
_restore_pmda_install dm
_service pmcd restart 2>&1 | _filter_pcp_restart
_wait_for_pmcd
_restore_auto_restart pmcd
_service pmlogger restart 2>&1 | _filter_pcp_restart
_wait_for_pmlogger
$sudo rm -fr $root
$sudo rm -fr $tmp.*.dir
$sudo rm -f $tmp.*
exit $status
}
status=1 # failure is the default!
trap "_cleanup" 0 1 2 3 15
_stop_auto_restart pmcd
$sudo rm -fr $root
$sudo rm -fr $tmp.*.dir
touch $seq_full
# real QA test starts here
cd $here
echo
echo "=== Setting up QA fakeroot testing data ==="
$sudo rm -fr $root
mkdir $root || _fail "root in use when processing fakeroot"
cd $root
echo 'zz_cache: 0 1677721600 cache 8 10162/262144 128 39839/3276800 1087840 821795 116320 2057235 0 39835 0 1 writeback 2 migration_threshold 2048 mq 10 random_threshold 4 sequential_threshold 0 discard_promote_adjustment 1 read_promote_adjustment 0 write_promote_adjustment 0' > $root/dmcache-caches
echo 'yy_pool: 0 409600 thin-pool 0 13/65536 0/3200 - rw no_discard_passdown queue_if_no_space' > $root/dmthin-pool
echo 'vg_1-lv3: 0 8388608 thin 7000704 8388607
vg_1-lv2: 0 8388608 thin 6832768 8388607' > $root/dmthin-thin
echo 'luks-4456fe89-d09e-416f-8721-bedb66abda85: 0 996853760 crypt' > $root/dmsetup-crypt
echo '/dev/mapper/luks-4456fe89-d09e-416f-8721-bedb66abda85 is disabled and is not in use.
type: LUKS2
cipher: aes-xts-plain64
keysize: 512 [bits]
key location: keyring
device: /dev/nvme0n1p3
sector size: 512 [bytes]
offset: 32768 [512-byte units] (16777216 [bytes])
size: 996853760 [512-byte units] (510389125120 [bytes])
mode: read/write
flags: discards' > $root/cryptsetup-status
cat << 'MULTIPATHD_OUTPUT' > $root/multipathd
mpatha (3600c0ff000123456789012345000000) dm-1 HITACHI,DF400F
size=500G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| |- 1:0:0:1 sda 8:0 active ready running
| |- 2:0:0:1 sdc 8:32 active ready running
| |- 3:0:0:1 sde 8:64 active ready running
| `- 4:0:0:1 sdg 8:96 active ready running
`-+- policy='round-robin 0' prio=10 status=enabled
|- 1:0:1:1 sdb 8:16 active ready running
|- 2:0:1:1 sdd 8:48 active ready running
|- 3:0:1:1 sdf 8:80 active ready running
`- 4:0:1:1 sdh 8:112 active ready running
mpathb (36005076303ffc56200000000000010aa) dm-4 Pure Storage,FlashArray
size=1.5T features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=100 status=active
| |- 5:0:0:1 sdi 8:128 active ready running
| `- 6:0:0:1 sdk 8:160 active ready running
`-+- policy='service-time 0' prio=10 status=enabled
|- 5:0:1:1 sdj 8:144 failed faulty detached
`- 6:0:1:1 sdl 8:176 active ready running"
MULTIPATHD_OUTPUT
cd $here
echo
echo "=== Installing Device Mapper PMDA ==="
_prepare_pmda_install dm || _exit 1
_install_pmda
echo
echo "=== Check dm-cache metrics ==="
pminfo -dfmtT dmcache
echo
echo "=== Check dm-thin metrics for thin pool metrics ==="
pminfo -dfmtT dmthin.pool
echo
echo "=== Check dm-thin metrics for thin vol metrics ==="
pminfo -dfmtT dmthin.vol
echo
echo "=== Check dm-crypt metrics for crypt metrics ==="
pminfo -dfmtT dmcrypt
echo
echo "=== Check dm-multipath metrics ==="
pminfo -dfmtT dmmultipath
# cleanup
_remove_pmda
status=0
exit
|