]>
Commit | Line | Data |
---|---|---|
ffb195c2 OF |
1 | #!/bin/ksh -p |
2 | # | |
3 | # CDDL HEADER START | |
4 | # | |
5 | # This file and its contents are supplied under the terms of the | |
6 | # Common Development and Distribution License ("CDDL"), version 1.0. | |
7 | # You may only use this file in accordance with the terms of version | |
8 | # 1.0 of the CDDL. | |
9 | # | |
10 | # A full copy of the text of the CDDL should have accompanied this | |
11 | # source. A copy of the CDDL is also available via the Internet at | |
12 | # http://www.illumos.org/license/CDDL. | |
13 | # | |
14 | # CDDL HEADER END | |
15 | # | |
16 | ||
17 | # | |
18 | # Copyright (c) 2017 by Lawrence Livermore National Security, LLC. | |
19 | # | |
20 | ||
21 | # DESCRIPTION: | |
22 | # Verify MMP behaves correctly when failing to write uberblocks. | |
23 | # | |
24 | # STRATEGY: | |
25 | # 1. Create a mirrored pool and enable multihost | |
26 | # 2. Inject a 50% failure rate when writing uberblocks to a device | |
27 | # 3. Delay briefly for additional MMP writes to complete | |
28 | # 4. Verify the failed uberblock writes did not prevent MMP updates | |
29 | # | |
30 | ||
31 | . $STF_SUITE/include/libtest.shlib | |
32 | . $STF_SUITE/tests/functional/mmp/mmp.cfg | |
33 | . $STF_SUITE/tests/functional/mmp/mmp.kshlib | |
34 | ||
35 | verify_runnable "both" | |
36 | ||
37 | function cleanup | |
38 | { | |
39 | zinject -c all | |
40 | default_cleanup_noexit | |
41 | log_must mmp_clear_hostid | |
42 | } | |
43 | ||
44 | log_assert "mmp behaves correctly when failing to write uberblocks." | |
45 | log_onexit cleanup | |
46 | ||
47 | log_must mmp_set_hostid $HOSTID1 | |
48 | default_mirror_setup_noexit $DISKS | |
49 | log_must zpool set multihost=on $TESTPOOL | |
50 | log_must zinject -d ${DISK[0]} -e io -T write -f 50 $TESTPOOL -L uber | |
af0f8428 | 51 | clear_mmp_history |
d2160d05 | 52 | uber_count=$(count_mmp_writes $TESTPOOL 3) |
ffb195c2 | 53 | |
af0f8428 | 54 | if [ $uber_count -eq 0 ]; then |
ffb195c2 OF |
55 | log_fail "mmp writes did not occur when uberblock IO errors injected" |
56 | fi | |
57 | ||
58 | log_pass "mmp correctly wrote uberblocks when IO errors injected" |