fragmap: add test cases
Longhorn 6138 Signed-off-by: Derek Su <derek.su@suse.com>
This commit is contained in:
parent
0168515003
commit
d8c8680e28
@ -9,44 +9,207 @@ source $rootdir/test/common/autotest_common.sh
|
||||
source $rootdir/test/lvol/common.sh
|
||||
source $rootdir/test/bdev/nbd_common.sh
|
||||
|
||||
function test_fragmap() {
|
||||
# Create lvs
|
||||
bs_malloc_name=$(rpc_cmd bdev_malloc_create 20 $MALLOC_BS)
|
||||
lvs_uuid=$(rpc_cmd bdev_lvol_create_lvstore "$bs_malloc_name" lvs_test)
|
||||
NUM_CLUSTERS=10
|
||||
LVS_DEFAULT_CLUSTER_SIZE_BTYE=$((LVS_DEFAULT_CLUSTER_SIZE_MB*1024*1024))
|
||||
|
||||
# Create lvol with 4 cluster
|
||||
lvol_size=$((LVS_DEFAULT_CLUSTER_SIZE_MB * 4))
|
||||
function verify() {
|
||||
local fragmap="$1"
|
||||
local expected_cluster_size="$2"
|
||||
local expected_num_clusters="$3"
|
||||
local expected_num_allocated_clusters="$4"
|
||||
local expected_fragmap="$5"
|
||||
|
||||
[ "$(jq '.cluster_size' <<< "$fragmap")" == "$expected_cluster_size" ]
|
||||
[ "$(jq '.num_clusters' <<< "$fragmap")" == "$expected_num_clusters" ]
|
||||
[ "$(jq '.num_allocated_clusters' <<< "$fragmap")" == "$expected_num_allocated_clusters" ]
|
||||
[ "$(jq -r '.fragmap' <<< "$fragmap")" == "$expected_fragmap" ]
|
||||
}
|
||||
|
||||
function test_fragmap_empty_lvol() {
|
||||
# Create lvs
|
||||
malloc_name=$(rpc_cmd bdev_malloc_create 80 $MALLOC_BS)
|
||||
lvs_uuid=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name" lvs_test)
|
||||
|
||||
# Create lvol with 10 cluster
|
||||
lvol_size=$((LVS_DEFAULT_CLUSTER_SIZE_MB * "$NUM_CLUSTERS"))
|
||||
lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" lvol_test "$lvol_size" -t)
|
||||
|
||||
# Fill second and fourth cluster of lvol
|
||||
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid" /dev/nbd0
|
||||
dd if=/dev/urandom of=/dev/nbd0 oflag=direct bs="$LVS_DEFAULT_CLUSTER_SIZE" count=1 seek=1
|
||||
dd if=/dev/urandom of=/dev/nbd0 oflag=direct bs="$LVS_DEFAULT_CLUSTER_SIZE" count=1 seek=3
|
||||
|
||||
# Expected map: 00000000 00000000
|
||||
fragmap=$(rpc_cmd bdev_lvol_get_fragmap $lvol_uuid)
|
||||
verify "$fragmap" "$LVS_DEFAULT_CLUSTER_SIZE_BTYE" "$NUM_CLUSTERS" 0 "AAA="
|
||||
|
||||
# Stop nbd device
|
||||
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)
|
||||
|
||||
# Fill first and third cluster of lvol
|
||||
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid" /dev/nbd0
|
||||
dd if=/dev/urandom of=/dev/nbd0 oflag=direct bs="$LVS_DEFAULT_CLUSTER_SIZE" count=1
|
||||
dd if=/dev/urandom of=/dev/nbd0 oflag=direct bs="$LVS_DEFAULT_CLUSTER_SIZE" count=1 seek=2
|
||||
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd0
|
||||
|
||||
|
||||
|
||||
# Stop nbd devices
|
||||
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd1
|
||||
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd0
|
||||
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
|
||||
}
|
||||
|
||||
function test_fragmap_data_hole() {
|
||||
# Create lvs
|
||||
malloc_name=$(rpc_cmd bdev_malloc_create 80 $MALLOC_BS)
|
||||
lvs_uuid=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name" lvs_test)
|
||||
|
||||
# Create lvol with 10 cluster
|
||||
lvol_size=$((LVS_DEFAULT_CLUSTER_SIZE_MB * "$NUM_CLUSTERS"))
|
||||
lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" lvol_test "$lvol_size" -t)
|
||||
|
||||
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid" /dev/nbd0
|
||||
|
||||
# Expected map: 00000001 00000000 (1st cluster is wriiten)
|
||||
|
||||
# Read entire fragmap
|
||||
dd if=/dev/urandom of=/dev/nbd0 oflag=direct bs=4096 count=1
|
||||
fragmap=$(rpc_cmd bdev_lvol_get_fragmap $lvol_uuid)
|
||||
verify "$fragmap" "$LVS_DEFAULT_CLUSTER_SIZE_BTYE" "$NUM_CLUSTERS" "1" "AQA="
|
||||
|
||||
# Read fragmap [0, 5) clusters
|
||||
size=$((LVS_DEFAULT_CLUSTER_SIZE_BTYE*5))
|
||||
fragmap=$(rpc_cmd bdev_lvol_get_fragmap --offset 0 --size $size $lvol_uuid)
|
||||
verify "$fragmap" "$LVS_DEFAULT_CLUSTER_SIZE_BTYE" "5" "1" "AQ=="
|
||||
|
||||
# Read fragmap [5, 10) clusters
|
||||
offset=$((LVS_DEFAULT_CLUSTER_SIZE_BTYE*5))
|
||||
fragmap=$(rpc_cmd bdev_lvol_get_fragmap --offset $offset --size $size $lvol_uuid)
|
||||
verify "$fragmap" "$LVS_DEFAULT_CLUSTER_SIZE_BTYE" "5" "0" "AA=="
|
||||
|
||||
# Stop nbd device
|
||||
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd0
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
function test_fragmap_hole_data() {
|
||||
# Create lvs
|
||||
malloc_name=$(rpc_cmd bdev_malloc_create 80 $MALLOC_BS)
|
||||
lvs_uuid=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name" lvs_test)
|
||||
|
||||
# Create lvol with 10 cluster
|
||||
lvol_size=$((LVS_DEFAULT_CLUSTER_SIZE_MB * "$NUM_CLUSTERS"))
|
||||
lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" lvol_test "$lvol_size" -t)
|
||||
|
||||
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid" /dev/nbd0
|
||||
|
||||
# Expected map: 00000000 00000010 (10th cluster is wriiten)
|
||||
|
||||
# Read entire fragmap
|
||||
dd if=/dev/urandom of=/dev/nbd0 oflag=direct bs=4096 count=1 seek=9216
|
||||
fragmap=$(rpc_cmd bdev_lvol_get_fragmap $lvol_uuid)
|
||||
verify "$fragmap" "$LVS_DEFAULT_CLUSTER_SIZE_BTYE" "$NUM_CLUSTERS" "1" "AAI="
|
||||
|
||||
# Read fragmap [0, 5) clusters
|
||||
size=$((LVS_DEFAULT_CLUSTER_SIZE_BTYE*5))
|
||||
fragmap=$(rpc_cmd bdev_lvol_get_fragmap --offset 0 --size $size $lvol_uuid)
|
||||
verify "$fragmap" "$LVS_DEFAULT_CLUSTER_SIZE_BTYE" "5" "0" "AA=="
|
||||
|
||||
# Read fragmap [5, 10) clusters
|
||||
offset=$((LVS_DEFAULT_CLUSTER_SIZE_BTYE*5))
|
||||
fragmap=$(rpc_cmd bdev_lvol_get_fragmap --offset $offset --size $size $lvol_uuid)
|
||||
verify "$fragmap" "$LVS_DEFAULT_CLUSTER_SIZE_BTYE" "5" "1" "EA=="
|
||||
|
||||
# Stop nbd device
|
||||
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd0
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
function test_fragmap_hole_data_hole() {
|
||||
# Create lvs
|
||||
malloc_name=$(rpc_cmd bdev_malloc_create 80 $MALLOC_BS)
|
||||
lvs_uuid=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name" lvs_test)
|
||||
|
||||
# Create lvol with 10 cluster
|
||||
lvol_size=$((LVS_DEFAULT_CLUSTER_SIZE_MB * "$NUM_CLUSTERS"))
|
||||
lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" lvol_test "$lvol_size" -t)
|
||||
|
||||
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid" /dev/nbd0
|
||||
|
||||
# Expected map: 01100000 00000000
|
||||
|
||||
# Read entire fragmap
|
||||
dd if=/dev/urandom of=/dev/nbd0 oflag=direct bs=4096 count=2048 seek=5120
|
||||
fragmap=$(rpc_cmd bdev_lvol_get_fragmap $lvol_uuid)
|
||||
verify "$fragmap" "$LVS_DEFAULT_CLUSTER_SIZE_BTYE" "$NUM_CLUSTERS" "2" "YAA="
|
||||
|
||||
# Read fragmap [0, 5) clusters
|
||||
size=$((LVS_DEFAULT_CLUSTER_SIZE_BTYE*5))
|
||||
fragmap=$(rpc_cmd bdev_lvol_get_fragmap --offset 0 --size $size $lvol_uuid)
|
||||
verify "$fragmap" "$LVS_DEFAULT_CLUSTER_SIZE_BTYE" "5" "0" "AA=="
|
||||
|
||||
# Read fragmap [5, 10) clusters
|
||||
offset=$((LVS_DEFAULT_CLUSTER_SIZE_BTYE*5))
|
||||
fragmap=$(rpc_cmd bdev_lvol_get_fragmap --offset $offset --size $size $lvol_uuid)
|
||||
verify "$fragmap" "$LVS_DEFAULT_CLUSTER_SIZE_BTYE" "5" "2" "Aw=="
|
||||
|
||||
# Stop nbd device
|
||||
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd0
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
function test_fragmap_data_hole_data() {
|
||||
# Create lvs
|
||||
malloc_name=$(rpc_cmd bdev_malloc_create 80 $MALLOC_BS)
|
||||
lvs_uuid=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name" lvs_test)
|
||||
|
||||
# Create lvol with 10 cluster
|
||||
lvol_size=$((LVS_DEFAULT_CLUSTER_SIZE_MB * "$NUM_CLUSTERS"))
|
||||
lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" lvol_test "$lvol_size" -t)
|
||||
|
||||
nbd_start_disks "$DEFAULT_RPC_ADDR" "$lvol_uuid" /dev/nbd0
|
||||
|
||||
# Expected map: 10000111 00000011
|
||||
|
||||
# Read entire fragmap
|
||||
dd if=/dev/urandom of=/dev/nbd0 oflag=direct bs=4096 count=3072 seek=0
|
||||
dd if=/dev/urandom of=/dev/nbd0 oflag=direct bs=4096 count=3072 seek=7168
|
||||
fragmap=$(rpc_cmd bdev_lvol_get_fragmap $lvol_uuid)
|
||||
verify "$fragmap" "$LVS_DEFAULT_CLUSTER_SIZE_BTYE" "$NUM_CLUSTERS" "6" "hwM="
|
||||
|
||||
# Read fragmap [0, 5) clusters
|
||||
size=$((LVS_DEFAULT_CLUSTER_SIZE_BTYE*5))
|
||||
fragmap=$(rpc_cmd bdev_lvol_get_fragmap --offset 0 --size $size $lvol_uuid)
|
||||
verify "$fragmap" "$LVS_DEFAULT_CLUSTER_SIZE_BTYE" "5" "3" "Bw=="
|
||||
|
||||
# Read fragmap [5, 10) clusters
|
||||
offset=$((LVS_DEFAULT_CLUSTER_SIZE_BTYE*5))
|
||||
fragmap=$(rpc_cmd bdev_lvol_get_fragmap --offset $offset --size $size $lvol_uuid)
|
||||
verify "$fragmap" "$LVS_DEFAULT_CLUSTER_SIZE_BTYE" "5" "3" "HA=="
|
||||
|
||||
# Stop nbd device
|
||||
nbd_stop_disks "$DEFAULT_RPC_ADDR" /dev/nbd0
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
$SPDK_BIN_DIR/spdk_tgt &
|
||||
spdk_pid=$!
|
||||
trap 'killprocess "$spdk_pid"; exit 1' SIGINT SIGTERM EXIT
|
||||
waitforlisten $spdk_pid
|
||||
modprobe nbd
|
||||
|
||||
run_test "test_shallow_copy_compare" test_shallow_copy_compare
|
||||
run_test "test_fragmap_empty_lvol" test_fragmap_empty_lvol
|
||||
run_test "test_fragmap_data_hole" test_fragmap_data_hole
|
||||
run_test "test_fragmap_hole_data" test_fragmap_hole_data
|
||||
rrun_test "test_fragmap_hole_data_hole" test_fragmap_hole_data_hole
|
||||
run_test "test_fragmap_data_hole_data" test_fragmap_data_hole_data
|
||||
|
||||
trap - SIGINT SIGTERM EXIT
|
||||
killprocess $spdk_pid
|
||||
killprocess $spdk_pid
|
@ -21,6 +21,7 @@ run_test "lvol_provisioning" $rootdir/test/lvol/thin_provisioning.sh
|
||||
run_test "lvol_esnap" $rootdir/test/lvol/esnap/esnap
|
||||
run_test "lvol_external_snapshot" $rootdir/test/lvol/external_snapshot.sh
|
||||
run_test "lvol_external_copy" $rootdir/test/lvol/external_copy.sh
|
||||
run_test "lvol_fragmap" $rootdir/test/lvol/fragmap.sh
|
||||
timing_exit basic
|
||||
|
||||
timing_exit lvol
|
||||
|
Loading…
Reference in New Issue
Block a user