glusterfs

Форк
0
/
bug-802417.t 
120 строк · 3.8 Кб
1
#!/bin/bash
2

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

6
function write_file()
7
{
8
	path="$1"; shift
9
	echo "$*" > "$path"
10
}
11

12
cleanup;
13

14
#####################################################
15
# We are currently not triggering data heal unless all bricks of the replica are
16
# up. We will need to modify this .t once the fix for preventing stale reads
17
# being served to clients for files in spurious split-brains is done. Spurious
18
# split-brains here means afr xattrs indicates sbrain but it is actually not.
19
# Self-heal will heal such files automatically but before the heal completes,
20
# reads can be served which needs fixing.
21
#G_TESTDEF_TEST_STATUS_NETBSD7=BAD_TEST,BUG=000000
22
#G_TESTDEF_TEST_STATUS_CENTOS6=BAD_TEST,BUG=000000
23
######################################################
24

25
TEST glusterd
26
TEST pidof glusterd
27
TEST $CLI volume info;
28

29
## Start and create a volume
30
mkdir -p ${B0}/${V0}-0
31
mkdir -p ${B0}/${V0}-1
32
mkdir -p ${B0}/${V0}-2
33
TEST $CLI volume create $V0 replica 3 $H0:$B0/${V0}-{0,1,2}
34

35
## Verify volume is created
36
EXPECT "$V0" volinfo_field $V0 'Volume Name';
37
EXPECT 'Created' volinfo_field $V0 'Status';
38

39
## Make sure io-cache and write-behind don't interfere.
40
TEST $CLI volume set $V0 performance.io-cache off;
41
TEST $CLI volume set $V0 performance.write-behind off;
42
TEST $CLI volume set $V0 performance.stat-prefetch off
43

44
## Make sure automatic self-heal doesn't perturb our results.
45
TEST $CLI volume set $V0 cluster.self-heal-daemon off
46
TEST $CLI volume set $V0 cluster.data-self-heal on
47

48
## Start volume and verify
49
TEST $CLI volume start $V0;
50
EXPECT 'Started' volinfo_field $V0 'Status';
51

52
TEST $CLI volume set $V0 cluster.quorum-type none
53
## Mount native
54
TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M0
55

56
## Create a file with some recognizably stale data.
57
TEST write_file $M0/a_file "old_data"
58

59
## Kill two of the bricks and write some newer data.
60
TEST kill_brick ${V0} ${H0} ${B0}/${V0}-1
61
TEST kill_brick ${V0} ${H0} ${B0}/${V0}-2
62
TEST write_file $M0/a_file "new_data"
63

64
## Bring all the bricks up and kill one so we do a partial self-heal.
65
TEST $CLI volume start $V0 force
66
EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 0
67
EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 1
68
EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 2
69
TEST kill_brick ${V0} ${H0} ${B0}/${V0}-2
70
TEST dd if=${M0}/a_file of=/dev/null
71

72

73
obs_path_0=${B0}/${V0}-0/a_file
74
obs_path_1=${B0}/${V0}-1/a_file
75
obs_path_2=${B0}/${V0}-2/a_file
76

77
tgt_xattr_0="trusted.afr.${V0}-client-0"
78
tgt_xattr_1="trusted.afr.${V0}-client-1"
79
tgt_xattr_2="trusted.afr.${V0}-client-2"
80

81
actual=$(afr_get_changelog_xattr $obs_path_0 $tgt_xattr_0)
82
EXPECT "0x000000000000000000000000|^\$" echo $actual
83

84
EXPECT_WITHIN $HEAL_TIMEOUT "0x000000000000000000000000" \
85
afr_get_changelog_xattr $obs_path_0 $tgt_xattr_1
86

87
actual=$(afr_get_changelog_xattr $obs_path_0 $tgt_xattr_2)
88
EXPECT "0x000000030000000000000000" echo $actual
89

90
actual=$(afr_get_changelog_xattr $obs_path_1 $tgt_xattr_0)
91
EXPECT "0x000000000000000000000000|^\$" echo $actual
92

93
actual=$(afr_get_changelog_xattr $obs_path_1 $tgt_xattr_1)
94
EXPECT "0x000000000000000000000000|^\$" echo $actual
95

96
actual=$(afr_get_changelog_xattr $obs_path_1 $tgt_xattr_2)
97
EXPECT "0x000000010000000000000000" echo $actual
98

99
actual=$(afr_get_changelog_xattr $obs_path_2 $tgt_xattr_0)
100
EXPECT "0x000000000000000000000000|^\$" echo $actual
101

102
actual=$(afr_get_changelog_xattr $obs_path_2 $tgt_xattr_1)
103
EXPECT "0x000000000000000000000000|^\$" echo $actual
104

105
actual=$(afr_get_changelog_xattr $obs_path_2 $tgt_xattr_2)
106
EXPECT "0x000000000000000000000000|^\$" echo $actual
107

108
if [ "$EXIT_EARLY" = "1" ]; then
109
	exit 0;
110
fi
111

112
## Finish up
113
EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $M0
114
TEST $CLI volume stop $V0;
115
EXPECT 'Stopped' volinfo_field $V0 'Status';
116

117
TEST $CLI volume delete $V0;
118
TEST ! $CLI volume info $V0;
119

120
cleanup;
121

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

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

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

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