glusterfs

Форк
0
/
bug-1539358-split-brain-detection.t 
89 строк · 3.5 Кб
1
#!/bin/bash
2

3
. $(dirname $0)/../../include.rc
4
. $(dirname $0)/../../volume.rc
5
. $(dirname $0)/../../afr.rc
6

7
cleanup;
8

9
## Start and create a volume
10
TEST glusterd;
11
TEST pidof glusterd;
12
TEST $CLI volume info;
13

14
TEST $CLI volume create $V0 replica 3 $H0:$B0/${V0}{0,1,2};
15
TEST $CLI volume start $V0;
16
EXPECT 'Started' volinfo_field $V0 'Status';
17
TEST $CLI volume set $V0 self-heal-daemon off
18
TEST glusterfs --volfile-id=/$V0 --volfile-server=$H0 $M0 --attribute-timeout=0 --entry-timeout=0
19

20
###############################################################################yy
21
# Case of 2 bricks blaming the third and the third blaming the other two.
22

23
TEST `echo "hello" >> $M0/file`
24

25
# B0 and B2 must blame B1
26
TEST kill_brick $V0 $H0 $B0/$V0"1"
27
TEST `echo "append" >> $M0/file`
28
EXPECT "00000001" afr_get_specific_changelog_xattr $B0/${V0}0/file trusted.afr.$V0-client-1 data
29
EXPECT "00000001" afr_get_specific_changelog_xattr $B0/${V0}2/file trusted.afr.$V0-client-1 data
30
CLIENT_MD5=$(md5sum $M0/file | cut -d\  -f1)
31

32
# B1 must blame B0 and B2
33
setfattr -n trusted.afr.$V0-client-0 -v 0x000000010000000000000000 $B0/$V0"1"/file
34
setfattr -n trusted.afr.$V0-client-2 -v 0x000000010000000000000000 $B0/$V0"1"/file
35

36
# Launch heal
37
TEST $CLI volume start $V0 force
38
EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" brick_up_status $V0 $H0 $B0/${V0}1
39
TEST $CLI volume set $V0 self-heal-daemon on
40
EXPECT_WITHIN $PROCESS_UP_TIMEOUT "Y" glustershd_up_status
41
EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status_in_shd $V0 0
42
EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status_in_shd $V0 1
43
EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status_in_shd $V0 2
44
TEST $CLI volume heal $V0
45
EXPECT_WITHIN $HEAL_TIMEOUT "^0$" get_pending_heal_count $V0
46
B0_MD5=$(md5sum $B0/${V0}0/file | cut -d\  -f1)
47
B1_MD5=$(md5sum $B0/${V0}1/file | cut -d\  -f1)
48
B2_MD5=$(md5sum $B0/${V0}2/file | cut -d\  -f1)
49
TEST [ "$CLIENT_MD5" == "$B0_MD5" ]
50
TEST [ "$CLIENT_MD5" == "$B1_MD5" ]
51
TEST [ "$CLIENT_MD5" == "$B2_MD5" ]
52

53
TEST rm $M0/file
54

55
###############################################################################yy
56
# Case of each brick blaming the next one in a cyclic manner
57

58
TEST `echo "hello" >> $M0/file`
59
# Mark cyclic xattrs and modify file content directly on the bricks.
60
TEST $CLI volume set $V0 self-heal-daemon off
61
setfattr -n trusted.afr.$V0-client-1 -v 0x000000010000000000000000 $B0/$V0"0"/file
62
setfattr -n trusted.afr.dirty -v 0x000000010000000000000000 $B0/$V0"0"/file
63
setfattr -n trusted.afr.$V0-client-2 -v 0x000000010000000000000000 $B0/$V0"1"/file
64
setfattr -n trusted.afr.dirty -v 0x000000010000000000000000 $B0/$V0"1"/file
65
setfattr -n trusted.afr.$V0-client-0 -v 0x000000010000000000000000 $B0/$V0"2"/file
66
setfattr -n trusted.afr.dirty -v 0x000000010000000000000000 $B0/$V0"2"/file
67

68
TEST `echo "ab" >> $B0/$V0"0"/file`
69
TEST `echo "cdef" >> $B0/$V0"1"/file`
70
TEST `echo "ghi" >> $B0/$V0"2"/file`
71

72
# Add entry to xattrop dir to trigger index heal.
73
xattrop_dir0=$(afr_get_index_path $B0/$V0"0")
74
base_entry_b0=`ls $xattrop_dir0`
75
gfid_str=$(gf_gfid_xattr_to_str $(gf_get_gfid_xattr $B0/$V0"0"/file))
76
ln $xattrop_dir0/$base_entry_b0 $xattrop_dir0/$gfid_str
77
EXPECT_WITHIN $HEAL_TIMEOUT "^1$" get_pending_heal_count $V0
78

79
# Launch heal
80
TEST $CLI volume set $V0 self-heal-daemon on
81
TEST $CLI volume heal $V0
82
EXPECT_WITHIN $HEAL_TIMEOUT "^0$" get_pending_heal_count $V0
83
B0_MD5=$(md5sum $B0/${V0}0/file | cut -d\  -f1)
84
B1_MD5=$(md5sum $B0/${V0}1/file | cut -d\  -f1)
85
B2_MD5=$(md5sum $B0/${V0}2/file | cut -d\  -f1)
86
TEST [ "$B0_MD5" == "$B1_MD5" ]
87
TEST [ "$B0_MD5" == "$B2_MD5" ]
88
###############################################################################yy
89
cleanup
90

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.