6e92171117
Added a command to set "features.read-only" option to a default value "on" for slave volume. Changes are made in: $SRC//extras/hook-scripts/S56glusterd-geo-rep-create-post.sh for root geo-rep and $SRC/geo-replication/src/set_geo_rep_pem_keys.sh for non-root geo-rep. Fixes: bz#1654187 Change-Id: I15beeae3506f3f6b1dcba0a5c50b6344fd468c7c Signed-off-by: Harpreet Kaur <hlalwani@redhat.com>
394 lines
9.2 KiB
Plaintext
394 lines
9.2 KiB
Plaintext
GEO_REP_TIMEOUT=120
|
||
|
||
function check_status_num_rows()
|
||
{
|
||
local search_key=$1
|
||
$GEOREP_CLI $master $slave status | grep -F "$search_key" | wc -l
|
||
}
|
||
|
||
function check_keys_distributed()
|
||
{
|
||
local search_key=$(cat /var/lib/glusterd/geo-replication/master_slave_common_secret.pem.pub)
|
||
grep -F "$search_key" ~/.ssh/authorized_keys > /dev/null
|
||
echo $?
|
||
}
|
||
|
||
function check_common_secret_file()
|
||
{
|
||
stat /var/lib/glusterd/geo-replication/master_slave_common_secret.pem.pub
|
||
echo $?
|
||
}
|
||
|
||
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 + data
|
||
echo "HelloWorld!" > ${master_mnt}/${prefix}_f1
|
||
touch ${master_mnt}/${prefix}_f2
|
||
touch ${master_mnt}/${prefix}_f3
|
||
|
||
# non-ascii filename test
|
||
echo "Hello non-ascii" > ${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
|
||
mkdir ${master_mnt}/${prefix}_d3
|
||
|
||
# non-ascii dir and filename test
|
||
mkdir ${master_mnt}/${prefix}_d1_ನನ್ನ
|
||
mkdir ${master_mnt}/${prefix}_d2_ಸಂತಸ
|
||
mkdir ${master_mnt}/${prefix}_d3_ಸಂತಸ
|
||
echo "Hello non-ascii" > ${master_mnt}/${prefix}_d1_ನನ್ನ/ಸಂತಸ
|
||
|
||
# Hardlink + non-ascii name
|
||
ln ${master_mnt}/${prefix}_f1 ${master_mnt}/${prefix}_hl1
|
||
ln ${master_mnt}/${prefix}_f1 ${master_mnt}/${prefix}_hl1_ಸಂತಸ
|
||
|
||
# Symlink
|
||
cd ${master_mnt}
|
||
ln -s ${prefix}_f1 ${prefix}_sl1
|
||
ln -s ${prefix}_f1 ${prefix}_sl1_ಸಂತಸ
|
||
cd -
|
||
|
||
# UNLINK
|
||
rm ${master_mnt}/${prefix}_f2
|
||
rm ${master_mnt}/${prefix}_f2_ಸಂತಸ
|
||
|
||
# RMDIR
|
||
rmdir ${master_mnt}/${prefix}_d2
|
||
rmdir ${master_mnt}/${prefix}_d2_ಸಂತಸ
|
||
|
||
# Rename - File
|
||
mv ${master_mnt}/${prefix}_f3 ${master_mnt}/${prefix}_f4
|
||
mv ${master_mnt}/${prefix}_f3_ಸಂತಸ ${master_mnt}/${prefix}_f4_ಸಂತಸ
|
||
|
||
# Rename - Dir
|
||
mv ${master_mnt}/${prefix}_d3 ${master_mnt}/${prefix}_d4
|
||
mv ${master_mnt}/${prefix}_d3_ಸಂತಸ ${master_mnt}/${prefix}_d4_ಸಂತಸ
|
||
|
||
# chown
|
||
touch ${master_mnt}/${prefix}_chown_f1
|
||
chown 1000:1000 ${master_mnt}/${prefix}_chown_f1
|
||
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")
|
||
if test "X$file_owner" != "X1000:1000"; then echo 1; else echo 0; fi
|
||
}
|
||
|
||
function regular_file_ok()
|
||
{
|
||
local file_type=$(stat --format "%F" "$1")
|
||
if test "X$file_type" != "Xregular file"; then echo 1; else echo 0; fi
|
||
}
|
||
|
||
function directory_ok()
|
||
{
|
||
file_type=$(stat --format "%F" "$1")
|
||
if test "X$file_type" != "Xdirectory"; then echo 1; else echo 0; fi
|
||
}
|
||
|
||
function unlink_ok()
|
||
{
|
||
stat "$1" > /dev/null 2>&1
|
||
rc=$?
|
||
echo $rc
|
||
}
|
||
|
||
function hardlink_file_ok()
|
||
{
|
||
orig_file=$1
|
||
link_file=$2
|
||
|
||
orig_inode=$(stat --format "%i" "$orig_file")
|
||
rc=$?
|
||
if test $rc != 0; then
|
||
echo $rc
|
||
else
|
||
link_inode=$(stat --format "%i" "$link_file")
|
||
rc=$?
|
||
if test $rc != 0; then
|
||
echo $rc
|
||
else
|
||
if test $orig_inode != $link_inode; then
|
||
echo 1
|
||
else
|
||
echo 0
|
||
fi
|
||
fi
|
||
fi
|
||
}
|
||
|
||
function data_ok()
|
||
{
|
||
path=$1
|
||
data1="$2"
|
||
data2=$(cat $path)
|
||
echo "data1:$data1"
|
||
echo "data2:$data2"
|
||
if test "X$data1" != "X$data2"; then
|
||
echo 1
|
||
else
|
||
echo 0
|
||
fi
|
||
}
|
||
|
||
function arequal_checksum()
|
||
{
|
||
master=$1
|
||
slave=$2
|
||
diff <(arequal-checksum -p $master) <(arequal-checksum -p $slave) | wc -l
|
||
}
|
||
|
||
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
|
||
echo 1
|
||
else
|
||
local fname=$(readlink $symlink_file)
|
||
if test "X$fname" != "X$orig_file_name"; then
|
||
echo 2
|
||
else
|
||
echo 0
|
||
fi
|
||
fi
|
||
|
||
}
|
||
|
||
function rename_file_ok()
|
||
{
|
||
old_name=$1
|
||
new_name=$2
|
||
|
||
if [ -f $old_name ]; then
|
||
echo 1
|
||
elif [ ! -f $new_name ]; then
|
||
echo 2
|
||
else
|
||
echo 0
|
||
fi
|
||
}
|
||
|
||
function rename_dir_ok()
|
||
{
|
||
old_name=$1
|
||
new_name=$2
|
||
|
||
if [ -d $old_name ]; then
|
||
echo 1
|
||
elif [ ! -d $new_name ]; then
|
||
echo 2
|
||
else
|
||
echo 0
|
||
fi
|
||
}
|
||
|
||
function create_georep_session()
|
||
{
|
||
$CLI system:: execute gsec_create
|
||
rc=$?
|
||
if test $rc != 0; then
|
||
echo $rc
|
||
else
|
||
$CLI volume geo-rep $master $slave create push-pem
|
||
rc=$?
|
||
if test $rc != 0; then
|
||
echo $rc
|
||
else
|
||
echo 0
|
||
fi
|
||
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="$file_name.$((rotate_count))"
|
||
if [ $rotate_count -eq 0 ]; then
|
||
source_file="$file_name"
|
||
fi
|
||
if [ -f "${source_file}" ]; then
|
||
mv "${source_file}" "$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 $file_name
|
||
rotate_count=$2
|
||
unlink_file_name="$file_name.$((rotate_count+1))"
|
||
unlink $unlink_file_name 2>/dev/null
|
||
}
|
||
|
||
function create_rename()
|
||
{
|
||
file_name=$1
|
||
echo $file_name > $file_name
|
||
mv $file_name $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 "$file_name" ]; then
|
||
echo 1
|
||
else
|
||
echo 0
|
||
fi
|
||
}
|
||
|
||
function hardlink_rename()
|
||
{
|
||
file_name=$1
|
||
echo $file_name > $file_name
|
||
ln $file_name $file_name.hl
|
||
mv $file_name.hl $file_name.hl1
|
||
}
|
||
|
||
function hardlink_rename_ok()
|
||
{
|
||
file_name=$1
|
||
# the hardlink file should not exist on the slave after renaming
|
||
# to one of its links on changelog reprocessing
|
||
if [ ! -f "$file_name" ]; then
|
||
echo 1
|
||
elif [ ! -f "$file_name.hl1" ]; then
|
||
echo 2
|
||
elif [ -f "$file_name.hl" ]; then
|
||
echo 3
|
||
else
|
||
echo 0
|
||
fi
|
||
}
|
||
|
||
function create_symlink_rename_mkdir_data()
|
||
{
|
||
mkdir ${master_mnt}/symlink_test1
|
||
touch ${master_mnt}/symlink_test1/file1
|
||
ln -s "./file1" ${master_mnt}/symlink_test1/sym_link
|
||
mv ${master_mnt}/symlink_test1/sym_link ${master_mnt}/symlink_test1/rn_sym_link
|
||
mkdir ${master_mnt}/symlink_test1/sym_link
|
||
}
|
||
function verify_symlink_rename_mkdir_data()
|
||
{
|
||
sym_dir=$1
|
||
if [ ! -f $sym_dir/file1 ]; then
|
||
echo 1
|
||
elif [ ! -h $sym_dir/rn_sym_link ]; then
|
||
echo 2
|
||
elif [ ! -d $sym_dir/sym_link ]; then
|
||
echo 3
|
||
else
|
||
echo 0
|
||
fi
|
||
}
|
||
|
||
function create_rsnapshot_data()
|
||
{
|
||
rm -rf /tmp/rsnapshot_symlinkbug
|
||
mkdir /tmp/rsnapshot_symlinkbug
|
||
ln -f -s /does/not/exist /tmp/rsnapshot_symlinkbug/a_symlink
|
||
rsync -a /tmp/rsnapshot_symlinkbug ${master_mnt}/
|
||
cp -al ${master_mnt}/rsnapshot_symlinkbug ${master_mnt}/rsnapshot_symlinkbug.0
|
||
ln -f -s /does/not/exist2 /tmp/rsnapshot_symlinkbug/a_symlink
|
||
rsync -a /tmp/rsnapshot_symlinkbug ${master_mnt}/
|
||
cp -al ${master_mnt}/rsnapshot_symlinkbug ${master_mnt}/rsnapshot_symlinkbug.1
|
||
}
|
||
|
||
function verify_rsnapshot_data()
|
||
{
|
||
dir="$1/rsnapshot_symlinkbug"
|
||
dir0="$1/rsnapshot_symlinkbug.0"
|
||
dir1="$1/rsnapshot_symlinkbug.1"
|
||
if [ ! -d "$dir" ]; then
|
||
echo 1
|
||
elif [ ! -h $dir/a_symlink ]; then
|
||
echo 2
|
||
elif test "X$(readlink $dir/a_symlink)" != "X/does/not/exist2"; then
|
||
echo 3
|
||
elif [ ! -h $dir0/a_symlink ]; then
|
||
echo 4
|
||
elif test "X$(readlink $dir0/a_symlink)" != "X/does/not/exist"; then
|
||
echo 5
|
||
elif [ ! -h $dir1/a_symlink ]; then
|
||
echo 6
|
||
elif test "X$(readlink $dir1/a_symlink)" != "X/does/not/exist2"; then
|
||
echo 7
|
||
else
|
||
echo 0
|
||
fi
|
||
}
|
||
|
||
function create_hardlink_rename_data()
|
||
{
|
||
dir=${master_mnt}/hardlink_rename_issue
|
||
mkdir $dir
|
||
echo "test_data" > $dir/f1
|
||
ln $dir/f1 $dir/f2
|
||
mv $dir/f2 $dir/f3
|
||
unlink $dir/f1
|
||
}
|
||
|
||
function verify_hardlink_rename_data()
|
||
{
|
||
dir=$1/hardlink_rename_issue
|
||
if [ ! -d $dir ]; then
|
||
echo 1
|
||
elif [ -f $dir/f1 ]; then
|
||
echo 2
|
||
elif [ -f $dir/f2 ]; then
|
||
echo 3
|
||
elif [ ! -f $dir/f3 ]; then
|
||
echo 4
|
||
elif test "Xtest_data" != "X$(cat $dir/f3)"; then
|
||
echo 5
|
||
else
|
||
echo 0
|
||
fi
|
||
}
|
||
|
||
function check_slave_read_only()
|
||
{
|
||
volum=$1
|
||
gluster volume info $1 | grep 'features.read-only: on'
|
||
echo $?
|
||
}
|