From 8d73f6288249757662cf36e746835e3ecd84add1 Mon Sep 17 00:00:00 2001 From: vmallika Date: Thu, 8 Jan 2015 16:03:04 +0530 Subject: quota: For a link operation, do quota_check_limit only till the common ancestor of src and dst file In a dht_rename, if src_cached and dst_hashed are different, then rename is split into link and unlink. We need to handle quota_link properly. We have fixed quota_rename in patch# 8940, we need to handle quota_link similarly > http://review.gluster.org/#/c/8940/ > quota: For a rename operation, do quota_check_limit only till the > common ancestor of src and dst file > Example: > set quota limit set to 1GB on / > create a file /a1/b1/file1 of 600MB > mv /a1/b1/file1 /a1/b1/file2 > This rename fails as it takes delta into account which sums up to 1.2BG. > Though we are not creating new file, we still get quota exceeded error. > So quota enforce should happen only till b1. > Similarly: > mv /a/b/c/file /a/b/x/y/file > quota enforce should happen only till dir 'b' > Change-Id: Ia1e5363da876c3d71bd424e67a8bb28b7ac1c7c1 > BUG: 1153964 > Signed-off-by: vmallika > Reviewed-on: http://review.gluster.org/8940 > Tested-by: Gluster Build System > Reviewed-by: Raghavendra G > Tested-by: Raghavendra G Change-Id: I2c814018d17f7af1807c1d1d162d8bdcbb31e491 BUG: 1153964 Signed-off-by: vmallika Reviewed-on: http://review.gluster.org/9419 Tested-by: Gluster Build System Reviewed-by: Raghavendra G Tested-by: Raghavendra G --- tests/bugs/quota/bug-1153964.t | 83 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 tests/bugs/quota/bug-1153964.t (limited to 'tests') diff --git a/tests/bugs/quota/bug-1153964.t b/tests/bugs/quota/bug-1153964.t new file mode 100644 index 00000000000..c923b71ca73 --- /dev/null +++ b/tests/bugs/quota/bug-1153964.t @@ -0,0 +1,83 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +. $(dirname $0)/../../nfs.rc + +function rename_loop() +{ + local i=0 + local limit=$1 + while [ $i -lt $limit ] + do + j=$[$i + 1] + mv $N0/test_dir/file$i $N0/test_dir/file$j + if [ "$?" != "0" ] + then + return 1 + fi + i=$[$i + 1] + done + return 0 +} + +function createFile_and_checkLimit() +{ + local count_val=$1; + dd if=/dev/zero of="$N0/test_dir/file0" bs=1048576 count=$count_val + sleep 3 + if [ -f $N0/test_dir/file0 ] + then + rename_loop 10 + if [ "$?" == "0" ] + then + echo "Y" + else + echo "N" + fi + fi +} + +cleanup; + +TEST glusterd +TEST pidof glusterd + +TEST $CLI volume create $V0 $H0:$B0/${V0}1 $H0:$B0/${V0}2 +EXPECT 'Created' volinfo_field $V0 'Status' +TEST $CLI volume start $V0 +EXPECT 'Started' volinfo_field $V0 'Status' + +TEST $CLI volume quota $V0 enable +EXPECT 'on' volinfo_field $V0 'features.quota' + +EXPECT_WITHIN $NFS_EXPORT_TIMEOUT "1" is_nfs_export_available; +TEST mount_nfs $H0:/$V0 $N0 nolock; +TEST mkdir -p $N0/test_dir/ + +# Try to rename file under various case and check if +# quota limit exceeds or not. +TEST $CLI volume quota $V0 limit-usage /test_dir 100MB +# Case1 : If used size is less than hard-limit size +# Create a 600MB file +EXPECT 'Y' createFile_and_checkLimit 60 + +TEST rm -rf $N0/test_dir/* +# Case2 : If used size is equal to hard-limit size +# Create a 100MB file +EXPECT 'Y' createFile_and_checkLimit 100 + +TEST rm -rf $N0/test_dir/* +# Case3 : If used size is greater than hard-limit size +# Create a 110MB file +EXPECT 'Y' createFile_and_checkLimit 110 + +# remove this directory as it has been created as part +# of above testcase +TEST rm -rf $N0/test_dir/ + +EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $N0 + +cleanup; + + -- cgit