]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: cls_bucket_list_unordered lists a single shard
authorCasey Bodley <cbodley@redhat.com>
Fri, 19 Apr 2019 22:38:47 +0000 (18:38 -0400)
committerCasey Bodley <cbodley@redhat.com>
Mon, 22 Apr 2019 15:20:55 +0000 (11:20 -0400)
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>
src/rgw/rgw_rados.cc

index 2f66f78ffbc53d1d964fd1ef8f8d53d6a412952a..19192ef322113f346a70a4f048c0d9a5fa20d707 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;