From f01bd8a94adc4ce8e7131f74282de5b434a7316a Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Thu, 23 Jan 2014 13:48:28 -0800 Subject: [PATCH] rgw: fix listing of multipart upload parts Fixes: #7169 There are two issues here. One is that we may return more entries than we should (as specified by max_parts). Second issue is that the NextPartNumberMarker is set incorrectly. Both of these issues mainly affect uploads with > 1000 parts, although can be triggered with less than that. Signed-off-by: Yehuda Sadeh --- src/rgw/rgw_rest_s3.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index e8a10c1335d78..c6eacce29f6ac 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -1534,14 +1534,14 @@ void RGWListMultipart_ObjStore_S3::send_response() s->formatter->dump_string("UploadId", upload_id); s->formatter->dump_string("StorageClass", "STANDARD"); s->formatter->dump_int("PartNumberMarker", marker); - s->formatter->dump_int("NextPartNumberMarker", cur_max + 1); + s->formatter->dump_int("NextPartNumberMarker", cur_max); s->formatter->dump_int("MaxParts", max_parts); s->formatter->dump_string("IsTruncated", (test_iter == parts.end() ? "false" : "true")); ACLOwner& owner = policy.get_owner(); dump_owner(s, owner.get_id(), owner.get_display_name()); - for (; iter != parts.end(); ++iter) { + for (i = 0; iter != parts.end() && i < max_parts; ++iter, ++i) { RGWUploadPartInfo& info = iter->second; time_t sec = info.modified.sec(); -- 2.39.5