SIZE_LIST="1048576 1000 12345 0" LAST_BRICK=$(($DISPERSE - 1)) function fragment_size { local fragments=$(($DISPERSE - $REDUNDANCY)) local block_size=$((128 * $fragments)) local size=$(($1 + $block_size - 1)) echo $((( $size - ( $size ) % $block_size ) / $fragments)) } cleanup tmp=`mktemp -d -t ${0##*/}.XXXXXX` if [ ! -d $tmp ]; then exit 1 fi TEST glusterd TEST pidof glusterd TEST $CLI volume create $V0 redundancy $REDUNDANCY $H0:$B0/${V0}{0..$LAST_BRICK} TEST $CLI volume start $V0 TEST glusterfs --volfile-id=/$V0 --volfile-server=$H0 $M0 --attribute-timeout=0 --entry-timeout=0 TEST dd if=/dev/urandom of=$tmp/small bs=1024 count=1 TEST dd if=/dev/urandom of=$tmp/big bs=1024 count=4096 cs_small=$(sha1sum $tmp/small | awk '{ print $1 }') cs_big=$(sha1sum $tmp/big | awk '{ print $1 }') cp $tmp/small $tmp/small1 for size in $SIZE_LIST; do truncate -s $size $tmp/small1 eval cs_small_truncate[$size]=$(sha1sum $tmp/small1 | awk '{ print $1 }') done cp $tmp/big $tmp/big1 for size in $SIZE_LIST; do truncate -s $size $tmp/big1 eval cs_big_truncate[$size]=$(sha1sum $tmp/big1 | awk '{ print $1 }') done TEST df -h TEST stat $M0 for idx in `seq 0 $LAST_BRICK`; do brick[$idx]=$(gf_get_gfid_backend_file_path $B0/$V0$idx) done cd $M0 TEST stat . TEST mkdir dir1 TEST [ -d dir1 ] TEST touch file1 TEST [ -f file1 ] for dir in . dir1; do TEST cp $tmp/small $dir/small TEST [ -f $dir/small ] fsize=$(fragment_size 1024) EXPECT "1024" stat -c "%s" $dir/small for idx in `seq 0 $LAST_BRICK`; do EXPECT "$fsize" stat -c "%s" ${brick[$idx]}/$dir/small done EXPECT "$cs_small" echo $(sha1sum $dir/small | awk '{ print $1 }') TEST cp $tmp/big $dir/big TEST [ -f $dir/big ] fsize=$(fragment_size 4194304) EXPECT "4194304" stat -c "%s" $dir/big for idx in `seq 0 $LAST_BRICK`; do EXPECT "$fsize" stat -c "%s" ${brick[$idx]}/$dir/big done EXPECT "$cs_big" echo $(sha1sum $dir/big | awk '{ print $1 }') for idx in `seq 0 $LAST_BRICK`; do TEST kill_brick $V0 $H0 $B0/$V0$idx EXPECT "1024" stat -c "%s" $dir/small EXPECT "4194304" stat -c "%s" $dir/big EXPECT "$cs_small" echo $(sha1sum $dir/small | awk '{ print $1 }') EXPECT "$cs_big" echo $(sha1sum $dir/big | awk '{ print $1 }') cd TEST umount $M0 TEST $CLI volume stop $V0 force TEST $CLI volume start $V0 TEST glusterfs --volfile-id=/$V0 --volfile-server=$H0 $M0 --attribute-timeout=0 --entry-timeout=0 cd $M0 done for size in $SIZE_LIST; do TEST truncate -s $size $dir/small TEST [ -f $dir/small ] fsize=$(fragment_size $size) EXPECT "$size" stat -c "%s" $dir/small for idx in `seq 0 $LAST_BRICK`; do EXPECT "$fsize" stat -c "%s" ${brick[$idx]}/$dir/small done EXPECT "${cs_small_truncate[$size]}" echo $(sha1sum $dir/small | awk '{ print $1 }') TEST truncate -s $size $dir/big TEST [ -f $dir/big ] EXPECT "$size" stat -c "%s" $dir/big for idx in `seq 0 $LAST_BRICK`; do EXPECT "$fsize" stat -c "%s" ${brick[$idx]}/$dir/big done EXPECT "${cs_big_truncate[$size]}" echo $(sha1sum $dir/big | awk '{ print $1 }') done TEST rm -f $dir/small TEST [ ! -e $dir/small ] for idx in `seq 0 $LAST_BRICK`; do TEST [ ! -e ${brick[$idx]}/$dir/small ] done TEST rm -f $dir/big TEST [ ! -e $dir/big ] for idx in `seq 0 $LAST_BRICK`; do TEST [ ! -e ${brick[$idx]}/$dir/big ] done done TEST rmdir dir1 TEST [ ! -e dir1 ] for idx in `seq 0 $LAST_BRICK`; do TEST [ ! -e ${brick[$idx]}/dir1 ] done TEST rm -f file1 TEST [ ! -e file1 ] for idx in `seq 0 $LAST_BRICK`; do TEST [ ! -e ${brick[$idx]}/file1 ] done rm -rf $tmp cleanup