]> git.proxmox.com Git - mirror_zfs.git/blob - tests/zfs-tests/tests/functional/mmp/mmp_active_import.ksh
MMP interval and fail_intervals in uberblock
[mirror_zfs.git] / tests / zfs-tests / tests / functional / mmp / mmp_active_import.ksh
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 # Under no circumstances when multihost is active, should an active pool
23 # with one hostid be importable by a host with a different hostid.
24 #
25 # STRATEGY:
26 # 1. Simulate an active pool on another host with ztest.
27 # 2. Verify 'zpool import' reports an active pool.
28 # 3. Verify 'zpool import [-f] $MMP_POOL' cannot import the pool.
29 # 4. Kill ztest to make pool eligible for import.
30 # 5. Verify 'zpool import' fails with the expected error message.
31 # 6. Verify 'zpool import $MMP_POOL' fails with the expected message.
32 # 7. Verify 'zpool import -f $MMP_POOL' can now import the pool.
33 # 8. Verify pool may be exported/imported without -f argument.
34 #
35
36 . $STF_SUITE/include/libtest.shlib
37 . $STF_SUITE/tests/functional/mmp/mmp.cfg
38 . $STF_SUITE/tests/functional/mmp/mmp.kshlib
39
40 verify_runnable "both"
41
42 function cleanup
43 {
44 mmp_pool_destroy $MMP_POOL $MMP_DIR
45 log_must mmp_clear_hostid
46 ZTESTPID=$(pgrep ztest)
47 if [ -n "$ZTESTPID" ]; then
48 for pid in $ZTESTPID; do
49 log_must kill -9 $pid
50 done
51 else
52 # if ztest not running and log present, ztest crashed
53 if [ -f $MMP_ZTEST_LOG ]; then
54 log_note "ztest appears to have crashed. Tail of log:"
55 tail -n 50 $MMP_ZTEST_LOG
56 fi
57 fi
58 }
59
60 log_assert "multihost=on|off active pool activity checks"
61 log_onexit cleanup
62
63 # 1. Simulate an active pool on another host with ztest.
64 mmp_pool_destroy $MMP_POOL $MMP_DIR
65 mmp_pool_create $MMP_POOL $MMP_DIR
66
67 # 2. Verify 'zpool import' reports an active pool.
68 log_must mmp_set_hostid $HOSTID2
69 log_must is_pool_imported $MMP_POOL "-d $MMP_DIR"
70
71 # 3. Verify 'zpool import [-f] $MMP_POOL' cannot import the pool.
72 MMP_IMPORTED_MSG="Cannot import '$MMP_POOL': pool is imported"
73
74 log_must try_pool_import $MMP_POOL "-d $MMP_DIR" "$MMP_IMPORTED_MSG"
75 for i in {1..10}; do
76 log_must try_pool_import $MMP_POOL "-f -d $MMP_DIR" "$MMP_IMPORTED_MSG"
77 done
78
79 log_must try_pool_import $MMP_POOL "-c ${MMP_CACHE}.stale" "$MMP_IMPORTED_MSG"
80
81 for i in {1..10}; do
82 log_must try_pool_import $MMP_POOL "-f -c ${MMP_CACHE}.stale" \
83 "$MMP_IMPORTED_MSG"
84 done
85
86 # 4. Kill ztest to make pool eligible for import. Poll with 'zpool status'.
87 ZTESTPID=$(pgrep ztest)
88 if [ -n "$ZTESTPID" ]; then
89 log_must kill -9 $ZTESTPID
90 fi
91 log_must wait_pool_imported $MMP_POOL "-d $MMP_DIR"
92 if [ -f $MMP_ZTEST_LOG ]; then
93 log_must rm $MMP_ZTEST_LOG
94 fi
95
96 # 5. Verify 'zpool import' fails with the expected error message, when
97 # - hostid=0: - configuration error
98 # - hostid=matches - safe to import the pool
99 # - hostid=different - previously imported on a different system
100 #
101 log_must mmp_clear_hostid
102 MMP_IMPORTED_MSG="Set a unique system hostid"
103 log_must check_pool_import $MMP_POOL "-d $MMP_DIR" "action" "$MMP_IMPORTED_MSG"
104
105 log_must mmp_set_hostid $HOSTID1
106 MMP_IMPORTED_MSG="The pool can be imported"
107 log_must check_pool_import $MMP_POOL "-d $MMP_DIR" "action" "$MMP_IMPORTED_MSG"
108
109 log_must mmp_clear_hostid
110 log_must mmp_set_hostid $HOSTID2
111 MMP_IMPORTED_MSG="The pool was last accessed by another system."
112 log_must check_pool_import $MMP_POOL "-d $MMP_DIR" "status" "$MMP_IMPORTED_MSG"
113
114 # 6. Verify 'zpool import $MMP_POOL' fails with the expected message.
115 MMP_IMPORTED_MSG="pool was previously in use from another system."
116 log_must try_pool_import $MMP_POOL "-d $MMP_DIR" "$MMP_IMPORTED_MSG"
117
118 # 7. Verify 'zpool import -f $MMP_POOL' can now import the pool.
119 log_must import_activity_check $MMP_POOL "-f -d $MMP_DIR"
120
121 # 8 Verify pool may be exported/imported without -f argument.
122 log_must zpool export $MMP_POOL
123 log_must import_no_activity_check $MMP_POOL "-d $MMP_DIR"
124
125 log_pass "multihost=on|off active pool activity checks passed"