1e0f1c0afSOlaf Faaland#!/bin/ksh -p 2e0f1c0afSOlaf Faaland# 3e0f1c0afSOlaf Faaland# CDDL HEADER START 4e0f1c0afSOlaf Faaland# 5e0f1c0afSOlaf Faaland# This file and its contents are supplied under the terms of the 6e0f1c0afSOlaf Faaland# Common Development and Distribution License ("CDDL"), version 1.0. 7e0f1c0afSOlaf Faaland# You may only use this file in accordance with the terms of version 8e0f1c0afSOlaf Faaland# 1.0 of the CDDL. 9e0f1c0afSOlaf Faaland# 10e0f1c0afSOlaf Faaland# A full copy of the text of the CDDL should have accompanied this 11e0f1c0afSOlaf Faaland# source. A copy of the CDDL is also available via the Internet at 12e0f1c0afSOlaf Faaland# http://www.illumos.org/license/CDDL. 13e0f1c0afSOlaf Faaland# 14e0f1c0afSOlaf Faaland# CDDL HEADER END 15e0f1c0afSOlaf Faaland# 16e0f1c0afSOlaf Faaland 17e0f1c0afSOlaf Faaland# 18e0f1c0afSOlaf Faaland# Copyright (c) 2017 by Lawrence Livermore National Security, LLC. 194348eb90SOlaf Faaland# Copyright 2019 Joyent, Inc. 20e0f1c0afSOlaf Faaland# 21e0f1c0afSOlaf Faaland 22e0f1c0afSOlaf Faaland# DESCRIPTION: 23e0f1c0afSOlaf Faaland# Ensure that the MMP thread is notified when zfs_multihost_interval is 244348eb90SOlaf Faaland# reduced, and that changes to zfs_multihost_interval and 254348eb90SOlaf Faaland# zfs_multihost_fail_intervals do not trigger pool suspensions. 26e0f1c0afSOlaf Faaland# 27e0f1c0afSOlaf Faaland# STRATEGY: 28e0f1c0afSOlaf Faaland# 1. Set zfs_multihost_interval to much longer than the test duration 29e0f1c0afSOlaf Faaland# 2. Create a zpool and enable multihost 30e0f1c0afSOlaf Faaland# 3. Verify no MMP writes occurred 31e0f1c0afSOlaf Faaland# 4. Set zfs_multihost_interval to 1 second 32e0f1c0afSOlaf Faaland# 5. Sleep briefly 33e0f1c0afSOlaf Faaland# 6. Verify MMP writes began 344348eb90SOlaf Faaland# 7. Verify mmp_fail and mmp_write in uberblock reflect tunables 354348eb90SOlaf Faaland# 8. Repeatedly change tunables relating to pool suspension 36e0f1c0afSOlaf Faaland# 37e0f1c0afSOlaf Faaland 38e0f1c0afSOlaf Faaland. $STF_SUITE/include/libtest.shlib 39e0f1c0afSOlaf Faaland. $STF_SUITE/tests/functional/mmp/mmp.cfg 40e0f1c0afSOlaf Faaland. $STF_SUITE/tests/functional/mmp/mmp.kshlib 41e0f1c0afSOlaf Faaland 42e0f1c0afSOlaf Faalandverify_runnable "both" 43e0f1c0afSOlaf Faaland 44e0f1c0afSOlaf Faalandfunction cleanup 45e0f1c0afSOlaf Faaland{ 46e0f1c0afSOlaf Faaland default_cleanup_noexit 47e0f1c0afSOlaf Faaland log_must set_tunable64 zfs_multihost_interval $MMP_INTERVAL_DEFAULT 484348eb90SOlaf Faaland log_must set_tunable32 zfs_multihost_fail_intervals \ 494348eb90SOlaf Faaland $MMP_FAIL_INTERVALS_DEFAULT 50e0f1c0afSOlaf Faaland log_must mmp_clear_hostid 51e0f1c0afSOlaf Faaland} 52e0f1c0afSOlaf Faaland 53e0f1c0afSOlaf Faalandlog_assert "mmp threads notified when zfs_multihost_interval reduced" 54e0f1c0afSOlaf Faalandlog_onexit cleanup 55e0f1c0afSOlaf Faaland 56e0f1c0afSOlaf Faalandlog_must set_tunable64 zfs_multihost_interval $MMP_INTERVAL_HOUR 57e0f1c0afSOlaf Faalandlog_must mmp_set_hostid $HOSTID1 58e0f1c0afSOlaf Faaland 59e0f1c0afSOlaf Faalanddefault_setup_noexit $DISK 60e0f1c0afSOlaf Faalandlog_must zpool set multihost=on $TESTPOOL 61e0f1c0afSOlaf Faaland 62e0f1c0afSOlaf Faalandclear_mmp_history 63e0f1c0afSOlaf Faalandlog_must set_tunable64 zfs_multihost_interval $MMP_INTERVAL_DEFAULT 64e0f1c0afSOlaf Faalanduber_count=$(count_mmp_writes $TESTPOOL 1) 65e0f1c0afSOlaf Faaland 66e0f1c0afSOlaf Faalandif [ $uber_count -eq 0 ]; then 674348eb90SOlaf Faaland log_fail "ERROR: mmp writes did not start when zfs_multihost_interval reduced" 68e0f1c0afSOlaf Faalandfi 69e0f1c0afSOlaf Faaland 704348eb90SOlaf Faaland# 7. Verify mmp_write and mmp_fail are written 714348eb90SOlaf Faalandfor fails in $(seq $MMP_FAIL_INTERVALS_MIN $((MMP_FAIL_INTERVALS_MIN*2))); do 724348eb90SOlaf Faaland for interval in $(seq $MMP_INTERVAL_MIN 200 $MMP_INTERVAL_DEFAULT); do 734348eb90SOlaf Faaland log_must set_tunable32 zfs_multihost_fail_intervals $fails 744348eb90SOlaf Faaland log_must set_tunable64 zfs_multihost_interval $interval 75*09fbbb7dSAllan Jude sync_pool $TESTPOOL true 764348eb90SOlaf Faaland typeset mmp_fail=$(zdb $TESTPOOL 2>/dev/null | 774348eb90SOlaf Faaland awk '/mmp_fail/ {print $NF}') 784348eb90SOlaf Faaland if [ $fails -ne $mmp_fail ]; then 794348eb90SOlaf Faaland log_fail "ERROR: mmp_fail $mmp_fail != $fails" 804348eb90SOlaf Faaland fi 814348eb90SOlaf Faaland typeset mmp_write=$(zdb $TESTPOOL 2>/dev/null | 824348eb90SOlaf Faaland awk '/mmp_write/ {print $NF}') 834348eb90SOlaf Faaland if [ $interval -ne $mmp_write ]; then 844348eb90SOlaf Faaland log_fail "ERROR: mmp_write $mmp_write != $interval" 854348eb90SOlaf Faaland fi 864348eb90SOlaf Faaland done 874348eb90SOlaf Faalanddone 884348eb90SOlaf Faaland 894348eb90SOlaf Faaland 904348eb90SOlaf Faaland# 8. Repeatedly change zfs_multihost_interval and fail_intervals 914348eb90SOlaf Faalandfor x in $(seq 10); do 924348eb90SOlaf Faaland typeset new_interval=$(( (RANDOM % 20 + 1) * $MMP_INTERVAL_MIN )) 934348eb90SOlaf Faaland log_must set_tunable64 zfs_multihost_interval $new_interval 944348eb90SOlaf Faaland typeset action=$((RANDOM %10)) 954348eb90SOlaf Faaland if [ $action -eq 0 ]; then 964348eb90SOlaf Faaland if is_linux; then 974348eb90SOlaf Faaland log_must zpool export -a 984348eb90SOlaf Faaland log_must mmp_clear_hostid 994348eb90SOlaf Faaland log_must mmp_set_hostid $HOSTID1 1004348eb90SOlaf Faaland log_must zpool import $TESTPOOL 1014348eb90SOlaf Faaland fi 1024348eb90SOlaf Faaland elif [ $action -eq 1 ]; then 1034348eb90SOlaf Faaland log_must zpool export -F $TESTPOOL 1044348eb90SOlaf Faaland log_must zpool import $TESTPOOL 1054348eb90SOlaf Faaland elif [ $action -eq 2 ]; then 1064348eb90SOlaf Faaland log_must zpool export -F $TESTPOOL 1074348eb90SOlaf Faaland log_must mmp_clear_hostid 1084348eb90SOlaf Faaland log_must mmp_set_hostid $HOSTID2 1094348eb90SOlaf Faaland log_must zpool import -f $TESTPOOL 1104348eb90SOlaf Faaland elif [ $action -eq 3 ]; then 1114348eb90SOlaf Faaland log_must zpool export -F $TESTPOOL 1124348eb90SOlaf Faaland log_must set_tunable64 zfs_multihost_interval $MMP_INTERVAL_MIN 1134348eb90SOlaf Faaland log_must zpool import $TESTPOOL 1144348eb90SOlaf Faaland elif [ $action -eq 4 ]; then 1154348eb90SOlaf Faaland log_must set_tunable32 zfs_multihost_fail_intervals \ 1164348eb90SOlaf Faaland $((RANDOM % MMP_FAIL_INTERVALS_DEFAULT)) 1174348eb90SOlaf Faaland fi 1184348eb90SOlaf Faaland sleep 5 1194348eb90SOlaf Faalanddone 1204348eb90SOlaf Faaland 1214348eb90SOlaf Faaland 122e0f1c0afSOlaf Faalandlog_pass "mmp threads notified when zfs_multihost_interval reduced" 123