1*86714001SSerapheim Dimitropoulos#!/usr/bin/ksh -p 2*86714001SSerapheim Dimitropoulos 3*86714001SSerapheim Dimitropoulos# 4*86714001SSerapheim Dimitropoulos# This file and its contents are supplied under the terms of the 5*86714001SSerapheim Dimitropoulos# Common Development and Distribution License ("CDDL"), version 1.0. 6*86714001SSerapheim Dimitropoulos# You may only use this file in accordance with the terms of version 7*86714001SSerapheim Dimitropoulos# 1.0 of the CDDL. 8*86714001SSerapheim Dimitropoulos# 9*86714001SSerapheim Dimitropoulos# A full copy of the text of the CDDL should have accompanied this 10*86714001SSerapheim Dimitropoulos# source. A copy of the CDDL is also available via the Internet at 11*86714001SSerapheim Dimitropoulos# http://www.illumos.org/license/CDDL. 12*86714001SSerapheim Dimitropoulos# 13*86714001SSerapheim Dimitropoulos 14*86714001SSerapheim Dimitropoulos# 15*86714001SSerapheim Dimitropoulos# Copyright (c) 2017 by Delphix. All rights reserved. 16*86714001SSerapheim Dimitropoulos# 17*86714001SSerapheim Dimitropoulos 18*86714001SSerapheim Dimitropoulos. $STF_SUITE/tests/functional/pool_checkpoint/pool_checkpoint.kshlib 19*86714001SSerapheim Dimitropoulos 20*86714001SSerapheim Dimitropoulos# 21*86714001SSerapheim Dimitropoulos# DESCRIPTION: 22*86714001SSerapheim Dimitropoulos# Ensure that we can rewind to a checkpointed state that was 23*86714001SSerapheim Dimitropoulos# before a readonly-compatible feature was introduced. 24*86714001SSerapheim Dimitropoulos# 25*86714001SSerapheim Dimitropoulos# STRATEGY: 26*86714001SSerapheim Dimitropoulos# 1. Create pool 27*86714001SSerapheim Dimitropoulos# 2. Populate it 28*86714001SSerapheim Dimitropoulos# 3. Take checkpoint 29*86714001SSerapheim Dimitropoulos# 4. Modify data (include at least one destructive change) 30*86714001SSerapheim Dimitropoulos# 5. Export pool 31*86714001SSerapheim Dimitropoulos# 6. Introduce a new feature in the pool which is unsupported 32*86714001SSerapheim Dimitropoulos# but readonly-compatible and increment its reference 33*86714001SSerapheim Dimitropoulos# number so it is marked active. 34*86714001SSerapheim Dimitropoulos# 7. Verify that the pool can't be opened writeable, but we 35*86714001SSerapheim Dimitropoulos# can rewind to the checkpoint (before the feature was 36*86714001SSerapheim Dimitropoulos# introduced) if we want to. 37*86714001SSerapheim Dimitropoulos# 38*86714001SSerapheim Dimitropoulos 39*86714001SSerapheim Dimitropoulosverify_runnable "global" 40*86714001SSerapheim Dimitropoulos 41*86714001SSerapheim Dimitropoulos# 42*86714001SSerapheim Dimitropoulos# Clear all labels from all vdevs so zhack 43*86714001SSerapheim Dimitropoulos# doesn't get confused 44*86714001SSerapheim Dimitropoulos# 45*86714001SSerapheim Dimitropoulosfor disk in ${DISKS[@]}; do 46*86714001SSerapheim Dimitropoulos zpool labelclear -f $disk 47*86714001SSerapheim Dimitropoulosdone 48*86714001SSerapheim Dimitropoulos 49*86714001SSerapheim Dimitropoulossetup_test_pool 50*86714001SSerapheim Dimitropouloslog_onexit cleanup_test_pool 51*86714001SSerapheim Dimitropoulos 52*86714001SSerapheim Dimitropoulospopulate_test_pool 53*86714001SSerapheim Dimitropouloslog_must zpool checkpoint $TESTPOOL 54*86714001SSerapheim Dimitropoulostest_change_state_after_checkpoint 55*86714001SSerapheim Dimitropoulos 56*86714001SSerapheim Dimitropouloslog_must zpool export $TESTPOOL 57*86714001SSerapheim Dimitropoulos 58*86714001SSerapheim Dimitropouloslog_must zhack feature enable -r $TESTPOOL 'com.company:future_feature' 59*86714001SSerapheim Dimitropouloslog_must zhack feature ref $TESTPOOL 'com.company:future_feature' 60*86714001SSerapheim Dimitropoulos 61*86714001SSerapheim Dimitropouloslog_mustnot zpool import $TESTPOOL 62*86714001SSerapheim Dimitropouloslog_must zpool import --rewind-to-checkpoint $TESTPOOL 63*86714001SSerapheim Dimitropoulos 64*86714001SSerapheim Dimitropoulostest_verify_pre_checkpoint_state 65*86714001SSerapheim Dimitropoulos 66*86714001SSerapheim Dimitropouloslog_pass "Rewind to checkpoint from unsupported pool feature." 67