function check_status() { local search_key=$1 $GEOREP_CLI $master $slave status detail | egrep -i "$search_key" } function check_status_num_rows() { local search_key=$1 $GEOREP_CLI $master $slave status detail | egrep -i "$search_key" | wc -l } function create_data() { prefix=$1 # GF_FOP_MKNOD # GF_FOP_MKDIR # GF_FOP_UNLINK # GF_FOP_RMDIR # GF_FOP_SYMLINK # GF_FOP_RENAME # GF_FOP_LINK # GF_FOP_SETXATTR # GF_FOP_REMOVEXATTR # GF_FOP_CREATE # GF_FOP_SETATTR # Regular file touch ${master_mnt}/${prefix}_f1 touch ${master_mnt}/${prefix}_f2 touch ${master_mnt}/${prefix}_f3 # dir mkdir ${master_mnt}/${prefix}_d1 mkdir ${master_mnt}/${prefix}_d2 touch ${master_mnt}/${prefix}_d3 # Hardlink ln ${master_mnt}/${prefix}_f1 ${master_mnt}/${prefix}_hl1 # Symlink cd ${master_mnt} ln -s ${prefix}_f1 ${prefix}_sl1 cd - # data echo "HelloWorld!" >> ${master_mnt}/${prefix}_f1 # UNLINK rm ${master_mnt}/${prefix}_f2 # RMDIR rmdir ${master_mnt}/${prefix}_d2 # Rename - File mv ${master_mnt}/${prefix}_f3 ${master_mnt}/${prefix}_f4 # Rename - Dir mv ${master_mnt}/${prefix}_d3 ${master_mnt}/${prefix}_d4 # chown touch ${master_mnt}/${prefix}_chown_f1 chown 1000:1000 ${master_mnt}/${prefix}_chown_f1 } function chown_file_ok() { local file_owner=$(stat --format "%u:%g" "$1" 2>/dev/null) if test "X$file_owner" != "X1000:1000"; then return 1;fi } function regular_file_ok() { local file_type=$(stat --format "%F" "$1") if test "X$file_type" != "Xregular file"; then return 1; fi } function directory_ok() { file_type=$(stat --format "%F" "$1") if test "X$file_type" != "Xdirectory"; then return 1; fi } function unlink_ok() { stat "$1" stat ./case > /dev/null 2>&1 rc=$? if test $rc != 0; then return 0; fi return 1; } function hardlink_file_ok() { orig_file=$1 link_file=$2 orig_inode=$(stat --format "%i" "$orig_file") rc=$? if test $rc != 0; then return $rc; fi link_inode=$(stat --format "%i" "$link_file") rc=$? if test $rc != 0; then return $rc; fi if test $orig_inode != $link_inode then return 1 fi } function data_ok() { path=$1 data1="$2" data2=$(cat $path) echo "data1:$data1" echo "data2:$data2" if test "X$data1" != "X$data2" then return 1 fi } function symlink_ok() { local orig_file_name=$1 local symlink_file=$2 local file_type=$(stat --format "%F" "$symlink_file") if test "X$file_type" != "Xsymbolic link"; then return 1; fi local fname=$(readlink $symlink_file) if test "X$fname" != "X$orig_file_name"; then return 1; fi } function rename_ok() { old_name=$1 new_name=$2 if [ -f $old_name ] then return 1 fi if [ ! -f $new_name ] then return 1 fi } function create_georep_session() { $CLI system:: execute gsec_create rc=$? if test $rc != 0; then return $rc; fi $CLI volume geo-rep $master $slave create push-pem 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 }