summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@inktank.com>2013-04-25 22:22:35 -0700
committerYehuda Sadeh <yehuda@inktank.com>2013-04-25 22:22:35 -0700
commited14a018d91b9b0a6cd9c6542d2a4d9ca2706682 (patch)
treeebd23c85086687cff53a69212cef64f6828060a3
parentb9ae35279af2bca04897291331a142da6da9bb89 (diff)
downloadceph-ed14a018d91b9b0a6cd9c6542d2a4d9ca2706682.tar.gz
rgw: fix list buckets limit
There was an issue when limit was being set, we didn't break from the iterating loop if limit was reached. Also, S3 does not enforce any limit, so keep that behavior. Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
-rw-r--r--src/rgw/rgw_op.cc9
-rw-r--r--src/rgw/rgw_rest_s3.h5
2 files changed, 11 insertions, 3 deletions
diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc
index eab2718ee50..1ea9fb09735 100644
--- a/src/rgw/rgw_op.cc
+++ b/src/rgw/rgw_op.cc
@@ -661,7 +661,12 @@ void RGWListBuckets::execute()
do {
RGWUserBuckets buckets;
- uint64_t read_count = min(limit - total_count, max_buckets);
+ uint64_t read_count;
+ if (limit > 0)
+ read_count = min(limit - total_count, max_buckets);
+ else
+ read_count = max_buckets;
+
ret = rgw_read_user_buckets(store, s->user.user_id, buckets,
marker, read_count, should_get_stats());
@@ -680,7 +685,7 @@ void RGWListBuckets::execute()
total_count += m.size();
- done = (m.size() < read_count || total_count == limit);
+ done = (m.size() < read_count || (limit > 0 && total_count == limit));
if (m.size()) {
send_response_data(buckets);
diff --git a/src/rgw/rgw_rest_s3.h b/src/rgw/rgw_rest_s3.h
index bf97c1a2993..ea8e5edc2cb 100644
--- a/src/rgw/rgw_rest_s3.h
+++ b/src/rgw/rgw_rest_s3.h
@@ -25,7 +25,10 @@ public:
RGWListBuckets_ObjStore_S3() {}
~RGWListBuckets_ObjStore_S3() {}
- int get_params() { return 0; }
+ int get_params() {
+ limit = 0; /* no limit */
+ return 0;
+ }
virtual void send_response_begin(bool has_buckets);
virtual void send_response_data(RGWUserBuckets& buckets);
virtual void send_response_end();