diff options
Diffstat (limited to 'tests/bugs/posix/bug-990028.t')
-rwxr-xr-x | tests/bugs/posix/bug-990028.t | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/tests/bugs/posix/bug-990028.t b/tests/bugs/posix/bug-990028.t new file mode 100755 index 00000000000..a35ea2a9f6e --- /dev/null +++ b/tests/bugs/posix/bug-990028.t @@ -0,0 +1,155 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../fileio.rc + +cleanup; + +TESTS_EXPECTED_IN_LOOP=153 + +function __init() +{ + TEST glusterd + TEST pidof glusterd + TEST $CLI volume info; + + TEST $CLI volume create $V0 $H0:$B0/brick + + EXPECT 'Created' volinfo_field $V0 'Status'; + + TEST $CLI volume start $V0 + + TEST glusterfs --volfile-id=$V0 --volfile-server=$H0 $M0 + + TEST $CLI volume quota $V0 enable +} + +#CASE-1 +#checking pgfid under same directory +function links_in_same_directory() +{ + # create a file file1 + TEST touch $M0/file1 + + # create 50 hardlinks for file1 + for i in `seq 2 50`; do + TEST_IN_LOOP ln $M0/file1 $M0/file$i + done + + # store the pgfid of file1 in PGFID_FILE1 [should be 50 now (0x000000032)] + PGFID_FILE1=`getfattr -m "trusted.pgfid.*" -de hex $B0/brick/file1 2>&1 | grep "trusted.pgfid" | gawk -F '=' '{print $2}'` + + # compare the pgfid(link value ) of each hard links are equal or not + for i in `seq 2 50`; do + TEMP=`getfattr -m "trusted.pgfid.*" -de hex $B0/brick/file$i 2>&1 | grep "trusted.pgfid" | gawk -F '=' '{print $2}'` + TEST_IN_LOOP [ $PGFID_FILE1 = $TEMP ] + done + + # check if no of links value is 50 or not + TEST [ $PGFID_FILE1 = "0x00000032" ] + + # unlink file 2 to 50 + for i in `seq 2 50`; do + TEST_IN_LOOP unlink $M0/file$i; + done + + # now check if pgfid value is 1 or not + PGFID_FILE1=`getfattr -m "trusted.pgfid.*" -de hex $B0/brick/file1 2>&1 | grep "trusted.pgfid" | gawk -F '=' '{print $2}'`; + + TEST [ $PGFID_FILE1 = "0x00000001" ] + + TEST rm -f $M0/* +} + +##checking pgfid under diff directories +function links_across_directories() +{ + TEST mkdir $M0/dir1 $M0/dir2; + + # create a file in dir1 + TEST touch $M0/dir1/file1; + + # create hard link for file1 in dir2 + TEST ln $M0/dir1/file1 $M0/dir2/file2; + + #first check is to find whether there are two pgfids or not + LINES=`getfattr -m "trusted.pgfid.*" -de hex $B0/brick/dir1/file1 2>&1 | grep "trusted.pgfid" | wc -l` + TEST [ $LINES = 2 ] + + for i in $(seq 1 2); do + HL=`getfattr -m "trusted.pgfid.*" -de hex $B0/brick/dir$i/file$i 2>&1 | grep "trusted.pgfid" | cut -d$'\n' -f$i | cut -d'=' -f2` + TEST_IN_LOOP [ $HL = "0x00000001" ] + done + + #now unlink file2 and check the pgfid of file1 + #1. no. of pgfid should be one + #2. no. of hard link should be one + TEST unlink $M0/dir2/file2 + + LINES=`getfattr -m "trusted.pgfid.*" -de hex $B0/brick/dir1/file1 2>&1 | grep "trusted.pgfid" | wc -l` + TEST [ $LINES == 1 ] + + #next to check is to whether they contain hard link value of one or not + HL=`getfattr -m "trusted.pgfid.*" -de hex $B0/brick/dir1/file1 2>&1 | grep "trusted.pgfid" | cut -d'=' -f2` + TEST [ $HL = "0x00000001" ] + + #rename file under same directory + + TEST touch $M0/r_file1 + PGFID_rfile1=`getfattr -m "trusted.pgfid.*" -de hex $B0/brick/r_file1 2>&1 | grep "trusted.pgfid"` + + #cross check whether hard link count is one + HL=`getfattr -m "trusted.pgfid.*" -de hex $B0/brick/r_file1 2>&1 | grep "trusted.pgfid" | cut -d'=' -f2` + + TEST [ $HL = "0x00000001" ] + + #now rename the file to r_file1 + TEST mv $M0/r_file1 $M0/r_file2 + + #now check the pgfid hard link count is still one or not + HL=`getfattr -m "trusted.pgfid.*" -de hex $B0/brick/r_file2 2>&1 | grep "trusted.pgfid" | cut -d'=' -f2` + + TEST [ $HL = "0x00000001" ] + + #now move the file to a different directory where it has no hard link and check + TEST mkdir $M0/dir3; + TEST mv $M0/r_file2 $M0/dir3; + + #now check the pgfid has changed or not and hard limit is one or not + PGFID_newDir=`getfattr -m "trusted.pgfid.*" -de hex $B0/brick/dir3/r_file2 2>&1 | grep "trusted.pgfid"` + + #now the older pgfid and new pgfid shouldn't match + TEST [ $PGFID_rfile1 != $PGFID_newDir ] + + HL=`getfattr -m "trusted.pgfid" -de hex $B0/brick/dir3/r_file2 2>&1 | grep "trusted.pgfid" | cut -d'=' -f2` + TEST [ $HL = "0x00000001" ] + + TEST touch $M0/dir1/rl_file_1 + ln $M0/dir1/rl_file_1 $M0/dir2/rl_file_2 + mv $M0/dir1/rl_file_1 $M0/dir2 + + #now the there should be just one pgfid for both files + for i in $(seq 1 2); do + NL=`getfattr -m "trusted.pgfid" -de hex $B0/brick/dir2/rl_file_$i 2>&1 | grep "trusted.pgfid"|wc -l ` + TEST_IN_LOOP [ $HL = "0x00000001" ] + done + + #now pgfid of both files should match + P_rl_file_1=`getfattr -m "trusted.pgfid" -de hex $B0/brick/dir2/rl_file_1 2>&1 | grep "trusted.pgfid"` + P_rl_file_2=`getfattr -m "trusted.pgfid" -de hex $B0/brick/dir2/rl_file_2 2>&1 | grep "trusted.pgfid"` + TEST [ $P_rl_file_1 = $P_rl_file_2 ] + + #now the no of hard link should be two for both rl_file_1 and rl_file_2 + for i in $(seq 1 2); do + HL=`getfattr -m "trusted.pgfid" -de hex $B0/brick/dir2/rl_file_$i 2>&1 | grep "trusted.pgfid" | cut -d'=' -f2` + TEST_IN_LOOP [ $HL = "0x00000002" ] + done + + TEST rm -rf $M0/* +} + +__init; +links_in_same_directory; +links_across_directories; + +cleanup |