blob: d73e37dae5cda919140a8d88a7f86630b3d5dab7 (
plain)
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
|
#!/bin/bash
function create_brick_xattrop_entry {
local xattrop_dir=$(afr_get_index_path $1)
local base_entry=`ls $xattrop_dir|grep xattrop`
local gfid_str
local params=`echo "$@" | cut -d' ' -f2-`
echo $params
exit_val=0
for file in $params
do
gfid_str=$(gf_gfid_xattr_to_str $(gf_get_gfid_xattr $1/$file))
if [ -z "$base_entry"];
then
touch $xattrop_dir/$gfid_str
else
ln $xattrop_dir/$base_entry $xattrop_dir/$gfid_str
fi
if [ $? -ne 0 ];
then
exit_val=1
fi
done
if [ $exit_val -eq 1 ];
then
false
fi
}
function diff_dirs {
diff <(ls $1 | sort) <(ls $2 | sort)
}
function heal_status {
local f1_path="${1}/${3}"
local f2_path="${2}/${3}"
local zero_xattr="000000000000000000000000"
local insync=""
diff_dirs $f1_path $f2_path
if [ $? -eq 0 ];
then
insync="Y"
else
insync="N"
fi
local xattr11=$(get_hex_xattr trusted.afr.$V0-client-0 $f1_path)
local xattr12=$(get_hex_xattr trusted.afr.$V0-client-1 $f1_path)
local xattr21=$(get_hex_xattr trusted.afr.$V0-client-0 $f2_path)
local xattr22=$(get_hex_xattr trusted.afr.$V0-client-1 $f2_path)
local dirty1=$(get_hex_xattr trusted.afr.dirty $f1_path)
local dirty2=$(get_hex_xattr trusted.afr.dirty $f2_path)
if [ -z $xattr11 ]; then xattr11="000000000000000000000000"; fi
if [ -z $xattr12 ]; then xattr12="000000000000000000000000"; fi
if [ -z $xattr21 ]; then xattr21="000000000000000000000000"; fi
if [ -z $xattr22 ]; then xattr22="000000000000000000000000"; fi
if [ -z $dirty1 ]; then dirty1="000000000000000000000000"; fi
if [ -z $dirty2 ]; then dirty2="000000000000000000000000"; fi
echo ${insync}${xattr11}${xattr12}${xattr21}${xattr22}${dirty1}${dirty2}
}
# Check if given dir's self-heal is done
function is_dir_heal_done {
local zero_xattr="000000000000000000000000"
if [ "$(heal_status $@)" == "Y${zero_xattr}${zero_xattr}${zero_xattr}${zero_xattr}${zero_xattr}${zero_xattr}" ];
then
echo "Y"
else
echo "N"
fi
}
# Check if the given file's self-heal is done
function is_file_heal_done {
local f1_path="${1}/${3}"
local f2_path="${2}/${3}"
local zxattr="000000000000000000000000"
local size1=$(stat -c "%s" $f1_path)
local size2=$(stat -c "%s" $f2_path)
local diff=$((size1-size2))
local x11=$(get_hex_xattr trusted.afr.$V0-client-0 $f1_path)
local x12=$(get_hex_xattr trusted.afr.$V0-client-1 $f1_path)
local x21=$(get_hex_xattr trusted.afr.$V0-client-0 $f2_path)
local x22=$(get_hex_xattr trusted.afr.$V0-client-1 $f2_path)
local dirty1=$(get_hex_xattr trusted.afr.dirty $f1_path)
local dirty2=$(get_hex_xattr trusted.afr.dirty $f2_path)
if [ -z $x11 ]; then x11="000000000000000000000000"; fi
if [ -z $x12 ]; then x12="000000000000000000000000"; fi
if [ -z $x21 ]; then x21="000000000000000000000000"; fi
if [ -z $x22 ]; then x22="000000000000000000000000"; fi
if [ -z $dirty1 ]; then dirty1="000000000000000000000000"; fi
if [ -z $dirty2 ]; then dirty2="000000000000000000000000"; fi
if [ "${diff}${x11}${x12}${x21}${x22}${dirty1}${dirty2}" == "0${zxattr}${zxattr}${zxattr}${zxattr}${zxattr}${zxattr}" ];
then
echo "Y"
else
echo "N"
fi
}
#count the number of entries marked for self-heal
#in brick $1's index
function count_index_entries()
{
ls $1/.glusterfs/indices/xattrop | wc -l
}
function afr_up_status()
{
local v=$1
local m=$2
local replica_id=$3
grep -E "^up = " $m/.meta/graphs/active/${v}-replicate-${replica_id}/private | cut -f2 -d'='
}
function get_quorum_type()
{
local m="$1"
local v="$2"
local repl_id="$3"
cat $m/.meta/graphs/active/$v-replicate-$repl_id/private|grep quorum-type|awk '{print $3}'
}
function afr_private_key_value()
{
local v=$1
local m=$2
local replica_id=$3
local key=$4
#xargs at the end will strip leading spaces
grep -E "^${key} = " $m/.meta/graphs/active/${v}-replicate-${replica_id}/private | cut -f2 -d'=' | xargs
}
function afr_anon_entry_count()
{
local b=$1
ls $b/.glusterfs-anonymous-inode* | wc -l
}
|