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
|