diff options
Diffstat (limited to 'tests/volume.rc')
| -rw-r--r-- | tests/volume.rc | 286 |
1 files changed, 270 insertions, 16 deletions
diff --git a/tests/volume.rc b/tests/volume.rc index 326654671..171f8d709 100644 --- a/tests/volume.rc +++ b/tests/volume.rc @@ -14,6 +14,11 @@ function brick_count() $CLI volume info $vol | egrep "^Brick[0-9]+: " | wc -l; } +function online_brick_count () +{ + pidof glusterfsd | wc -w +} + function volume_option() { local vol=$1 @@ -21,12 +26,19 @@ function volume_option() $CLI volume info $vol | egrep "^$key: " | cut -f2 -d' '; } -function rebalance_status_completed_field { - $CLI volume rebalance $V0 status | awk '{print $6}' | sed -n 3p +function rebalance_status_field { + #The rebalance status can be upto 3 words, (ex:'fix-layout in progress'), hence the awk-print $7 thru $9. + #But if the status is less than 3 words, it also prints the next field i.e the run_time_in_secs.(ex:'completed 3.00'). + #So we trim the numbers out with `tr`. Finally remove the trailing white spaces with sed. What we get is one of the + #strings in the 'cli_vol_task_status_str' char array of cli-rpc-ops.c + + $CLI volume rebalance $1 status | awk '{print $7,$8,$9}' |sed -n 3p |tr -d '[^0-9+\.]'|sed 's/ *$//g' } function remove_brick_status_completed_field { - $CLI volume remove-brick $V0 $H0:$B0/r2d2_{4,5} status | awk '{print $6}' | sed -n 3p + local vol=$1 + local brick_list=$2 + $CLI volume remove-brick $vol $brick_list status | awk '{print $7}' | sed -n 3p } function get_mount_process_pid { @@ -34,38 +46,280 @@ function get_mount_process_pid { ps aux | grep glusterfs | grep -E "volfile-id[ =]/?$vol " | awk '{print $2}' | head -1 } -function generate_mount_statedump { - local vol=$1 +function get_nfs_pid () +{ + ps aux | grep "volfile-id\ gluster\/nfs" | awk '{print $2}' | head -1 +} + +function read_nfs_pidfile () +{ + echo `cat /var/lib/glusterd/nfs/run/nfs.pid` +} + +function cleanup_statedump { + pid=$1 + rm -f $statedumpdir/*$pid.dump.* + #.vimrc friendly comment */ +} + +function generate_statedump { local fpath="" - mount_pid=$(get_mount_process_pid $vol) + pid=$1 #remove old stale statedumps - rm -f /tmp/glusterdump.$mount_pid.dump.* 2>/dev/null - kill -USR1 $mount_pid + cleanup_statedump $pid + kill -USR1 $pid #Wait till the statedump is generated sleep 1 - fname=$(ls /tmp | grep -E "glusterdump.$mount_pid.dump.*") - echo /tmp/$fname + fname=$(ls $statedumpdir | grep -E "\.$pid\.dump\.") + echo $statedumpdir/$fname } -function afr_child_up_status { +function generate_mount_statedump { + local vol=$1 + generate_statedump $(get_mount_process_pid $vol) +} + +function cleanup_mount_statedump { + local vol=$1 + cleanup_statedump $(get_mount_process_pid $vol) +} + +function _afr_child_up_status { local vol=$1 #brick_id is (brick-num in volume info - 1) local brick_id=$2 - local fpath=$(generate_mount_statedump $vol) + local gen_state_dump=$3 + local fpath=$($gen_state_dump $vol) up=$(grep -B1 trusted.afr.$vol-client-$brick_id $fpath | head -1 | cut -f2 -d'=') rm -f $fpath echo "$up" } +function afr_child_up_status { + local vol=$1 + #brick_id is (brick-num in volume info - 1) + local brick_id=$2 + _afr_child_up_status $vol $brick_id generate_mount_statedump +} + +function get_shd_process_pid { + local vol=$1 + ps aux | grep glusterfs | grep -E "glustershd/run/glustershd.pid" | awk '{print $2}' | head -1 +} + +function generate_shd_statedump { + local vol=$1 + generate_statedump $(get_shd_process_pid $vol) +} + +function generate_nfs_statedump { + local vol=$1 + generate_statedump $(get_nfs_pid $vol) +} + +function generate_brick_statedump { + local vol=$1 + local host=$2 + local brick=$3 + generate_statedump $(get_brick_pid $vol $host $brick) +} + +function afr_child_up_status_in_shd { + local vol=$1 + #brick_id is (brick-num in volume info - 1) + local brick_id=$2 + _afr_child_up_status $vol $brick_id generate_shd_statedump +} + +function afr_child_up_status_in_nfs { + local vol=$1 + #brick_id is (brick-num in volume info - 1) + local brick_id=$2 + _afr_child_up_status $vol $brick_id generate_nfs_statedump +} + +function nfs_up_status { + gluster volume status | grep "NFS Server" | awk '{print $6}' +} + function glustershd_up_status { gluster volume status | grep "Self-heal Daemon" | awk '{print $6}' } -function kill_brick() -{ +function get_brick_pid { + local vol=$1 + local host=$2 + local brick=$3 + local brick_hiphenated=$(echo $brick | tr '/' '-') + echo `cat /var/lib/glusterd/vols/$vol/run/${host}${brick_hiphenated}.pid` +} + +function kill_brick { + local vol=$1 + local host=$2 + local brick=$3 + kill -9 $(get_brick_pid $vol $host $brick) +} + +function check_option_help_presence { + local option=$1 + $CLI volume set help | grep "^Option:" | grep -w $option +} + +function afr_get_changelog_xattr { + local file=$1 + local xkey=$2 + getfattr -n $xkey -e hex $file 2>/dev/null | grep "client-" | cut -f2 -d'=' +} + +function afr_get_pending_heal_count { + local vol=$1 + gluster volume heal $vol info | grep "Number of entries" | awk '{ sum+=$4} END {print sum}' +} + +function afr_get_index_path { + local brick_path=$1 + echo "$brick_path/.glusterfs/indices/xattrop" +} + +function afr_get_num_indices_in_brick { + local brick_path=$1 + echo $(ls $(afr_get_index_path $brick_path) | grep -v xattrop | wc -l) +} + +function gf_get_gfid_xattr { + file=$1 + getfattr -n trusted.gfid -e hex $file 2>/dev/null | grep "trusted.gfid" | cut -f2 -d'=' +} + +function gf_gfid_xattr_to_str { + xval=$1 + echo "${xval:2:8}-${xval:10:4}-${xval:14:4}-${xval:18:4}-${xval:22:12}" +} + +function gf_check_file_opened_in_brick { vol=$1 host=$2 brick=$3 - brick_hiphenated=$(echo $brick | tr '/' '-') - kill -9 `cat /var/lib/glusterd/vols/$vol/run/${host}${brick_hiphenated}.pid` + realpath=$4 + ls -l /proc/$(get_brick_pid $vol $host $brick)/fd | grep "${realpath}$" 2>&1 > /dev/null + if [ $? -eq 0 ]; then + echo "Y" + else + echo "N" + fi +} + +function gf_get_gfid_backend_file_path { + brickpath=$1 + filepath_in_brick=$2 + gfid=$(gf_get_gfid_xattr "$brickpath/$filepath_in_brick") + gfidstr=$(gf_gfid_xattr_to_str $gfid) + echo "$brickpath/.glusterfs/${gfidstr:0:2}/${gfidstr:2:2}/$gfidstr" +} + +function gf_rm_file_and_gfid_link { + brickpath=$1 + filepath_in_brick=$2 + rm -f $(gf_get_gfid_backend_file_path $brickpath $filepath_in_brick) + rm -f "$brickpath/$filepath_in_brick" +} + + +function gd_is_replace_brick_completed { + local host=$1 + local vol=$2 + local src_brick=$3 + local dst_brick=$4 + $CLI volume replace-brick $vol $src_brick $dst_brick status | grep -i "Migration complete" + if [ $? -eq 0 ]; then + echo "Y" + else + echo "N" + fi +} + +function dht_get_layout { + local my_xa=trusted.glusterfs.dht + getfattr -d -e hex -n $my_xa $1 2> /dev/null | grep "$my_xa=" | cut -d= -f2 +} + +function afr_get_specific_changelog_xattr () +{ + local path=$1 + local key=$2 + local type=$3 + local specific_changelog="" + + changelog_xattr=$(afr_get_changelog_xattr "$path" "$key") + if [ "$type" == "data" ]; then + specific_changelog=${changelog_xattr:2:8} + elif [ "$type" == "metadata" ]; then + specific_changelog=${changelog_xattr:10:8} + elif [ "$type" == "entry" ]; then + specific_changelog=${changelog_xattr:18:8} + else + specific_changlog="error" + fi + + echo $specific_changelog +} +## + # query pathinfo xattr and extract POSIX pathname(s) + ## +function get_backend_paths { + local path=$1 + + getfattr -m . -n trusted.glusterfs.pathinfo $path | tr ' ' '\n' | sed -n 's/<POSIX.*:.*:\(.*\)>.*/\1/p' +} + +function do_volume_operations() { + local operation=$1 + local count=$2 + local force=$3 + + local pids=() + local cli + local v + + for i in `seq 1 $count`; do + cli="CLI_$i" + v="V`expr $i - 1`" + ${!cli} volume $operation ${!v} $force & + pids[$i]=$! + done + + for i in `seq 1 $count`; do + wait ${pids[$i]} + done +} + +function start_volumes() { + do_volume_operations start $1 +} + +function stop_volumes() { + do_volume_operations stop $1 +} + +function start_force_volumes() { + do_volume_operations start $1 force +} + +function stop_force_volumes() { + do_volume_operations stop $1 force +} + +function delete_volumes() { + do_volume_operations delete $1 +} + +function volume_exists() { + local volname=$1 + $CLI volume info $volname 2>&1 | grep -q 'does not exist' + if [ $? -eq 0 ]; then + return 1 + else + return 0 + fi } |
