summaryrefslogtreecommitdiffstats
path: root/tests/basic/distribute/file-create.t
blob: 8360c0eb5565d2097a04fbaf7746c3c596f74ef0 (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