If xattr is node-uuid and the inode is marked bad, fail getxattr and fgetxattr with EIO. Returning EIO would result in AFR to choose correct node-uuid coresponding to the subvolume where the good copy of the file resides. Change-Id: I45a42ca38f8322d2b10f3c4c48dc504521162b42 BUG: 1294786 Signed-off-by: Kotresh HR <khiremat@redhat.com> Reviewed-on: http://review.gluster.org/13116 Tested-by: NetBSD Build System <jenkins@build.gluster.org> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Venky Shankar <vshankar@redhat.com>
180 lines
4.4 KiB
Bash
180 lines
4.4 KiB
Bash
#!/bin/bash
|
|
|
|
CLUSTER_PFX="127.1.1"; # ".x" for each glusterd
|
|
CLUSTER_COUNT=1; # Just initial definition
|
|
|
|
function launch_cluster() {
|
|
local count=$1;
|
|
|
|
CLUSTER_COUNT=$count;
|
|
|
|
define_backends $count;
|
|
define_hosts $count;
|
|
define_glusterds $count $2;
|
|
define_clis $count;
|
|
|
|
start_glusterds;
|
|
}
|
|
|
|
|
|
function define_backends() {
|
|
local b;
|
|
|
|
for i in `seq 1 $count`; do
|
|
eval "B$i=$B0/$i";
|
|
done
|
|
|
|
for i in `seq 1 $count`; do
|
|
b="B$i";
|
|
mkdir -p ${!b}/glusterd;
|
|
done
|
|
}
|
|
|
|
|
|
function define_glusterds() {
|
|
local count=$1;
|
|
local h;
|
|
local b;
|
|
local wopt;
|
|
local bopt;
|
|
local popt;
|
|
|
|
for i in `seq 1 $count`; do
|
|
b="B$i";
|
|
h="H$i";
|
|
wopt="management.working-directory=${!b}/glusterd";
|
|
bopt="management.transport.socket.bind-address=${!h}";
|
|
popt="--pid-file=${!b}/glusterd.pid";
|
|
sopt="management.glusterd-sockfile=${!b}/glusterd/gd.sock"
|
|
#Get the logdir
|
|
logdir=`gluster --print-logdir`
|
|
#Fetch the testcases name and prefix the glusterd log with it
|
|
logfile=`echo ${0##*/}`_glusterd$i.log
|
|
lopt="--log-file=$logdir/$logfile"
|
|
if [ "$2" == "-LDEBUG" ]; then
|
|
eval "glusterd_$i='glusterd -LDEBUG --xlator-option $wopt --xlator-option $bopt --xlator-option $sopt $lopt $popt'";
|
|
eval "glusterd$i='glusterd -LDEBUG --xlator-option $wopt --xlator-option $bopt --xlator-option $sopt $lopt $popt'";
|
|
else
|
|
eval "glusterd_$i='glusterd --xlator-option $wopt --xlator-option $bopt --xlator-option $sopt $lopt $popt'";
|
|
eval "glusterd$i='glusterd --xlator-option $wopt --xlator-option $bopt --xlator-option $sopt $lopt $popt'";
|
|
fi
|
|
done
|
|
}
|
|
|
|
function start_glusterd() {
|
|
local g
|
|
local index=$1
|
|
|
|
g="glusterd_${index}"
|
|
${!g}
|
|
}
|
|
|
|
function start_glusterds() {
|
|
for i in `seq 1 $CLUSTER_COUNT`; do
|
|
start_glusterd $i
|
|
done
|
|
}
|
|
|
|
|
|
function kill_glusterd() {
|
|
local index=$1;
|
|
local b;
|
|
local pidfile;
|
|
|
|
b="B$index";
|
|
pidfile="${!b}/glusterd.pid";
|
|
|
|
kill `cat $pidfile`;
|
|
}
|
|
|
|
|
|
function kill_node() {
|
|
local index=$1;
|
|
local h;
|
|
|
|
h="H$index";
|
|
|
|
kill -9 $(ps -ef | grep gluster | grep ${!h} | awk '{print $2}');
|
|
}
|
|
|
|
|
|
function define_hosts() {
|
|
local count=$1;
|
|
|
|
for i in `seq 1 $count`; do
|
|
eval "H_$i=${CLUSTER_PFX}.$i"
|
|
eval "H$i=${CLUSTER_PFX}.$i";
|
|
case $OSTYPE in
|
|
NetBSD)
|
|
ifconfig lo0 alias ${CLUSTER_PFX}.$i 2>/dev/null
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
|
|
function define_clis() {
|
|
local count=$1;
|
|
local h;
|
|
|
|
for i in `seq 1 $count`; do
|
|
b="B$i";
|
|
#get the logdir
|
|
logdir=`gluster --print-logdir`
|
|
#Fetch the testcases name and prefix the cli log with it
|
|
logfile=`echo ${0##*/}`_cli$i.log
|
|
lopt="--log-file=$logdir/$logfile"
|
|
logfile1=`echo ${0##*/}`_cli_$i.log
|
|
lopt1="--log-file=$logdir/$logfile1"
|
|
|
|
|
|
eval "CLI_$i='$CLI --glusterd-sock=${!b}/glusterd/gd.sock $lopt'";
|
|
eval "CLI$i='$CLI --glusterd-sock=${!b}/glusterd/gd.sock $lopt1'";
|
|
done
|
|
}
|
|
|
|
function peer_count() {
|
|
$CLI_1 peer status | grep 'Peer in Cluster (Connected)' | wc -l
|
|
}
|
|
|
|
function cluster_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
|
|
|
|
eval \$CLI_$1 volume rebalance $2 status | awk '{print $7,$8,$9}' |sed -n 3p |tr -d '[^0-9+\.]'|sed 's/ *$//g'
|
|
}
|
|
|
|
function cluster_volinfo_field()
|
|
{
|
|
local vol=$2;
|
|
local field=$3;
|
|
eval \$CLI_$1 volume info $vol | grep "^$field: " | sed 's/.*: //';
|
|
}
|
|
|
|
function volinfo_field_1()
|
|
{
|
|
local vol=$1;
|
|
local field=$2;
|
|
|
|
$CLI_1 volume info $vol | grep "^$field: " | sed 's/.*: //';
|
|
}
|
|
|
|
function volinfo_field_2()
|
|
{
|
|
local vol=$1;
|
|
local field=$2;
|
|
|
|
$CLI_2 volume info $vol | grep "^$field: " | sed 's/.*: //';
|
|
}
|
|
|
|
function brick_up_status_1 {
|
|
local vol=$1
|
|
local host=$2
|
|
local brick=$3
|
|
$CLI_1 volume status $vol $host:$brick --xml | sed -ne 's/.*<status>\([01]\)<\/status>/\1/p'
|
|
}
|