summaryrefslogtreecommitdiffstats
path: root/tests/afr.rc
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
}