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 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: 22*05f33e76SSerapheim Dimitropoulos# Ensure that checkpoint verification within zdb works as 2386714001SSerapheim Dimitropoulos# we expect. 2486714001SSerapheim Dimitropoulos# 2586714001SSerapheim Dimitropoulos# STRATEGY: 2686714001SSerapheim Dimitropoulos# 1. Create pool 2786714001SSerapheim Dimitropoulos# 2. Populate it 2886714001SSerapheim Dimitropoulos# 3. Take checkpoint 29*05f33e76SSerapheim Dimitropoulos# 4. Modify data (include at least one destructive change) 3086714001SSerapheim Dimitropoulos# 5. Verify zdb finds checkpoint when run on current state 3186714001SSerapheim Dimitropoulos# 6. Verify zdb finds old dataset when run on checkpointed 3286714001SSerapheim Dimitropoulos# state 33*05f33e76SSerapheim Dimitropoulos# 7. Export pool, and verify the same things with zdb to 34*05f33e76SSerapheim Dimitropoulos# test the -e option. 35*05f33e76SSerapheim Dimitropoulos# 8. Import pool and discard checkpoint 36*05f33e76SSerapheim Dimitropoulos# 9. Verify zdb does not find the checkpoint anymore in the 3786714001SSerapheim Dimitropoulos# current state. 38*05f33e76SSerapheim Dimitropoulos# 10.Verify that zdb cannot find the checkpointed state 3986714001SSerapheim Dimitropoulos# anymore when trying to open it for verification. 4086714001SSerapheim Dimitropoulos# 4186714001SSerapheim Dimitropoulos 4286714001SSerapheim Dimitropoulosverify_runnable "global" 4386714001SSerapheim Dimitropoulos 4486714001SSerapheim Dimitropoulos# 4586714001SSerapheim Dimitropoulos# zdb does this thing where it imports the checkpointed state of the 4686714001SSerapheim Dimitropoulos# pool under a new pool with a different name, alongside the pool 4786714001SSerapheim Dimitropoulos# with the current state. The name of this temporary pool is the 4886714001SSerapheim Dimitropoulos# name of the actual pool with the suffix below appended to it. 4986714001SSerapheim Dimitropoulos# 5086714001SSerapheim DimitropoulosCHECKPOINT_SUFFIX="_CHECKPOINTED_UNIVERSE" 5186714001SSerapheim DimitropoulosCHECKPOINTED_FS1=$TESTPOOL$CHECKPOINT_SUFFIX/$TESTFS1 5286714001SSerapheim Dimitropoulos 5386714001SSerapheim Dimitropoulossetup_test_pool 5486714001SSerapheim Dimitropouloslog_onexit cleanup_test_pool 5586714001SSerapheim Dimitropoulos 5686714001SSerapheim Dimitropoulospopulate_test_pool 5786714001SSerapheim Dimitropouloslog_must zpool checkpoint $TESTPOOL 5886714001SSerapheim Dimitropoulos 5986714001SSerapheim Dimitropoulostest_change_state_after_checkpoint 6086714001SSerapheim Dimitropoulos 6186714001SSerapheim Dimitropouloszdb $TESTPOOL | grep "Checkpointed uberblock found" || \ 6286714001SSerapheim Dimitropoulos log_fail "zdb could not find checkpointed uberblock" 6386714001SSerapheim Dimitropoulos 6486714001SSerapheim Dimitropouloszdb -k $TESTPOOL | grep "Checkpointed uberblock found" && \ 6586714001SSerapheim Dimitropoulos log_fail "zdb found checkpointed uberblock in checkpointed state" 6686714001SSerapheim Dimitropoulos 6786714001SSerapheim Dimitropouloszdb $TESTPOOL | grep "Dataset $FS1" && \ 6886714001SSerapheim Dimitropoulos log_fail "zdb found destroyed dataset in current state" 6986714001SSerapheim Dimitropoulos 7086714001SSerapheim Dimitropouloszdb -k $TESTPOOL | grep "Dataset $CHECKPOINTED_FS1" || \ 7186714001SSerapheim Dimitropoulos log_fail "zdb could not find destroyed dataset in checkpoint" 7286714001SSerapheim Dimitropoulos 73*05f33e76SSerapheim Dimitropouloslog_must zpool export $TESTPOOL 74*05f33e76SSerapheim Dimitropoulos 75*05f33e76SSerapheim Dimitropouloszdb -e $TESTPOOL | grep "Checkpointed uberblock found" || \ 76*05f33e76SSerapheim Dimitropoulos log_fail "zdb could not find checkpointed uberblock" 77*05f33e76SSerapheim Dimitropoulos 78*05f33e76SSerapheim Dimitropouloszdb -k -e $TESTPOOL | grep "Checkpointed uberblock found" && \ 79*05f33e76SSerapheim Dimitropoulos log_fail "zdb found checkpointed uberblock in checkpointed state" 80*05f33e76SSerapheim Dimitropoulos 81*05f33e76SSerapheim Dimitropouloszdb -e $TESTPOOL | grep "Dataset $FS1" && \ 82*05f33e76SSerapheim Dimitropoulos log_fail "zdb found destroyed dataset in current state" 83*05f33e76SSerapheim Dimitropoulos 84*05f33e76SSerapheim Dimitropouloszdb -k -e $TESTPOOL | grep "Dataset $CHECKPOINTED_FS1" || \ 85*05f33e76SSerapheim Dimitropoulos log_fail "zdb could not find destroyed dataset in checkpoint" 86*05f33e76SSerapheim Dimitropoulos 87*05f33e76SSerapheim Dimitropouloslog_must zpool import $TESTPOOL 88*05f33e76SSerapheim Dimitropoulos 8986714001SSerapheim Dimitropouloslog_must zpool checkpoint -d $TESTPOOL 9086714001SSerapheim Dimitropoulos 9186714001SSerapheim Dimitropouloszdb $TESTPOOL | grep "Checkpointed uberblock found" && \ 9286714001SSerapheim Dimitropoulos log_fail "zdb found checkpointed uberblock after discarding " \ 9386714001SSerapheim Dimitropoulos "the checkpoint" 9486714001SSerapheim Dimitropoulos 9586714001SSerapheim Dimitropouloszdb -k $TESTPOOL && \ 9686714001SSerapheim Dimitropoulos log_fail "zdb opened checkpointed state that was discarded" 9786714001SSerapheim Dimitropoulos 9886714001SSerapheim Dimitropouloslog_pass "zdb can analyze checkpointed pools." 99