1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
|
#!/bin/bash
dhthashdebugxattr="dht.file.hashed-subvol."
function get_layout()
{
getfattr -n trusted.glusterfs.dht -e hex $1 2>&1 | grep dht | cut -d = -f2
}
## populates $BRICK1 and $BRICK2 with hashed/cached subvolume. These will be
## used by get_cached_brick and get_hashed_brick
function file_has_linkfile()
{
k=0
l=0
while [ $k -lt $BRICK_COUNT ]
do
stat=$(stat $B0/${V0}$k/$1 2>/dev/null)
if [ $? -eq 0 ]
then
let l++
let "BRICK${l}=$k"
fi
let k++
done
return $l
}
function get_cached_brick()
{
i=1
brick=$BRICK1
while [ $i -lt 3 ]
do
test=$(getfattr -n trusted.glusterfs.dht.linkto -e text $B0/${V0}$brick/$1 2>&1)
if [ $? -eq 1 ]
then
cached=$brick
i=$(( $i+3 ))
fi
brick=$BRICK1
let i++
done
return $cached
}
function get_hashed_brick()
{
j=1
brick=$BRICK1
while [ $j -lt 3 ]
do
test=$(getfattr -n trusted.glusterfs.dht.linkto -e text $B0/${V0}$brick/$1 2>&1)
if [ $? -eq 0 ]
then
hashed=$brick
j=$(( $j+3 ))
fi
brick=$BRICK2
let j++
done
return $hashed
}
function cluster_rebalance_completed()
{
val=1
# Rebalance status will be either "failed" or "completed"
test=$($CLI_1 volume rebalance $V0 status | grep "in progress" 2>&1)
if [ $? -ne 0 ]
then
val=0
fi
echo $val
# Do not *return* the value here. If it's non-zero, that will cause
# EXPECT_WITHIN (e.g. in bug-884455.t) to return prematurely, leading to
# a spurious test failure. Nothing else checks the return value anyway
# (they all check the output) so there's no need for it to be non-zero
# just because grep didn't find what we want.
}
function rebalance_completed()
{
val=1
test=$($CLI volume rebalance $V0 status | grep localhost | grep "completed" 2>&1)
if [ $? -eq 0 ]
then
val=0
fi
echo $val
# Do not *return* the value here. If it's non-zero, that will cause
# EXPECT_WITHIN (e.g. in bug-884455.t) to return prematurely, leading to
# a spurious test failure. Nothing else checks the return value anyway
# (they all check the output) so there's no need for it to be non-zero
# just because grep didn't find what we want.
}
function remove_brick_completed()
{
val=1
test=$(gluster volume remove-brick $V0 $H0:$B0/${V0}2 status | grep localhost | grep "completed" 2>&1)
if [ $? -eq 0 ]
then
val=0
fi
echo $val
}
function dht_get_linkto_target()
{
local path=$1;
echo $(getfattr -e text --only-values --absolute-names -n trusted.glusterfs.dht.linkto $path)
}
function is_dht_linkfile()
{
local path=$1
retval=0
local output=$(stat -c %a $path)
if [ $output -eq 1000 ]; then
retval=1
fi
echo $retval
return $retval
}
# Given an existing directory on the volume, get the hashed subvol for a file
# in that directory
# Input: filename dirpath_on_mount
function dht_get_hash_subvol()
{
local hashed_subvol
hashed_subvol=$(getfattr --only-values -n "$dhthashdebugxattr$1" $2 2>/dev/null)
echo $hashed_subvol
}
# Find the first filename that hashes to the same subvol
# as $1
# Input: subvol_name dirpath_on_mount file_pattern
function dht_first_filename_with_hashsubvol()
{
local in_subvol=$1
local in_path=$2
local in_hash_subvol
local file_pattern=$3
local filename
for i in {1..50}
do
filename="$file_pattern$i"
in_hash_subvol=$(dht_get_hash_subvol "$filename" "$in_path")
# echo $in_hash_subvol
if [ "$in_subvol" == "$in_hash_subvol" ]; then
fn_return_val=$filename
return 0
fi
done
return 1
}
function has_sticky_attr()
{
local file="$1"
if [ -k "$file" ]
then
echo "Y"
else
echo "N"
fi
}
function has_sgid_attr()
{
local file="$1"
#-g checks SGID bit. -k checks for sticky bit
if [ -g "$file" ]
then
echo "Y"
else
echo "N"
fi
}
|