summaryrefslogtreecommitdiffstats
path: root/tests/basic/ec/heal-info.t
blob: 1549d5fcdb0424350004d1f1bf1c76980ad00b2a (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
#!/bin/bash

. $(dirname $0)/../../include.rc
. $(dirname $0)/../../volume.rc

# This test checks if heal info works as expected or not

function create_files {
        for i in {21..1000};
        do
                dd if=/dev/zero of=$M0/$i bs=1M count=1 2>&1 > /dev/null;
        done
        rm -f $M0/lock
}

cleanup

TEST glusterd
TEST pidof glusterd
TEST $CLI volume create $V0 redundancy 2 $H0:$B0/${V0}{0..5}
TEST $CLI volume set $V0 client-log-level DEBUG
TEST $CLI volume heal $V0 disable
TEST $CLI volume start $V0
TEST $GFS --volfile-id=/$V0 --volfile-server=$H0 --direct-io-mode=yes $M0;
# Wait until all 6 childs have been recognized by the ec xlator
EXPECT_WITHIN $CHILD_UP_TIMEOUT "6" ec_child_up_count $V0 0

#heal info should give zero entries to be healed when I/O is going on
dd if=/dev/zero of=$M0/a bs=1M count=2048 &
dd_pid=$!
sleep 3 #Wait for I/O to proceed for some time
EXPECT "^0$" get_pending_heal_count $V0
kill -9 $dd_pid
touch $M0/lock
create_files &

total_heal_count=0
while [ -f $M0/lock ];
do
        heal_count=$(get_pending_heal_count $V0)
        total_heal_count=$((heal_count+total_heal_count))
done
EXPECT "^0$" echo $total_heal_count

#When only data heal is required it should print it
#There is no easy way to create this using commands so assigning xattrs directly
TEST setfattr -n trusted.ec.version -v 0x00000000000000020000000000000000 $B0/${V0}0/1000
TEST setfattr -n trusted.ec.version -v 0x00000000000000020000000000000000 $B0/${V0}1/1000
TEST setfattr -n trusted.ec.version -v 0x00000000000000020000000000000000 $B0/${V0}2/1000
TEST setfattr -n trusted.ec.version -v 0x00000000000000020000000000000000 $B0/${V0}3/1000
TEST setfattr -n trusted.ec.version -v 0x00000000000000020000000000000000 $B0/${V0}4/1000
TEST setfattr -n trusted.ec.version -v 0x00000000000000010000000000000000 $B0/${V0}5/1000
index_path=$B0/${V0}5/.glusterfs/indices/xattrop/$(gf_gfid_xattr_to_str $(gf_get_gfid_xattr $B0/${V0}5/1000))
while [ -f $index_path ]; do :; done
TEST touch $index_path
EXPECT "^1$" get_pending_heal_count $V0
TEST rm -f $M0/1000

#When files/directories need heal test that it prints them
TEST touch $M0/{1..10}
TEST kill_brick $V0 $H0 $B0/${V0}0
for i in {11..20};
do
        echo abc > $M0/$i #Data + entry + metadata heal
done
for i in {1..10};
do
        chmod +x $M0/$i;
done

EXPECT "^105$" get_pending_heal_count $V0

cleanup
#G_TESTDEF_TEST_STATUS_CENTOS6=BAD_TEST,BUG=1533815