From a8b1bfa1ccbb66d73b7b97ecc714c6c24effd7c4 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Thu, 25 Apr 2013 22:22:35 -0700 Subject: [PATCH] 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 --- src/rgw/rgw_op.cc | 9 +++++++-- src/rgw/rgw_rest_s3.h | 5 ++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 4e9553940f606..39e32047c1eef 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 bf97c1a29932e..ea8e5edc2cbb0 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(); -- 2.39.5