186714001SSerapheim Dimitropoulos#!/usr/bin/ksh -p
286714001SSerapheim Dimitropoulos
386714001SSerapheim Dimitropoulos#
486714001SSerapheim Dimitropoulos# This file and its contents are supplied under the terms of the
586714001SSerapheim Dimitropoulos# Common Development and Distribution License ("CDDL"), version 1.0.
686714001SSerapheim Dimitropoulos# You may only use this file in accordance with the terms of version
786714001SSerapheim Dimitropoulos# 1.0 of the CDDL.
886714001SSerapheim Dimitropoulos#
986714001SSerapheim Dimitropoulos# A full copy of the text of the CDDL should have accompanied this
1086714001SSerapheim Dimitropoulos# source.  A copy of the CDDL is also available via the Internet at
1186714001SSerapheim Dimitropoulos# http://www.illumos.org/license/CDDL.
1286714001SSerapheim Dimitropoulos#
1386714001SSerapheim Dimitropoulos
1486714001SSerapheim Dimitropoulos#
1586714001SSerapheim Dimitropoulos# Copyright (c) 2017, 2018 by Delphix. All rights reserved.
1686714001SSerapheim Dimitropoulos#
1786714001SSerapheim Dimitropoulos
1886714001SSerapheim Dimitropoulos. $STF_SUITE/tests/functional/pool_checkpoint/pool_checkpoint.kshlib
1986714001SSerapheim Dimitropoulos
2086714001SSerapheim Dimitropoulos#
2186714001SSerapheim Dimitropoulos# DESCRIPTION:
2286714001SSerapheim Dimitropoulos#	Rewind to checkpoint on a stressed pool. We basically try to
2386714001SSerapheim Dimitropoulos#	fragment the pool before and after taking a checkpoint and
2486714001SSerapheim Dimitropoulos#	see if zdb finds any checksum or other errors that imply that
2586714001SSerapheim Dimitropoulos#	blocks from the checkpoint have been reused.
2686714001SSerapheim Dimitropoulos#
2786714001SSerapheim Dimitropoulos# STRATEGY:
2886714001SSerapheim Dimitropoulos#	1. Import pool that's slightly fragmented
2986714001SSerapheim Dimitropoulos#	2. Take checkpoint
3086714001SSerapheim Dimitropoulos#	3. Apply a destructive action and do more random writes
3186714001SSerapheim Dimitropoulos#	4. Run zdb on both current and checkpointed data and make
3286714001SSerapheim Dimitropoulos#	   sure that zdb returns with no errors
3386714001SSerapheim Dimitropoulos#	5. Rewind to checkpoint
3486714001SSerapheim Dimitropoulos#	6. Run zdb again
3586714001SSerapheim Dimitropoulos#
3686714001SSerapheim Dimitropoulos
3786714001SSerapheim Dimitropoulosverify_runnable "global"
3886714001SSerapheim Dimitropoulos
3986714001SSerapheim Dimitropoulossetup_nested_pool_state
4086714001SSerapheim Dimitropouloslog_onexit cleanup_nested_pools
4186714001SSerapheim Dimitropoulos
4286714001SSerapheim Dimitropouloslog_must zpool checkpoint $NESTEDPOOL
4386714001SSerapheim Dimitropoulos
4486714001SSerapheim Dimitropoulos#
4586714001SSerapheim Dimitropoulos# Destroy one dataset, modify an existing one and create a
4686714001SSerapheim Dimitropoulos# a new one. Do more random writes in an attempt to raise
4786714001SSerapheim Dimitropoulos# more fragmentation. Then verify both current and checkpointed
4886714001SSerapheim Dimitropoulos# states.
4986714001SSerapheim Dimitropoulos#
5086714001SSerapheim Dimitropoulosfragment_after_checkpoint_and_verify
5186714001SSerapheim Dimitropoulos
5286714001SSerapheim Dimitropouloslog_must zpool export $NESTEDPOOL
5386714001SSerapheim Dimitropouloslog_must zpool import -d $FILEDISKDIR --rewind-to-checkpoint $NESTEDPOOL
5486714001SSerapheim Dimitropoulos
55*77c6489aSBrian Behlendorflog_must zpool export $NESTEDPOOL
56*77c6489aSBrian Behlendorflog_must zdb -e -p $FILEDISKDIR $NESTEDPOOL
5786714001SSerapheim Dimitropoulos
5886714001SSerapheim Dimitropouloslog_pass "Rewind to checkpoint on a stressed pool."
59