]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: bucket limit check misbehaves for > max-entries buckets (usually 1000)
authorMatt Benjamin <mbenjamin@redhat.com>
Wed, 6 Mar 2019 22:05:11 +0000 (17:05 -0500)
committerMatt Benjamin <mbenjamin@redhat.com>
Wed, 6 Mar 2019 22:25:22 +0000 (17:25 -0500)
RGWBucketAdminOp::limit_check does not correctly handle
truncation/continuation markers across calls to rgw_read_user_buckets(...).
Also, it should, but does not, flush its formatter periodically.

Fixes: https://tracker.ceph.com/issues/35973
Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
src/rgw/rgw_bucket.cc

index d08494afc2757e5a457b3045e3771dc73e4ae3b6..b66f4dc72eed2f8c2f9b15fe1b801f60a7227d38 100644 (file)
@@ -1484,14 +1484,15 @@ int RGWBucketAdminOp::limit_check(RGWRados *store,
   formatter->open_array_section("users");
 
   for (const auto& user_id : user_ids) {
+
     formatter->open_object_section("user");
     formatter->dump_string("user_id", user_id);
-    bool done;
     formatter->open_array_section("buckets");
+
+    string marker;
+    bool is_truncated{false};
     do {
       RGWUserBuckets buckets;
-      string marker;
-      bool is_truncated;
 
       ret = rgw_read_user_buckets(store, user_id, buckets,
                                  marker, string(), max_entries, false,
@@ -1566,9 +1567,8 @@ int RGWBucketAdminOp::limit_check(RGWRados *store,
          }
        }
       }
-
-      done = (m_buckets.size() < max_entries);
-    } while (!done); /* foreach: bucket */
+      formatter->flush(cout);
+    } while (is_truncated); /* foreach: bucket */
 
     formatter->close_section();
     formatter->close_section();