From 7927149f71adc49cad92f28f805a8e688534156e Mon Sep 17 00:00:00 2001 From: vmallika Date: Sun, 3 Apr 2016 20:35:52 +0530 Subject: quota: check inode limits only when new file/dir is created When a inode limit is full, writes to any existing file fails with disk quota exceed even if usage limit is not set or usage limit is not full. BUG: 1323486 Change-Id: I9679fe26a2839ade0b1541fa7f0a2b71ac6dcc31 Signed-off-by: vmallika Reviewed-on: http://review.gluster.org/13911 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System Reviewed-by: Manikandan Selvaganesh --- tests/basic/inode-quota-enforcing.t | 45 ++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 15 deletions(-) (limited to 'tests/basic/inode-quota-enforcing.t') diff --git a/tests/basic/inode-quota-enforcing.t b/tests/basic/inode-quota-enforcing.t index 44b6c52a1ed..0cc92dd3963 100644 --- a/tests/basic/inode-quota-enforcing.t +++ b/tests/basic/inode-quota-enforcing.t @@ -6,6 +6,10 @@ cleanup; +QDD=$(dirname $0)/quota +# compile the test write program and run it +build_tester $(dirname $0)/quota.c -o $QDD + TESTS_EXPECTED_IN_LOOP=9 TEST glusterd @@ -14,7 +18,7 @@ TEST glusterd # Create, start and mount a volume with single brick # -------------------------------------------------- -TEST $CLI volume create $V0 $H0:$B0/{V0} +TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}{1,2}; TEST $CLI volume start $V0 @@ -32,24 +36,17 @@ EXPECT '0' volinfo_field $V0 'features.soft-timeout' TEST $CLI volume quota $V0 hard-timeout 0 EXPECT '0' volinfo_field $V0 'features.hard-timeout' - #------------------------------------------------------- -# Set and remove quota limits on the directory and +# Set quota limits on the directory and # verify if the limits are being reflected properly #------------------------------------------------------ -TEST $CLI volume quota $V0 limit-objects /test_dir 100 -EXPECT "100" quota_object_list_field "/test_dir" 2 - -# Need to verify this once -TEST $CLI volume quota $V0 remove-objects /test_dir -EXPECT "" quota_object_list_field "/test_dir" 2 - -# Set back the limits - TEST $CLI volume quota $V0 limit-objects /test_dir 10 EXPECT "10" quota_object_list_field "/test_dir" 2 +TEST $CLI volume quota $V0 limit-usage /test_dir 100MB +EXPECT "100.0MB" quota_list_field "/test_dir" 2 + #------------------------------------------------------ # Check the quota enforcement mechanism for object count #------------------------------------------------------- @@ -59,12 +56,15 @@ EXPECT "10" quota_object_list_field "/test_dir" 2 # as well. for i in {1..9}; do - TEST_IN_LOOP touch $M0/test_dir/test$i.txt + #TEST_IN_LOOP touch $M0/test_dir/test$i.txt + TEST_IN_LOOP $QDD $M0/test_dir/test$i.txt 256 4 done EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "9" quota_object_list_field "/test_dir" 4 +EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "9.0MB" quotausage "/test_dir" # Check available limit EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "0" quota_object_list_field "/test_dir" 6 +EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "91.0MB" quota_list_field "/test_dir" 5 # Check if hard-limit exceeded EXPECT "Yes" quota_object_list_field "/test_dir" 8 @@ -75,10 +75,25 @@ EXPECT "Yes" quota_object_list_field "/test_dir" 7 # Creation of 11th file should throw out an error TEST ! touch $M0/test_dir/test11.txt +#------------------------------------------------------- +# remove quota limits on the directory and +# verify if the limit show 'N/A' and displayes only the usage +#------------------------------------------------------ +TEST $CLI volume quota $V0 remove-objects /test_dir +EXPECT "N/A" quota_object_list_field "/test_dir" 2 +EXPECT "9" quota_object_list_field "/test_dir" 4 + +TEST $CLI volume quota $V0 remove /test_dir +EXPECT "N/A" quota_list_field "/test_dir" 2 +EXPECT "9.0MB" quotausage "/test_dir" 4 + +# Set back the limits +TEST $CLI volume quota $V0 limit-objects /test_dir 10 +EXPECT "10" quota_object_list_field "/test_dir" 2 + +# Remove all files and verify the file count TEST rm -rf $M0/test_dir/test* EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "0" quota_object_list_field "/test_dir" 4 -TEST $CLI volume quota $V0 remove-objects /test_dir - rm -f $QDD cleanup; -- cgit