From: Yehuda Sadeh Date: Thu, 23 Jan 2014 21:48:28 +0000 (-0800) Subject: rgw: fix listing of multipart upload parts X-Git-Tag: v0.67.6~20 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=f01bd8a94adc4ce8e7131f74282de5b434a7316a;p=ceph.git 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 --- 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();