diff options
-rw-r--r-- | tests/geo-rep.rc | 70 | ||||
-rw-r--r-- | tests/geo-rep/georep-basic-dr-rsync.t | 26 |
2 files changed, 96 insertions, 0 deletions
diff --git a/tests/geo-rep.rc b/tests/geo-rep.rc index e811f9a5b76..1a44b4a3941 100644 --- a/tests/geo-rep.rc +++ b/tests/geo-rep.rc @@ -160,3 +160,73 @@ function create_georep_session() rc=$? if test $rc != 0; then return $rc; fi } + +# logrotate_simulate should be called (rotate_count + 1) times to cause +# an unlink and a gfid re-allocation. +# remember to keep the file name and rotate_count the same across the +# calls +function logrotate_simulate() +{ + file_name=$1 + declare -i rotate_count=$2 + + while [ $rotate_count -ge 0 ]; do + source_file="${master_mnt}/$file_name.$((rotate_count))" + if [ $rotate_count -eq 0 ]; then + source_file="${master_mnt}/$file_name" + fi + if [ -f "${source_file}" ]; then + mv "${source_file}" "${master_mnt}/$file_name.$((rotate_count+1))" + fi + ((rotate_count--)) + done + + # logrotate causes gfid to be rellocated to a new file created + # after an unlink and a blind rename later causes georep session + # to go Faulty + # this should not happen if source basename on slave is tested + # to be linked with its own gfid as on master, before invoking + # the rename syscall + touch ${master_mnt}/$file_name + rotate_count=$2 + unlink_file_name="${master_mnt}/$file_name.$((rotate_count+1))" + unlink $unlink_file_name +} + +function create_rename() +{ + file_name=$1 + echo $file_name > ${master_mnt}/$file_name + mv ${master_mnt}/$file_name ${master_mnt}/$file_name.bak +} + +function create_rename_ok() +{ + file_name=$1 + # after a log replay, we don't expect the original file + # to be recreated i.e. a dangling entry without a corresponding + # back-end gfid link should not exist on the slave + if [ -f "${slave_mnt}/$file_name" ]; then + return 1 + fi + return 0 +} + +function hardlink_rename() +{ + file_name=$1 + echo $file_name > ${master_mnt}/$file_name + ln ${master_mnt}/$file_name ${master_mnt}/$file_name.hl + mv ${master_mnt}/$file_name.hl ${master_mnt}/$file_name +} + +function hardlink_rename_ok() +{ + file_name=$1 + # the hardlink file should not exist on the slave after renaming + # to one of its links + if [ -f "${slave_mnt}/$file_name.hl" ]; then + return 1 + fi + return 0 +} diff --git a/tests/geo-rep/georep-basic-dr-rsync.t b/tests/geo-rep/georep-basic-dr-rsync.t index e8b39938082..39da524f639 100644 --- a/tests/geo-rep/georep-basic-dr-rsync.t +++ b/tests/geo-rep/georep-basic-dr-rsync.t @@ -119,6 +119,32 @@ TEST unlink_ok ${slave_mnt}/changelog_d2 TEST data_ok ${slave_mnt}/changelog_f1 "HelloWorld!" #55 TEST chown_file_ok ${slave_mnt}/changelog_chown_f1 +# logrotate test +logrotate_simulate logrotate_test_file 2 +logrotate_simulate logrotate_test_file 2 +logrotate_simulate logrotate_test_file 2 +logrotate_simulate logrotate_test_file 2 +sleep 15 +EXPECT 0 check_status_num_rows "Faulty" + +# CREATE + RENAME +create_rename create_rename_test_file +sleep 15 +TEST $GEOREP_CLI $master $slave stop +sleep 5 +TEST $GEOREP_CLI $master $slave start +sleep 15 +TEST create_rename_ok create_rename_test_file #58 + +# hard-link rename +hardlink_rename hardlink_rename_test_file +sleep 15 +TEST $GEOREP_CLI $master $slave stop +sleep 5 +TEST $GEOREP_CLI $master $slave start +sleep 15 +TEST hardlink_rename_ok hardlink_rename_test_file + #Stop Geo-rep TEST $GEOREP_CLI $master $slave stop |