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 35verify_runnable "both" 36 37function cleanup 38{ 39 zinject -c all 40 default_cleanup_noexit 41 log_must mmp_clear_hostid 42} 43 44log_assert "mmp behaves correctly when failing to write uberblocks." 45log_onexit cleanup 46 47log_must mmp_set_hostid $HOSTID1 48default_mirror_setup_noexit $DISKS 49log_must zpool set multihost=on $TESTPOOL 50log_must zinject -d ${DISK[0]} -e io -T write -f 50 $TESTPOOL -L uber 51clear_mmp_history 52uber_count=$(count_mmp_writes $TESTPOOL 3) 53 54if [ $uber_count -eq 0 ]; then 55 log_fail "mmp writes did not occur when uberblock IO errors injected" 56fi 57 58log_pass "mmp correctly wrote uberblocks when IO errors injected" 59