]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: cls_bucket_list_unordered lists a single shard 27924/head
authorCasey Bodley <cbodley@redhat.com>
Fri, 19 Apr 2019 22:38:47 +0000 (18:38 -0400)
committerVicente Cheng <freeze.bilsted@gmail.com>
Thu, 2 May 2019 14:34:02 +0000 (14:34 +0000)
CLSRGWIssueBucketList sends the request to every shard, but this loop
intended to list only the current_shard

Fixes: http://tracker.ceph.com/issues/39393
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit d37d0339ff61a293f2f9fd6dff3fbd630efce2a0)

src/rgw/rgw_rados.cc

index 22eac4ad8bba3d15fd6455798334575d5595ed9f..edf43a41e82747918aba58a184585f9e78850a81 100644 (file)
@@ -9242,19 +9242,16 @@ int RGWRados::cls_bucket_list_unordered(RGWBucketInfo& bucket_info,
   while (count <= num_entries &&
         ((shard_id >= 0 && current_shard == uint32_t(shard_id)) ||
          current_shard < num_shards)) {
-    // key   - oid (for different shards if there is any)
-    // value - list result for the corresponding oid (shard), it is filled by
-    //         the AIO callback
-    map<int, struct rgw_cls_list_ret> list_results;
-    r = CLSRGWIssueBucketList(index_ctx, marker, prefix, num_entries,
-                             list_versions, oids, list_results,
-                             cct->_conf->rgw_bucket_index_max_aio)();
+    const std::string& oid = oids[current_shard];
+    rgw_cls_list_ret result;
+
+    librados::ObjectReadOperation op;
+    cls_rgw_bucket_list_op(op, marker, prefix, num_entries,
+                           list_versions, &result);
+    r = index_ctx.operate(oid, &op, nullptr);
     if (r < 0)
       return r;
 
-    const std::string& oid = oids[current_shard];
-    ceph_assert(list_results.find(current_shard) != list_results.end());
-    auto& result = list_results[current_shard];
     for (auto& entry : result.dir.m) {
       rgw_bucket_dir_entry& dirent = entry.second;