93 lines
3.0 KiB
Bash
Executable File
93 lines
3.0 KiB
Bash
Executable File
#!/bin/ksh -p
|
|
|
|
#
|
|
# This file and its contents are supplied under the terms of the
|
|
# Common Development and Distribution License ("CDDL"), version 1.0.
|
|
# You may only use this file in accordance with the terms of version
|
|
# 1.0 of the CDDL.
|
|
#
|
|
# A full copy of the text of the CDDL should have accompanied this
|
|
# source. A copy of the CDDL is also available via the Internet at
|
|
# http://www.illumos.org/license/CDDL.
|
|
#
|
|
|
|
#
|
|
# Copyright (c) 2017, 2018 by Delphix. All rights reserved.
|
|
#
|
|
|
|
. $STF_SUITE/tests/functional/pool_checkpoint/pool_checkpoint.kshlib
|
|
|
|
#
|
|
# DESCRIPTION:
|
|
# The maximum address that can be described by a single-word
|
|
# space map entry limits the maximum allocatable space of any
|
|
# top-level vdev to 64PB whenever a vdev-wide space map is used.
|
|
#
|
|
# Since a vdev-wide space map is introduced for the checkpoint
|
|
# we want to ensure that we cannot checkpoint a pool that does
|
|
# not use the new space map encoding (V2) and has a top-level
|
|
# vdev with more than 64PB of allocatable space.
|
|
#
|
|
# Note: Since this is a pool created from file-based vdevs we
|
|
# are guaranteed that vdev_ashift is SPA_MINBLOCKSHIFT
|
|
# [which is currently 9 and (1 << 9) = 512], so the numbers
|
|
# work out for this test.
|
|
#
|
|
# STRATEGY:
|
|
# 1. Create pool with a disk of exactly 64PB
|
|
# (so ~63.5PB of allocatable space) and
|
|
# ensure that has the checkpoint feature
|
|
# enabled but not space map V2
|
|
# 2. Ensure that you can checkpoint it
|
|
# 3. Create pool with a disk of exactly 65PB
|
|
# (so ~64.5PB of allocatable space) with
|
|
# the same setup
|
|
# 4. Ensure we fail trying to checkpoint it
|
|
#
|
|
# Note:
|
|
# This test used to create the two pools and attempt to checkpoint
|
|
# them at the same time, then destroy them. We later had to change
|
|
# this to test one pool at a time as the metaslabs (even though empty)
|
|
# consumed a lot of memory, especially on a machine that has been
|
|
# running with debug enabled. To give an example, each metaslab
|
|
# structure is ~1712 bytes (at the time of this writing), and each
|
|
# vdev has 128K metaslabs, which means that just the structures
|
|
# consume 131071 * 1712 = ~224M.
|
|
#
|
|
|
|
verify_runnable "global"
|
|
|
|
TESTPOOL1=testpool1
|
|
TESTPOOL2=testpool2
|
|
|
|
DISK64PB=/$DISKFS/disk64PB
|
|
DISK65PB=/$DISKFS/disk65PB
|
|
|
|
function test_cleanup
|
|
{
|
|
poolexists $TESTPOOL1 && destroy_pool $TESTPOOL1
|
|
poolexists $TESTPOOL2 && destroy_pool $TESTPOOL2
|
|
log_must rm -f $DISK64PB $DISK65PB
|
|
cleanup_test_pool
|
|
}
|
|
|
|
setup_test_pool
|
|
log_onexit test_cleanup
|
|
|
|
log_must zfs create $DISKFS
|
|
log_must mkfile -n $((64 * 1024 * 1024))g $DISK64PB
|
|
log_must mkfile -n $((65 * 1024 * 1024))g $DISK65PB
|
|
|
|
log_must zpool create -d $TESTPOOL1 $DISK64PB
|
|
log_must zpool set feature@zpool_checkpoint=enabled $TESTPOOL1
|
|
log_must zpool checkpoint $TESTPOOL1
|
|
destroy_pool $TESTPOOL1
|
|
|
|
log_must zpool create -d $TESTPOOL2 $DISK65PB
|
|
log_must zpool set feature@zpool_checkpoint=enabled $TESTPOOL2
|
|
log_mustnot zpool checkpoint $TESTPOOL2
|
|
destroy_pool $TESTPOOL2
|
|
|
|
log_pass "Fail to checkpoint pool with old spacemap encoding" \
|
|
" and a vdev that's more than 64PB."
|