From 76f9de330deaa4fafb86d3f6f2754f0d419306b1 Mon Sep 17 00:00:00 2001 From: Lei Dong Date: Mon, 27 Oct 2014 10:29:48 +0800 Subject: [PATCH] fix can not disable max_size quota MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Currently if we enable quota and set max_size = -1, it doesn’t mean max_size is unlimited as expected. Instead, it means object with any size is not allowed to upload because of “QuotaExceeded”. The root cause is the function rgw_rounded_kb which convert max_size to max_size_kb returns 0 for -1 because it takes an unsigned int but we pass an int to it. A simple fix is check max_size before it’s rounded to max_size_kb. Test case: 1 enable and set quota: radosgw-admin quota enable --uid={user_id} --quota-scope=user radosgw-admin quota set --quota-scope=user --uid={user_id}\ --max-objects=100 --max-size=-1 2 upload any object with non-zero length it will return 403 with “QuotaExceeded” and return 200 if you apply the fix. Fixes: #9907 Backport: giant, firefly Signed-off-by: Dong Lei leidong@yahoo-inc.com (cherry picked from commit abd3fd3ef9ee9999b99811937af60b7a5e673e35) --- src/rgw/rgw_admin.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 31c0c08bd8610..4fe05bf99e158 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -688,7 +688,11 @@ void set_quota_info(RGWQuotaInfo& quota, int opt_cmd, int64_t max_size, int64_t quota.max_objects = max_objects; } if (have_max_size) { - quota.max_size_kb = rgw_rounded_kb(max_size); + if (max_size < 0) { + quota.max_size_kb = -1; + } else { + quota.max_size_kb = rgw_rounded_kb(max_size); + } } break; case OPT_QUOTA_DISABLE: -- 2.39.5