]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: set bulk pool flag when creating data pool 51497/head
authorMark Kogan <mkogan@redhat.com>
Mon, 15 May 2023 18:46:16 +0000 (18:46 +0000)
committerMark Kogan <mkogan@redhat.com>
Mon, 22 May 2023 09:31:25 +0000 (09:31 +0000)
fixes: https://tracker.ceph.com/issues/58692

Signed-off-by: Mark Kogan <mkogan@redhat.com>
src/rgw/driver/rados/rgw_rados.cc
src/rgw/driver/rados/rgw_rados.h
src/rgw/driver/rados/rgw_sal_rados.cc
src/rgw/driver/rados/rgw_tools.cc
src/rgw/driver/rados/rgw_tools.h

index 3b706cb86fb80ffe1cd97c17e8c29ad56fa2c56a..e281cd5849507deda5cd7e07f4871b57f143c820 100644 (file)
@@ -630,7 +630,7 @@ RGWDataSyncStatusManager* RGWRados::get_data_sync_manager(const rgw_zone_id& sou
 int RGWRados::get_required_alignment(const DoutPrefixProvider *dpp, const rgw_pool& pool, uint64_t *alignment)
 {
   IoCtx ioctx;
-  int r = open_pool_ctx(dpp, pool, ioctx, false);
+  int r = open_pool_ctx(dpp, pool, ioctx, false, true);
   if (r < 0) {
     ldpp_dout(dpp, 0) << "ERROR: open_pool_ctx() returned " << r << dendl;
     return r;
@@ -1409,10 +1409,10 @@ int RGWRados::open_notif_pool_ctx(const DoutPrefixProvider *dpp)
 }
 
 int RGWRados::open_pool_ctx(const DoutPrefixProvider *dpp, const rgw_pool& pool, librados::IoCtx& io_ctx,
-                           bool mostly_omap)
+                           bool mostly_omap, bool bulk)
 {
   constexpr bool create = true; // create the pool if it doesn't exist
-  return rgw_init_ioctx(dpp, get_rados_handle(), pool, io_ctx, create, mostly_omap);
+  return rgw_init_ioctx(dpp, get_rados_handle(), pool, io_ctx, create, mostly_omap, bulk);
 }
 
 /**** logs ****/
@@ -2389,7 +2389,7 @@ int RGWRados::get_obj_head_ioctx(const DoutPrefixProvider *dpp,
     return -EIO;
   }
 
-  int r = open_pool_ctx(dpp, pool, *ioctx, false);
+  int r = open_pool_ctx(dpp, pool, *ioctx, false, true);
   if (r < 0) {
     ldpp_dout(dpp, 0) << "ERROR: unable to open data-pool=" << pool.to_str() <<
       " for obj=" << obj << " with error-code=" << r << dendl;
@@ -6484,7 +6484,7 @@ int RGWRados::Object::Read::read(int64_t ofs, int64_t end,
     auto iter = state.io_ctxs.find(read_obj.pool);
     if (iter == state.io_ctxs.end()) {
       state.cur_ioctx = &state.io_ctxs[read_obj.pool];
-      r = store->open_pool_ctx(dpp, read_obj.pool, *state.cur_ioctx, false);
+      r = store->open_pool_ctx(dpp, read_obj.pool, *state.cur_ioctx, false, true);
       if (r < 0) {
         ldpp_dout(dpp, 20) << "ERROR: failed to open pool context for pool=" << read_obj.pool << " r=" << r << dendl;
         return r;
@@ -8111,7 +8111,7 @@ int RGWRados::pool_iterate_begin(const DoutPrefixProvider *dpp, const rgw_pool&
   librados::IoCtx& io_ctx = ctx.io_ctx;
   librados::NObjectIterator& iter = ctx.iter;
 
-  int r = open_pool_ctx(dpp, pool, io_ctx, false);
+  int r = open_pool_ctx(dpp, pool, io_ctx, false, false);
   if (r < 0)
     return r;
 
@@ -8125,7 +8125,7 @@ int RGWRados::pool_iterate_begin(const DoutPrefixProvider *dpp, const rgw_pool&
   librados::IoCtx& io_ctx = ctx.io_ctx;
   librados::NObjectIterator& iter = ctx.iter;
 
-  int r = open_pool_ctx(dpp, pool, io_ctx, false);
+  int r = open_pool_ctx(dpp, pool, io_ctx, false, false);
   if (r < 0)
     return r;
 
index 96244b15a4ab22908aaa83ecd38924cf6e81ba90..5dfde0c0f3ee6a5774dae0b45f6ecf968ca8b3f4 100644 (file)
@@ -359,7 +359,7 @@ class RGWRados
   int open_notif_pool_ctx(const DoutPrefixProvider *dpp);
 
   int open_pool_ctx(const DoutPrefixProvider *dpp, const rgw_pool& pool, librados::IoCtx&  io_ctx,
-                   bool mostly_omap);
+                   bool mostly_omap, bool bulk);
 
 
   ceph::mutex lock{ceph::make_mutex("rados_timer_lock")};
index 4ad65b99fc3b9870d39898f10baa213b35be79eb..2b8663a814b5946c4232b305db7208b734d69bfb 100644 (file)
@@ -2959,7 +2959,7 @@ MPRadosSerializer::MPRadosSerializer(const DoutPrefixProvider *dpp, RadosStore*
   oid = raw_obj.oid;
   store->getRados()->get_obj_data_pool(obj->get_bucket()->get_placement_rule(),
                                       obj->get_obj(), &meta_pool);
-  store->getRados()->open_pool_ctx(dpp, meta_pool, ioctx, true);
+  store->getRados()->open_pool_ctx(dpp, meta_pool, ioctx, true, true);
 }
 
 int MPRadosSerializer::try_lock(const DoutPrefixProvider *dpp, utime_t dur, optional_yield y)
index 1c2951c4bcd172c09e7d6a953f888c21c3835e57..66651da5cc8ca7003ef6ba0957db7934c7047837 100644 (file)
@@ -21,7 +21,8 @@ using namespace std;
 int rgw_init_ioctx(const DoutPrefixProvider *dpp,
                    librados::Rados *rados, const rgw_pool& pool,
                    librados::IoCtx& ioctx, bool create,
-                  bool mostly_omap)
+                   bool mostly_omap,
+                   bool bulk)
 {
   int r = rados->ioctx_create(pool.name.c_str(), ioctx);
   if (r == -ENOENT && create) {
@@ -73,6 +74,18 @@ int rgw_init_ioctx(const DoutPrefixProvider *dpp,
                 << pool.name << dendl;
       }
     }
+    if (bulk) {
+      // set bulk
+      bufferlist inbl;
+      int r = rados->mon_command(
+        "{\"prefix\": \"osd pool set\", \"pool\": \"" +
+        pool.name + "\", \"var\": \"bulk\", \"val\": \"true\"}",
+        inbl, NULL, NULL);
+      if (r < 0) {
+        ldpp_dout(dpp, 10) << __func__ << " warning: failed to set 'bulk' on "
+                 << pool.name << dendl;
+      }
+    }
   } else if (r < 0) {
     return r;
   }
index d96912cb866bea9b27c57b74882b101bb4c79f27..66600856d162e40bd71fcbce4221101b82ec9d9a 100644 (file)
@@ -25,8 +25,9 @@ struct obj_version;
 int rgw_init_ioctx(const DoutPrefixProvider *dpp,
                    librados::Rados *rados, const rgw_pool& pool,
                    librados::IoCtx& ioctx,
-                  bool create = false,
-                  bool mostly_omap = false);
+                   bool create = false,
+                   bool mostly_omap = false,
+                   bool bulk = false);
 
 #define RGW_NO_SHARD -1