From 2a6d827e7a358d39cc033961458bbdad604f27d7 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Tue, 14 Mar 2023 11:38:38 -0700 Subject: [PATCH] Add test for changing devices Add a relatively small initial test for swapping devices around. Signed-off-by: Zach Brown --- tests/golden/change-devices | 27 +++++++++++++ tests/sequence | 1 + tests/tests/change-devices.sh | 76 +++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 tests/golden/change-devices create mode 100644 tests/tests/change-devices.sh diff --git a/tests/golden/change-devices b/tests/golden/change-devices new file mode 100644 index 00000000..46f68e48 --- /dev/null +++ b/tests/golden/change-devices @@ -0,0 +1,27 @@ +== make tmp sparse data dev files +== make scratch fs +== small new data device fails +rc: 1 +== check sees data device errors +rc: 1 +rc: 0 +== preparing while mounted fails +rc: 1 +== preparing without recovery fails +rc: 1 +== check sees metadata errors +rc: 1 +rc: 1 +== preparing with file data fails +rc: 1 +== preparing after emptied +rc: 0 +== checks pass +rc: 0 +rc: 0 +== using prepared +== preparing larger and resizing +rc: 0 +equal_prepared +large_prepared +resized larger test rc: 0 diff --git a/tests/sequence b/tests/sequence index 9a5298a0..0bbf6315 100644 --- a/tests/sequence +++ b/tests/sequence @@ -36,6 +36,7 @@ cross-mount-data-free.sh persistent-item-vers.sh setup-error-teardown.sh resize-devices.sh +change-devices.sh fence-and-reclaim.sh orphan-inodes.sh mount-unmount-race.sh diff --git a/tests/tests/change-devices.sh b/tests/tests/change-devices.sh new file mode 100644 index 00000000..c346161f --- /dev/null +++ b/tests/tests/change-devices.sh @@ -0,0 +1,76 @@ +# +# test changing devices +# + +echo "== make tmp sparse data dev files" +sz=$(blockdev --getsize64 "$T_EX_DATA_DEV") +large_sz=$((sz * 2)) +touch "$T_TMP."{small,equal,large} +truncate -s 1MB "$T_TMP.small" +truncate -s $sz "$T_TMP.equal" +truncate -s $large_sz "$T_TMP.large" + +echo "== make scratch fs" +t_quiet scoutfs mkfs -f -Q 0,127.0.0.1,53000 "$T_EX_META_DEV" "$T_EX_DATA_DEV" +SCR="$T_TMPDIR/mnt.scratch" +mkdir -p "$SCR" + +echo "== small new data device fails" +t_rc scoutfs prepare-empty-data-device "$T_EX_META_DEV" "$T_TMP.small" + +echo "== check sees data device errors" +t_rc scoutfs prepare-empty-data-device --check "$T_EX_META_DEV" "$T_TMP.small" +t_rc scoutfs prepare-empty-data-device --check "$T_EX_META_DEV" + +echo "== preparing while mounted fails" +mount -t scoutfs -o metadev_path=$T_EX_META_DEV,quorum_slot_nr=0 "$T_EX_DATA_DEV" "$SCR" +t_rc scoutfs prepare-empty-data-device "$T_EX_META_DEV" "$T_TMP.equal" +umount "$SCR" + +echo "== preparing without recovery fails" +mount -t scoutfs -o metadev_path=$T_EX_META_DEV,quorum_slot_nr=0 "$T_EX_DATA_DEV" "$SCR" +umount -f "$SCR" +t_rc scoutfs prepare-empty-data-device "$T_EX_META_DEV" "$T_TMP.equal" + +echo "== check sees metadata errors" +t_rc scoutfs prepare-empty-data-device --check "$T_EX_META_DEV" +t_rc scoutfs prepare-empty-data-device --check "$T_EX_META_DEV" "$T_TMP.equal" + +echo "== preparing with file data fails" +mount -t scoutfs -o metadev_path=$T_EX_META_DEV,quorum_slot_nr=0 "$T_EX_DATA_DEV" "$SCR" +echo hi > "$SCR"/file +umount "$SCR" +scoutfs print "$T_EX_META_DEV" > "$T_TMP.print" +t_rc scoutfs prepare-empty-data-device "$T_EX_META_DEV" "$T_TMP.equal" + +echo "== preparing after emptied" +mount -t scoutfs -o metadev_path=$T_EX_META_DEV,quorum_slot_nr=0 "$T_EX_DATA_DEV" "$SCR" +rm -f "$SCR"/file +umount "$SCR" +t_rc scoutfs prepare-empty-data-device "$T_EX_META_DEV" "$T_TMP.equal" + +echo "== checks pass" +t_rc scoutfs prepare-empty-data-device --check "$T_EX_META_DEV" +t_rc scoutfs prepare-empty-data-device --check "$T_EX_META_DEV" "$T_TMP.equal" + +echo "== using prepared" +scr_loop=$(losetup --find --show "$T_TMP.equal") +mount -t scoutfs -o metadev_path=$T_EX_META_DEV,quorum_slot_nr=0 "$scr_loop" "$SCR" +touch "$SCR"/equal_prepared +equal_tot=$(scoutfs statfs -s total_data_blocks -p "$SCR") +umount "$SCR" +losetup -d "$scr_loop" + +echo "== preparing larger and resizing" +t_rc scoutfs prepare-empty-data-device "$T_EX_META_DEV" "$T_TMP.large" +scr_loop=$(losetup --find --show "$T_TMP.large") +mount -t scoutfs -o metadev_path=$T_EX_META_DEV,quorum_slot_nr=0 "$scr_loop" "$SCR" +touch "$SCR"/large_prepared +ls "$SCR" +scoutfs resize-devices -p "$SCR" -d $large_sz +large_tot=$(scoutfs statfs -s total_data_blocks -p "$SCR") +test "$large_tot" -gt "$equal_tot" ; echo "resized larger test rc: $?" +umount "$SCR" +losetup -d "$scr_loop" + +t_pass