blob: 41b662eefe2c47a38b01f968c65f1e28a3bdb31c (
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
|
#!/bin/bash
. $(dirname $0)/../../include.rc
. $(dirname $0)/../../volume.rc
. $(dirname $0)/../../common-utils.rc
. $(dirname $0)/../../dht.rc
# Test overview: Test file creation in various scenarios
# Test 1 : "dht.file.hashed-subvol.<filename>"
# Get the hashed subvolume for file1 in dir1 using xattr
# Create file1 in dir1
# Check if the file is created in the brick returned by xattr
hashdebugxattr="dht.file.hashed-subvol."
cleanup
TEST glusterd
TEST pidof glusterd
# We want fixed size bricks to test min-free-disk
# Create 2 loop devices, one per brick.
TEST truncate -s 25M $B0/brick1
TEST truncate -s 25M $B0/brick2
TEST L1=`SETUP_LOOP $B0/brick1`
TEST MKFS_LOOP $L1
TEST L2=`SETUP_LOOP $B0/brick2`
TEST MKFS_LOOP $L2
TEST mkdir -p $B0/${V0}{1,2}
TEST MOUNT_LOOP $L1 $B0/${V0}1
TEST MOUNT_LOOP $L2 $B0/${V0}2
# Create a plain distribute volume with 2 subvols.
TEST $CLI volume create $V0 $H0:$B0/${V0}{1,2};
TEST $CLI volume start $V0;
EXPECT "Started" volinfo_field $V0 'Status';
TEST $CLI volume set $V0 cluster.min-free-disk 40%
#TEST $CLI volume set $V0 client-log-level DEBUG
# Mount using FUSE and create a file
TEST glusterfs -s $H0 --volfile-id $V0 $M0
TEST mkdir $M0/dir1
######################################################
# Test 1 : Test file creation on correct hashed subvol
######################################################
hashed="$V0-client-0"
TEST dht_first_filename_with_hashsubvol "$hashed" $M0/dir1 "big-"
firstfile=$fn_return_val
#Create a large file to fill up $hashed past the min-free-disk limits
TEST dd if=/dev/zero of=$M0/dir1/$firstfile bs=1M count=15
brickpath_0=$(cat "$M0/.meta/graphs/active/$hashed/options/remote-subvolume")
brickpath_1=$(cat "$M0/.meta/graphs/active/$V0-client-1/options/remote-subvolume")
TEST stat "$brickpath_0/dir1/$firstfile"
EXPECT "0" is_dht_linkfile "$brickpath_0/dir1/$firstfile"
######################################################
# Test 2: Create a file which hashes to the subvol which has crossed
# the min-free-disk limit. It should be created on the other subvol
######################################################
# DHT only checks disk usage every second. Create a new file and introduce a
# delay here to ensure DHT updates the in memory disk usage
sleep 2
TEST dd if=/dev/zero of=$M0/dir1/file-2 bs=1024 count=1
# Find a file that will hash to $hash_subvol
TEST dht_first_filename_with_hashsubvol $hashed $M0/dir1 "newfile-"
newfile=$fn_return_val
echo $newfile
# Create $newfile - it should be created on the other subvol as its hash subvol
# has crossed the min-free-disk limit
TEST dd if=/dev/zero of=$M0/dir1/$newfile bs=1024 count=20
TEST stat "$brickpath_0/dir1/$newfile"
EXPECT "1" is_dht_linkfile "$brickpath_0/dir1/$newfile"
#TEST rm -rf $M0/dir1/$firstfile
#TEST rm -rf $M0/dir1/$newfile
######################################################
# Test 3: Test dht_filter_loc_subvol_key
######################################################
TEST dht_first_filename_with_hashsubvol $V0-client-1 $M0/dir1 "filter-"
newfile=$fn_return_val
echo $newfile
TEST dd if=/dev/zero of="$M0/dir1/$newfile@$V0-dht:$hashed" bs=1024 count=20
TEST stat $M0/dir1/$newfile
TEST stat "$brickpath_0/dir1/$newfile"
EXPECT "1" is_dht_linkfile "$brickpath_1/dir1/$newfile"
force_umount $M0
TEST $CLI volume stop $V0
UMOUNT_LOOP ${B0}/${V0}{1,2}
rm -f ${B0}/brick{1,2}
# Cleanup
cleanup
|