2019-12-01 21:43:50 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
testdir=$(readlink -f $(dirname $0))
|
|
|
|
rootdir=$(readlink -f $testdir/../..)
|
|
|
|
source $rootdir/test/common/autotest_common.sh
|
|
|
|
source $rootdir/test/lvol/common.sh
|
|
|
|
source $rootdir/test/bdev/nbd_common.sh
|
|
|
|
|
|
|
|
function test_snapshot_compare_with_lvol_bdev() {
|
|
|
|
malloc_name=$(rpc_cmd bdev_malloc_create $MALLOC_SIZE_MB $MALLOC_BS)
|
|
|
|
lvs_uuid=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name" lvs_test)
|
|
|
|
|
|
|
|
# Create two lvol bdevs
|
|
|
|
lvol_size_mb=$( round_down $(( LVS_DEFAULT_CAPACITY_MB / 6 )) )
|
|
|
|
lvol_size=$(( lvol_size_mb * 1024 * 1024 ))
|
|
|
|
|
|
|
|
lvol_uuid1=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" lvol_test1 "$lvol_size_mb" -t)
|
|
|
|
lvol_uuid2=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" lvol_test2 "$lvol_size_mb")
|
|
|
|
|
|
|
|
# Fill thin provisoned lvol bdev with 50% of its space
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid1" /dev/nbd0
|
|
|
|
count=$(( lvol_size / LVS_DEFAULT_CLUSTER_SIZE / 2 ))
|
|
|
|
dd if=/dev/urandom of=/dev/nbd0 oflag=direct bs="$LVS_DEFAULT_CLUSTER_SIZE" count=$count
|
|
|
|
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd0
|
|
|
|
# Fill whole thick provisioned lvol bdev
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid2" /dev/nbd0
|
|
|
|
count=$(( lvol_size / LVS_DEFAULT_CLUSTER_SIZE ))
|
|
|
|
dd if=/dev/urandom of=/dev/nbd0 oflag=direct bs="$LVS_DEFAULT_CLUSTER_SIZE" count=$count
|
|
|
|
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd0
|
|
|
|
|
|
|
|
# Create snapshots of lvol bdevs
|
|
|
|
snapshot_uuid1=$(rpc_cmd bdev_lvol_snapshot lvs_test/lvol_test1 lvol_snapshot1)
|
|
|
|
snapshot_uuid2=$(rpc_cmd bdev_lvol_snapshot lvs_test/lvol_test2 lvol_snapshot2)
|
|
|
|
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$snapshot_uuid1" /dev/nbd0
|
|
|
|
# Try to perform write operation on created snapshot
|
|
|
|
# Check if filling snapshot of lvol bdev fails
|
|
|
|
count=$(( lvol_size / LVS_DEFAULT_CLUSTER_SIZE ))
|
|
|
|
dd if=/dev/urandom of=/dev/nbd0 oflag=direct bs="$LVS_DEFAULT_CLUSTER_SIZE" count=$count && false
|
|
|
|
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd0
|
|
|
|
|
|
|
|
# Declare nbd devices as vars for an easy cross-reference
|
|
|
|
local lvol_nbd1=/dev/nbd0 lvol_nbd2=/dev/nbd1
|
|
|
|
local snapshot_nbd1=/dev/nbd2 snapshot_nbd2=/dev/nbd3
|
|
|
|
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid1" "$lvol_nbd1"
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid2" "$lvol_nbd2"
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$snapshot_uuid1" "$snapshot_nbd1"
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$snapshot_uuid2" "$snapshot_nbd2"
|
|
|
|
# Compare every lvol bdev with corresponding snapshot and check that data are the same
|
|
|
|
cmp "$lvol_nbd1" "$snapshot_nbd1"
|
|
|
|
cmp "$lvol_nbd2" "$snapshot_nbd2"
|
|
|
|
|
|
|
|
# Fill second half of thin provisioned lvol bdev
|
|
|
|
count=$(( lvol_size / LVS_DEFAULT_CLUSTER_SIZE / 2 ))
|
|
|
|
dd if=/dev/urandom of="$lvol_nbd1" oflag=direct seek=$count bs="$LVS_DEFAULT_CLUSTER_SIZE" count=$count
|
|
|
|
|
|
|
|
# Compare thin provisioned lvol bdev with its snapshot and check if it fails
|
|
|
|
cmp "$lvol_nbd1" "$snapshot_nbd1" && false
|
|
|
|
|
|
|
|
# clean up
|
|
|
|
for bdev in "${!lvol_nbd@}" "${!snapshot_nbd@}"; do
|
|
|
|
nbd_stop_disks "$DEFAULT_RPC_ADDR" "${!bdev}"
|
|
|
|
done
|
|
|
|
|
|
|
|
rpc_cmd bdev_lvol_delete "$lvol_uuid1"
|
|
|
|
rpc_cmd bdev_get_bdevs -b "$lvol_uuid1" && false
|
|
|
|
rpc_cmd bdev_lvol_delete "$snapshot_uuid1"
|
|
|
|
rpc_cmd bdev_get_bdevs -b "$snapshot_uuid1" && false
|
|
|
|
rpc_cmd bdev_lvol_delete "$lvol_uuid2"
|
|
|
|
rpc_cmd bdev_get_bdevs -b "$lvol_uuid2" && false
|
|
|
|
rpc_cmd bdev_lvol_delete "$snapshot_uuid2"
|
|
|
|
rpc_cmd bdev_get_bdevs -b "$snapshot_uuid2" && false
|
|
|
|
rpc_cmd bdev_lvol_delete_lvstore -u "$lvs_uuid"
|
|
|
|
rpc_cmd bdev_lvol_get_lvstores -u "$lvs_uuid" && false
|
|
|
|
rpc_cmd bdev_malloc_delete "$malloc_name"
|
|
|
|
check_leftover_devices
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-12-03 21:02:27 +00:00
|
|
|
# Check that when writing to lvol bdev
|
|
|
|
# creating snapshot ends with success
|
|
|
|
function test_create_snapshot_with_io() {
|
|
|
|
malloc_name=$(rpc_cmd bdev_malloc_create $MALLOC_SIZE_MB $MALLOC_BS)
|
|
|
|
lvs_uuid=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name" lvs_test)
|
|
|
|
|
|
|
|
# Create lvol bdev
|
|
|
|
lvol_size_mb=$( round_down $(( LVS_DEFAULT_CAPACITY_MB / 2 )) )
|
|
|
|
lvol_size=$(( lvol_size_mb * 1024 * 1024 ))
|
|
|
|
|
|
|
|
lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" lvol_test "$lvol_size_mb" -t)
|
|
|
|
|
|
|
|
# Run fio in background that writes to lvol bdev
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid" /dev/nbd0
|
|
|
|
run_fio_test /dev/nbd0 0 $lvol_size "write" "0xcc" "--time_based --runtime=16" &
|
|
|
|
fio_proc=$!
|
|
|
|
sleep 4
|
|
|
|
# Create snapshot of lvol bdev
|
|
|
|
snapshot_uuid=$(rpc_cmd bdev_lvol_snapshot lvs_test/lvol_test lvol_snapshot)
|
|
|
|
wait $fio_proc
|
|
|
|
|
|
|
|
# Clean up
|
|
|
|
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd0
|
|
|
|
rpc_cmd bdev_lvol_delete "$lvol_uuid"
|
|
|
|
rpc_cmd bdev_get_bdevs -b "$lvol_uuid" && false
|
|
|
|
rpc_cmd bdev_lvol_delete "$snapshot_uuid"
|
|
|
|
rpc_cmd bdev_get_bdevs -b "$snapshot_uuid" && false
|
|
|
|
rpc_cmd bdev_lvol_delete_lvstore -u "$lvs_uuid"
|
|
|
|
rpc_cmd bdev_lvol_get_lvstores -u "$lvs_uuid" && false
|
|
|
|
rpc_cmd bdev_malloc_delete "$malloc_name"
|
|
|
|
check_leftover_devices
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-12-03 21:54:51 +00:00
|
|
|
# Check that creating snapshot of snapshot will fail
|
|
|
|
function test_create_snapshot_of_snapshot() {
|
|
|
|
malloc_name=$(rpc_cmd bdev_malloc_create $MALLOC_SIZE_MB $MALLOC_BS)
|
|
|
|
lvs_uuid=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name" lvs_test)
|
|
|
|
|
|
|
|
# Create lvol bdev
|
|
|
|
lvol_size_mb=$( round_down $(( LVS_DEFAULT_CAPACITY_MB / 3 )) )
|
|
|
|
|
|
|
|
lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" lvol_test "$lvol_size_mb")
|
|
|
|
lvol=$(rpc_cmd bdev_get_bdevs -b "$lvol_uuid")
|
|
|
|
|
|
|
|
# Create snapshots of lvol bdev
|
|
|
|
snapshot_uuid=$(rpc_cmd bdev_lvol_snapshot lvs_test/lvol_test lvol_snapshot)
|
|
|
|
|
|
|
|
# Create snapshot of previously created snapshot
|
|
|
|
# and check if operation will fail
|
|
|
|
rpc_cmd bdev_lvol_snapshot lvs_test/lvol_snapshot lvol_snapshot2 && false
|
|
|
|
|
|
|
|
# Clean up
|
|
|
|
rpc_cmd bdev_lvol_delete "$lvol_uuid"
|
|
|
|
rpc_cmd bdev_get_bdevs -b "$lvol_uuid" && false
|
|
|
|
rpc_cmd bdev_lvol_delete "$snapshot_uuid"
|
|
|
|
rpc_cmd bdev_get_bdevs -b "$snapshot_uuid" && false
|
|
|
|
rpc_cmd bdev_lvol_delete_lvstore -u "$lvs_uuid"
|
|
|
|
rpc_cmd bdev_lvol_get_lvstores -u "$lvs_uuid" && false
|
|
|
|
rpc_cmd bdev_malloc_delete "$malloc_name"
|
|
|
|
check_leftover_devices
|
|
|
|
}
|
|
|
|
|
2019-12-04 11:34:38 +00:00
|
|
|
# Check if only clone of snapshot can be created.
|
|
|
|
# Check if writing to one clone doesn't affect other clone
|
|
|
|
# Check if relations between clones and snapshots are properly set in configuration
|
|
|
|
function test_clone_snapshot_relations() {
|
|
|
|
malloc_name=$(rpc_cmd bdev_malloc_create $MALLOC_SIZE_MB $MALLOC_BS)
|
|
|
|
lvs_uuid=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name" lvs_test)
|
|
|
|
|
|
|
|
# Calculate size and create lvol bdev
|
|
|
|
lvol_size_mb=$( round_down $(( LVS_DEFAULT_CAPACITY_MB / 6 )) )
|
|
|
|
lvol_size=$(( lvol_size_mb * 1024 * 1024 ))
|
|
|
|
|
|
|
|
lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" lvol_test "$lvol_size_mb")
|
|
|
|
lvol=$(rpc_cmd bdev_get_bdevs -b "$lvol_uuid")
|
|
|
|
|
|
|
|
# Fill lvol bdev with 100% of its space
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid" /dev/nbd0
|
|
|
|
run_fio_test /dev/nbd0 0 lvol_size "write" "0xcc"
|
|
|
|
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd0
|
|
|
|
|
|
|
|
# An attempt to create a clone from lvol that is rw capable should fail
|
|
|
|
rpc_cmd bdev_lvol_clone lvs_test/lvol_test clone_test && false
|
|
|
|
|
|
|
|
# Create snapshots of lvol bdev
|
|
|
|
snapshot_uuid=$(rpc_cmd bdev_lvol_snapshot lvs_test/lvol_test lvol_snapshot)
|
|
|
|
|
|
|
|
# Create again clone of lvol bdev and check if it fails
|
|
|
|
rpc_cmd bdev_lvol_clone lvs_test/lvol_test clone_test && false
|
|
|
|
|
|
|
|
# Create two clones of snapshot and check if it ends with success
|
|
|
|
clone_uuid1=$(rpc_cmd bdev_lvol_clone lvs_test/lvol_snapshot clone_test1)
|
|
|
|
clone_uuid2=$(rpc_cmd bdev_lvol_clone lvs_test/lvol_snapshot clone_test2)
|
|
|
|
|
|
|
|
# Perform write operation to first clone
|
|
|
|
# Change first half of its space
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$clone_uuid1" /dev/nbd0
|
|
|
|
fill_size=$(( lvol_size / 2 ))
|
|
|
|
run_fio_test /dev/nbd0 0 $fill_size "write" "0xaa"
|
|
|
|
|
|
|
|
# Compare snapshot with second clone. Data on both bdevs should be the same
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$snapshot_uuid" /dev/nbd1
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$clone_uuid2" /dev/nbd2
|
|
|
|
sleep 1
|
|
|
|
cmp /dev/nbd1 /dev/nbd2
|
|
|
|
# Compare snapshot with first clone
|
|
|
|
cmp /dev/nbd0 /dev/nbd1 && false
|
|
|
|
|
|
|
|
snapshot_bdev=$(rpc_cmd bdev_get_bdevs -b "lvs_test/lvol_snapshot")
|
|
|
|
clone_bdev1=$(rpc_cmd bdev_get_bdevs -b "lvs_test/clone_test1")
|
|
|
|
clone_bdev2=$(rpc_cmd bdev_get_bdevs -b "lvs_test/lvol_test")
|
|
|
|
|
|
|
|
# Check snapshot consistency
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.snapshot' <<< "$snapshot_bdev")" = "true" ]
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.clone' <<< "$snapshot_bdev")" = "false" ]
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.clones|sort' <<< "$snapshot_bdev")" = "$(jq '.|sort' <<< '["lvol_test", "clone_test1", "clone_test2"]')" ]
|
|
|
|
|
|
|
|
# Check first clone consistency
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.snapshot' <<< "$clone_bdev1")" = "false" ]
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.clone' <<< "$clone_bdev1")" = "true" ]
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.base_snapshot' <<< "$clone_bdev1")" = '"lvol_snapshot"' ]
|
|
|
|
|
|
|
|
# Check second clone consistency
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.snapshot' <<< "$clone_bdev2")" = "false" ]
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.clone' <<< "$clone_bdev2")" = "true" ]
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.base_snapshot' <<< "$clone_bdev2")" = '"lvol_snapshot"' ]
|
|
|
|
|
|
|
|
# Destroy first clone and check if it is deleted from snapshot
|
|
|
|
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd0
|
|
|
|
rpc_cmd bdev_lvol_delete "$clone_uuid1"
|
|
|
|
snapshot_bdev=$(rpc_cmd bdev_get_bdevs -b "lvs_test/lvol_snapshot")
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.clones|sort' <<< "$snapshot_bdev")" = "$(jq '.|sort' <<< '["lvol_test", "clone_test2"]')" ]
|
|
|
|
|
|
|
|
# Clean up
|
|
|
|
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd1
|
|
|
|
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd2
|
|
|
|
rpc_cmd bdev_lvol_delete "$lvol_uuid"
|
|
|
|
rpc_cmd bdev_lvol_delete "$clone_uuid2"
|
|
|
|
rpc_cmd bdev_lvol_delete "$snapshot_uuid"
|
|
|
|
rpc_cmd bdev_lvol_delete_lvstore -u "$lvs_uuid"
|
|
|
|
rpc_cmd bdev_malloc_delete "$malloc_name"
|
|
|
|
check_leftover_devices
|
|
|
|
}
|
|
|
|
|
2019-12-04 22:49:04 +00:00
|
|
|
# Testing usage of bdev_lvol_inflate
|
|
|
|
function test_clone_inflate() {
|
|
|
|
malloc_name=$(rpc_cmd bdev_malloc_create $MALLOC_SIZE_MB $MALLOC_BS)
|
|
|
|
lvs_uuid=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name" lvs_test)
|
|
|
|
|
|
|
|
# Calculate size and create lvol bdev
|
|
|
|
lvol_size_mb=$( round_down $(( LVS_DEFAULT_CAPACITY_MB / 4 )) )
|
|
|
|
|
|
|
|
lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" lvol_test "$lvol_size_mb")
|
|
|
|
lvol=$(rpc_cmd bdev_get_bdevs -b "$lvol_uuid")
|
|
|
|
|
|
|
|
# Fill lvol bdev with 100% of its space
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid" /dev/nbd0
|
|
|
|
run_fio_test /dev/nbd0 0 $(( lvol_size_mb * 1024 * 1024 )) "write" "0xcc"
|
|
|
|
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd0
|
|
|
|
|
|
|
|
# Create snapshots of lvol bdev
|
|
|
|
snapshot_uuid=$(rpc_cmd bdev_lvol_snapshot lvs_test/lvol_test lvol_snapshot)
|
|
|
|
|
|
|
|
# Create clone of snapshot
|
|
|
|
lvol=$(rpc_cmd bdev_get_bdevs -b "$lvol_uuid")
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.thin_provision' <<< "$lvol")" = "true" ]
|
|
|
|
|
|
|
|
# Fill part of clone with data of known pattern
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid" /dev/nbd0
|
|
|
|
first_fill=0
|
|
|
|
second_fill=$(( lvol_size_mb * 1024 * 1024 * 3 / 4 ))
|
|
|
|
run_fio_test /dev/nbd0 $first_fill $(( 1024 * 1024 )) "write" "0xdd"
|
|
|
|
run_fio_test /dev/nbd0 $second_fill $(( 1024 * 1024 )) "write" "0xdd"
|
|
|
|
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd0
|
|
|
|
|
|
|
|
# Do inflate
|
|
|
|
rpc_cmd bdev_lvol_inflate lvs_test/lvol_test
|
|
|
|
lvol=$(rpc_cmd bdev_get_bdevs -b "$lvol_uuid")
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.thin_provision' <<< "$lvol")" = "false" ]
|
|
|
|
|
|
|
|
# Delete snapshot
|
|
|
|
rpc_cmd bdev_lvol_delete "$snapshot_uuid"
|
|
|
|
|
|
|
|
# Check data consistency
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid" /dev/nbd0
|
|
|
|
run_fio_test /dev/nbd0 $first_fill $(( 1024 * 1024 )) "read" "0xdd"
|
|
|
|
run_fio_test /dev/nbd0 $(( (first_fill + 1) * 1024 * 1024 )) $(( second_fill - 1024 * 1024 )) "read" "0xcc"
|
|
|
|
run_fio_test /dev/nbd0 $second_fill $(( 1024 * 1024 )) "read" "0xdd"
|
|
|
|
run_fio_test /dev/nbd0 $(( second_fill + 1024 * 1024 )) $(( lvol_size_mb * 1024 * 1024 - ( second_fill + 1024 * 1024 ) )) "read" "0xcc"
|
|
|
|
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd0
|
|
|
|
|
|
|
|
# Clean up
|
|
|
|
rpc_cmd bdev_lvol_delete "$lvol_uuid"
|
|
|
|
rpc_cmd bdev_lvol_delete_lvstore -u "$lvs_uuid"
|
|
|
|
rpc_cmd bdev_malloc_delete "$malloc_name"
|
|
|
|
check_leftover_devices
|
|
|
|
}
|
|
|
|
|
2019-12-05 12:18:16 +00:00
|
|
|
# Create chain of snapshot<-snapshot2<-lvol_test lvol bdevs.
|
|
|
|
# Decouple lvol_test twice and delete the remaining snapshot lvol.
|
|
|
|
# Each time check consistency of snapshot-clone relations and written data.
|
|
|
|
function test_clone_decouple_parent() {
|
|
|
|
malloc_name=$(rpc_cmd bdev_malloc_create $MALLOC_SIZE_MB $MALLOC_BS)
|
|
|
|
lvs_uuid=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name" lvs_test)
|
|
|
|
|
|
|
|
# Calculate size and create lvol bdev
|
|
|
|
lvol_size_mb=$(( 5 * LVS_DEFAULT_CLUSTER_SIZE_MB ))
|
|
|
|
lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" lvol_test "$lvol_size_mb" -t)
|
|
|
|
lvol=$(rpc_cmd bdev_get_bdevs -b "$lvol_uuid")
|
|
|
|
|
|
|
|
# Decouple_parent should fail on lvol bdev without a parent
|
|
|
|
rpc_cmd bdev_lvol_decouple_parent lvs_test/lvol_test && false
|
|
|
|
|
|
|
|
# Fill first four out of 5 clusters of clone with data of known pattern
|
|
|
|
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid" /dev/nbd0
|
|
|
|
begin_fill=0
|
|
|
|
end_fill=$(( lvol_size_mb * 4 * 1024 * 1024 / 5 ))
|
|
|
|
run_fio_test /dev/nbd0 $begin_fill $end_fill "write" "0xdd"
|
|
|
|
|
|
|
|
# Create snapshot (snapshot<-lvol_bdev)
|
|
|
|
snapshot_uuid=$(rpc_cmd bdev_lvol_snapshot lvs_test/lvol_test lvol_snapshot)
|
|
|
|
|
|
|
|
# Fill second and fourth cluster of clone with data of known pattern
|
|
|
|
start_fill=$(( lvol_size_mb * 1024 * 1024 / 5 ))
|
|
|
|
fill_range=$start_fill
|
|
|
|
run_fio_test /dev/nbd0 $start_fill $fill_range "write" "0xcc"
|
|
|
|
start_fill=$(( lvol_size_mb * 3 * 1024 * 1024 / 5 ))
|
|
|
|
run_fio_test /dev/nbd0 $start_fill $fill_range "write" "0xcc"
|
|
|
|
|
|
|
|
# Create snapshot (snapshot<-snapshot2<-lvol_bdev)
|
|
|
|
snapshot_uuid2=$(rpc_cmd bdev_lvol_snapshot lvs_test/lvol_test lvol_snapshot2)
|
|
|
|
|
|
|
|
# Fill second cluster of clone with data of known pattern
|
|
|
|
start_fill=$fill_range
|
|
|
|
run_fio_test /dev/nbd0 $start_fill $fill_range "write" "0xee"
|
|
|
|
|
|
|
|
# Check data consistency
|
|
|
|
pattern=( "0xdd" "0xee" "0xdd" "0xcc" "0x00" )
|
|
|
|
for i in "${!pattern[@]}"; do
|
|
|
|
start_fill=$(( lvol_size_mb * i * 1024 * 1024 / 5 ))
|
|
|
|
run_fio_test /dev/nbd0 $start_fill $fill_range "read" "${pattern[i]}"
|
|
|
|
done
|
|
|
|
|
|
|
|
# Decouple_parent of lvol bdev resulting in two relation chains:
|
|
|
|
# - snapshot<-lvol_bdev
|
|
|
|
# - snapshot<-snapshot2
|
|
|
|
rpc_cmd bdev_lvol_decouple_parent lvs_test/lvol_test
|
|
|
|
lvol=$(rpc_cmd bdev_get_bdevs -b "$lvol_uuid")
|
|
|
|
snapshot=$(rpc_cmd bdev_get_bdevs -b "$snapshot_uuid")
|
|
|
|
snapshot2=$(rpc_cmd bdev_get_bdevs -b "$snapshot_uuid2")
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.thin_provision' <<< "$lvol")" = "true" ]
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.clone' <<< "$lvol")" = "true" ]
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.snapshot' <<< "$lvol")" = "false" ]
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.clone' <<< "$snapshot")" = "false" ]
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.clone' <<< "$snapshot2")" = "true" ]
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.snapshot' <<< "$snapshot2")" = "true" ]
|
|
|
|
|
|
|
|
# Delete second snapshot
|
|
|
|
rpc_cmd bdev_lvol_delete "$snapshot_uuid2"
|
|
|
|
|
|
|
|
# Check data consistency
|
|
|
|
for i in "${!pattern[@]}"; do
|
|
|
|
start_fill=$(( lvol_size_mb * i * 1024 * 1024 / 5 ))
|
|
|
|
run_fio_test /dev/nbd0 $start_fill $fill_range "read" "${pattern[i]}"
|
|
|
|
done
|
|
|
|
|
|
|
|
# Decouple_parent of lvol bdev again resulting in two relation chains:
|
|
|
|
# - lvol_bdev
|
|
|
|
# - snapshot<-snapshot2
|
|
|
|
rpc_cmd bdev_lvol_decouple_parent lvs_test/lvol_test
|
|
|
|
lvol=$(rpc_cmd bdev_get_bdevs -b "$lvol_uuid")
|
|
|
|
snapshot=$(rpc_cmd bdev_get_bdevs -b "$snapshot_uuid")
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.thin_provision' <<< "$lvol")" = "true" ]
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.clone' <<< "$lvol")" = "false" ]
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.snapshot' <<< "$lvol")" = "false" ]
|
|
|
|
[ "$(jq '.[].driver_specific.lvol.clone' <<< "$snapshot")" = "false" ]
|
|
|
|
|
|
|
|
# Delete first snapshot
|
|
|
|
rpc_cmd bdev_lvol_delete "$snapshot_uuid"
|
|
|
|
|
|
|
|
# Check data consistency
|
|
|
|
for i in "${!pattern[@]}"; do
|
|
|
|
start_fill=$(( lvol_size_mb * i * 1024 * 1024 / 5 ))
|
|
|
|
run_fio_test /dev/nbd0 $start_fill $fill_range "read" "${pattern[i]}"
|
|
|
|
done
|
|
|
|
|
|
|
|
# Clean up
|
|
|
|
rpc_cmd bdev_lvol_delete "$lvol_uuid"
|
|
|
|
rpc_cmd bdev_lvol_delete_lvstore -u "$lvs_uuid"
|
|
|
|
rpc_cmd bdev_malloc_delete "$malloc_name"
|
|
|
|
check_leftover_devices
|
|
|
|
}
|
|
|
|
|
2019-12-01 21:43:50 +00:00
|
|
|
$rootdir/app/spdk_tgt/spdk_tgt &
|
|
|
|
spdk_pid=$!
|
|
|
|
trap 'killprocess "$spdk_pid"; exit 1' SIGINT SIGTERM EXIT
|
|
|
|
waitforlisten $spdk_pid
|
|
|
|
modprobe nbd
|
|
|
|
|
|
|
|
run_test "test_snapshot_compare_with_lvol_bdev" test_snapshot_compare_with_lvol_bdev
|
2019-12-03 21:02:27 +00:00
|
|
|
run_test "test_create_snapshot_with_io" test_create_snapshot_with_io
|
2019-12-03 21:54:51 +00:00
|
|
|
run_test "test_create_snapshot_of_snapshot" test_create_snapshot_of_snapshot
|
2019-12-04 11:34:38 +00:00
|
|
|
run_test "test_clone_snapshot_relations" test_clone_snapshot_relations
|
2019-12-04 22:49:04 +00:00
|
|
|
run_test "test_clone_inflate" test_clone_inflate
|
2019-12-05 12:18:16 +00:00
|
|
|
run_test "test_clone_decouple_parent" test_clone_decouple_parent
|
2019-12-01 21:43:50 +00:00
|
|
|
|
|
|
|
trap - SIGINT SIGTERM EXIT
|
|
|
|
killprocess $spdk_pid
|