194ddd090SPrakash Surya#!/bin/ksh -p
294ddd090SPrakash Surya#
394ddd090SPrakash Surya# This file and its contents are supplied under the terms of the
494ddd090SPrakash Surya# Common Development and Distribution License ("CDDL"), version 1.0.
594ddd090SPrakash Surya# You may only use this file in accordance with the terms of version
694ddd090SPrakash Surya# 1.0 of the CDDL.
794ddd090SPrakash Surya#
894ddd090SPrakash Surya# A full copy of the text of the CDDL should have accompanied this
994ddd090SPrakash Surya# source.  A copy of the CDDL is also available via the Internet at
1094ddd090SPrakash Surya# http://www.illumos.org/license/CDDL.
1194ddd090SPrakash Surya#
1294ddd090SPrakash Surya
1394ddd090SPrakash Surya#
1494ddd090SPrakash Surya# Copyright (c) 2017 by Delphix. All rights reserved.
1594ddd090SPrakash Surya#
1694ddd090SPrakash Surya
1794ddd090SPrakash Surya. $STF_SUITE/tests/functional/slog/slog.kshlib
1894ddd090SPrakash Surya
1994ddd090SPrakash Surya#
2094ddd090SPrakash Surya# DESCRIPTION:
2194ddd090SPrakash Surya#	Concurrent sync writes with log offline/online works.
2294ddd090SPrakash Surya#
2394ddd090SPrakash Surya# STRATEGY:
2494ddd090SPrakash Surya#	1. Configure "zfs_commit_timeout_pct"
2594ddd090SPrakash Surya#	2. Create pool with a log device.
2694ddd090SPrakash Surya#	3. Concurrently do the following:
2794ddd090SPrakash Surya#	   3.1. Perform 8K sync writes
2894ddd090SPrakash Surya#	   3.2. Perform log offline/online commands
2994ddd090SPrakash Surya#	4. Loop to test with growing "zfs_commit_timout_pct" values.
3094ddd090SPrakash Surya#
3194ddd090SPrakash Surya
3294ddd090SPrakash Suryaverify_runnable "global"
3394ddd090SPrakash Surya
3494ddd090SPrakash Suryafunction cleanup
3594ddd090SPrakash Surya{
3694ddd090SPrakash Surya	#
3794ddd090SPrakash Surya	# Wait for any of the writes and/or zpool commands that were
3894ddd090SPrakash Surya	# kicked off in the background to complete. On failure, we may
3994ddd090SPrakash Surya	# enter this function without previously waiting for them.
4094ddd090SPrakash Surya	#
4194ddd090SPrakash Surya	wait
4294ddd090SPrakash Surya
4394ddd090SPrakash Surya	mdb -kwe "zfs_commit_timeout_pct/Z $ORIG_TIMEOUT"
4494ddd090SPrakash Surya
4594ddd090SPrakash Surya	poolexists $TESTPOOL && zpool destroy -f $TESTPOOL
4694ddd090SPrakash Surya}
4794ddd090SPrakash Surya
4894ddd090SPrakash SuryaORIG_TIMEOUT=$(mdb -ke "zfs_commit_timeout_pct/J" | tail -1 | awk '{print $NF}')
4994ddd090SPrakash Suryalog_onexit cleanup
50*d8849d7dSChunwei Chenlog_must setup
5194ddd090SPrakash Surya
5294ddd090SPrakash Suryafor PCT in 0 1 2 4 8 16 32 64 128 256 512 1024; do
5394ddd090SPrakash Surya	log_must mdb -kwe "zfs_commit_timeout_pct/Z $PCT"
5494ddd090SPrakash Surya
5594ddd090SPrakash Surya	log_must zpool create $TESTPOOL $VDEV log $SDEV
5694ddd090SPrakash Surya
5794ddd090SPrakash Surya	for i in {1..10}; do
5894ddd090SPrakash Surya		log_must fio --rw write --sync 1 --directory "/$TESTPOOL" \
5994ddd090SPrakash Surya		    --bs 8K --size 8K --name slog-test
6094ddd090SPrakash Surya	done &
6194ddd090SPrakash Surya
6294ddd090SPrakash Surya	for i in {1..10}; do
6394ddd090SPrakash Surya		log_must zpool offline $TESTPOOL $SDEV
6494ddd090SPrakash Surya		log_must verify_slog_device $TESTPOOL $SDEV 'OFFLINE'
6594ddd090SPrakash Surya		log_must zpool online $TESTPOOL $SDEV
6694ddd090SPrakash Surya		log_must verify_slog_device $TESTPOOL $SDEV 'ONLINE'
6794ddd090SPrakash Surya	done &
6894ddd090SPrakash Surya
6994ddd090SPrakash Surya	wait
7094ddd090SPrakash Surya
7194ddd090SPrakash Surya	log_must zpool destroy -f $TESTPOOL
7294ddd090SPrakash Suryadone
7394ddd090SPrakash Surya
7494ddd090SPrakash Suryalog_pass "Concurrent writes with slog offline/online works."
75