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
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.
18 # Copyright (c) 2017 by Lawrence Livermore National Security, LLC.
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.
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.
36 .
$STF_SUITE/include
/libtest.shlib
37 .
$STF_SUITE/tests
/functional
/mmp
/mmp.cfg
38 .
$STF_SUITE/tests
/functional
/mmp
/mmp.kshlib
40 verify_runnable
"both"
44 mmp_pool_destroy
$MMP_DIR $MMP_POOL
45 log_must set_tunable64 zfs_multihost_interval
$MMP_INTERVAL_DEFAULT
46 log_must mmp_clear_hostid
49 log_assert
"multihost=on|off active pool activity checks"
52 # 1. Simulate an active pool on another host with ztest.
53 mmp_pool_destroy
$MMP_POOL $MMP_DIR
54 mmp_pool_create
$MMP_POOL $MMP_DIR
56 # 2. Verify 'zpool import' reports an active pool.
57 log_must mmp_set_hostid
$HOSTID2
58 log_must set_tunable64 zfs_multihost_interval
$MMP_INTERVAL_MIN
59 log_must is_pool_imported
$MMP_POOL "-d $MMP_DIR"
61 # 3. Verify 'zpool import [-f] $MMP_POOL' cannot import the pool.
62 MMP_IMPORTED_MSG
="Cannot import '$MMP_POOL': pool is imported"
63 log_must try_pool_import
$MMP_POOL "-d $MMP_DIR" $MMP_IMPORTED_MSG
65 log_must pgrep ztest
>/dev
/null
66 log_must try_pool_import
$MMP_POOL "-f -d $MMP_DIR" $MMP_IMPORTED_MSG
69 # 4. Kill ztest to make pool eligible for import. Poll with 'zpool status'.
70 ZTESTPID
=$
(pgrep ztest
)
71 if [ -n "$ZTESTPID" ]; then
72 log_must
kill -9 $ZTESTPID
74 log_must wait_pool_imported
$MMP_POOL "-d $MMP_DIR"
76 # 5. Verify 'zpool import' fails with the expected error message, when
77 # - hostid=0: - configuration error
78 # - hostid=matches - safe to import the pool
79 # - hostid=different - previously imported on a different system
81 log_must mmp_clear_hostid
82 MMP_IMPORTED_MSG
="Set the system hostid"
83 log_must check_pool_import
$MMP_POOL "-d $MMP_DIR" "action" $MMP_IMPORTED_MSG
85 log_must mmp_set_hostid
$HOSTID1
86 MMP_IMPORTED_MSG
="The pool can be imported"
87 log_must check_pool_import
$MMP_POOL "-d $MMP_DIR" "action" $MMP_IMPORTED_MSG
89 log_must mmp_set_hostid
$HOSTID2
90 MMP_IMPORTED_MSG
="The pool was last accessed by another system."
91 log_must check_pool_import
$MMP_POOL "-d $MMP_DIR" "status" $MMP_IMPORTED_MSG
93 # 6. Verify 'zpool import $MMP_POOL' fails with the expected message.
94 MMP_IMPORTED_MSG
="pool was previously in use from another system."
95 log_must try_pool_import
$MMP_POOL "-d $MMP_DIR" $MMP_IMPORTED_MSG
97 # 7. Verify 'zpool import -f $MMP_POOL' can now import the pool.
98 log_must import_activity_check
$MMP_POOL "-f -d $MMP_DIR"
100 # 8 Verify pool may be exported/imported without -f argument.
101 log_must zpool
export $MMP_POOL
102 log_must import_no_activity_check
$MMP_POOL "-d $MMP_DIR"
104 log_pass
"multihost=on|off active pool activity checks passed"