]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: Remove `RGWSI_RADOS` from `RGWSI_Notify`
authorAdam C. Emerson <aemerson@redhat.com>
Fri, 2 Dec 2022 07:17:44 +0000 (02:17 -0500)
committerCasey Bodley <cbodley@redhat.com>
Wed, 29 Nov 2023 18:15:27 +0000 (13:15 -0500)
Simply use the RADOS handle directly.

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
src/rgw/driver/rados/rgw_service.cc
src/rgw/driver/rados/rgw_tools.h
src/rgw/services/svc_notify.cc
src/rgw/services/svc_notify.h

index af4043efa7af1a1376795afc748817ed7fa029eb..ddd4dfdcd74f451e6677c8e60951e3a870b68db9 100644 (file)
@@ -106,7 +106,7 @@ int RGWServices_Def::init(CephContext *cct,
   meta->init(sysobj.get(), mdlog.get(), meta_bes);
   meta_be_sobj->init(sysobj.get(), mdlog.get());
   meta_be_otp->init(sysobj.get(), mdlog.get(), cls.get());
-  notify->init(zone.get(), rados.get(), finisher.get());
+  notify->init(zone.get(), radoshandle, finisher.get());
   otp->init(zone.get(), meta.get(), meta_be_otp.get());
   rados->init();
   zone->init(sysobj.get(), rados.get(), sync_modules.get(), bucket_sync_sobj.get());
index 7fdb3ea3effb9d16a4615daa58f2f04bb3aa2ace..a7639acbb24c6a92e9b8fa2a1a9dcf74506c5926 100644 (file)
@@ -108,34 +108,53 @@ struct rgw_rados_ref {
   rgw_raw_obj obj;
 
 
-  int operate(const DoutPrefixProvider *dpp, librados::ObjectReadOperation *op,
-             bufferlist *pbl, optional_yield y, int flags = 0) {
+  int operate(const DoutPrefixProvider* dpp, librados::ObjectReadOperation* op,
+             bufferlistpbl, optional_yield y, int flags = 0) {
     return rgw_rados_operate(dpp, ioctx, obj.oid, op, pbl, y, flags);
   }
 
-  int operate(const DoutPrefixProvider *dpp, librados::ObjectWriteOperation *op,
+  int operate(const DoutPrefixProvider* dpp, librados::ObjectWriteOperation* op,
              optional_yield y, int flags = 0) {
     return rgw_rados_operate(dpp, ioctx, obj.oid, op, y, flags);
   }
 
-  int aio_operate(librados::AioCompletion *c,
-                 librados::ObjectWriteOperation *op) {
+  int aio_operate(librados::AioCompletionc,
+                 librados::ObjectWriteOperationop) {
     return ioctx.aio_operate(obj.oid, c, op);
   }
 
-  int aio_operate(librados::AioCompletion *c, librados::ObjectReadOperation *op,
+  int aio_operate(librados::AioCompletion* c, librados::ObjectReadOperation* op,
                  bufferlist *pbl) {
     return ioctx.aio_operate(obj.oid, c, op, pbl);
   }
 
-  int notify(const DoutPrefixProvider *dpp, bufferlist& bl, uint64_t timeout_ms,
+  int watch(uint64_t* handle, librados::WatchCtx2* ctx) {
+    return ioctx.watch2(obj.oid, handle, ctx);
+  }
+
+  int aio_watch(librados::AioCompletion* c, uint64_t* handle,
+               librados::WatchCtx2 *ctx) {
+    return ioctx.aio_watch(obj.oid, c, handle, ctx);
+  }
+
+  int unwatch(uint64_t handle) {
+    return ioctx.unwatch2(handle);
+  }
+
+  int notify(const DoutPrefixProvider* dpp, bufferlist& bl, uint64_t timeout_ms,
             bufferlist* pbl, optional_yield y) {
     return rgw_rados_notify(dpp, ioctx, obj.oid, bl, timeout_ms, pbl, y);
   }
+
+  void notify_ack(uint64_t notify_id, uint64_t cookie, bufferlist& bl) {
+    ioctx.notify_ack(obj.oid, notify_id, cookie, bl);
+  }
 };
+
 inline std::ostream& operator <<(std::ostream& m, const rgw_rados_ref& ref) {
   return m << ref.obj;
 }
+
 int rgw_get_rados_ref(const DoutPrefixProvider* dpp, librados::Rados* rados,
                      rgw_raw_obj obj, rgw_rados_ref* ref);
 
index 43f84ed0a4f7e425383126de64f4f343f823317c..041354a376f794797ab1ab06ed621ad2c0f3b5d6 100644 (file)
@@ -29,7 +29,7 @@ class RGWWatcher : public DoutPrefixProvider , public librados::WatchCtx2 {
   CephContext *cct;
   RGWSI_Notify *svc;
   int index;
-  RGWSI_RADOS::Obj obj;
+  rgw_rados_ref obj;
   uint64_t watch_handle;
   int register_ret{0};
   bool unregister_done{false};
@@ -51,7 +51,8 @@ class RGWWatcher : public DoutPrefixProvider , public librados::WatchCtx2 {
   }
 
 public:
-  RGWWatcher(CephContext *_cct, RGWSI_Notify *s, int i, RGWSI_RADOS::Obj& o) : cct(_cct), svc(s), index(i), obj(o), watch_handle(0) {}
+  RGWWatcher(CephContext *_cct, RGWSI_Notify *s, int i, rgw_rados_ref& o)
+    : cct(_cct), svc(s), index(i), obj(o), watch_handle(0) {}
   void handle_notify(uint64_t notify_id,
                     uint64_t cookie,
                     uint64_t notifier_id,
@@ -174,7 +175,7 @@ string RGWSI_Notify::get_control_oid(int i)
 }
 
 // do not call pick_obj_control before init_watch
-RGWSI_RADOS::Obj RGWSI_Notify::pick_control_obj(const string& key)
+rgw_rados_ref RGWSI_Notify::pick_control_obj(const string& key)
 {
   uint32_t r = ceph_str_hash_linux(key.c_str(), key.size());
 
@@ -206,17 +207,17 @@ int RGWSI_Notify::init_watch(const DoutPrefixProvider *dpp, optional_yield y)
       notify_oid = notify_oid_prefix;
     }
 
-    notify_objs[i] = rados_svc->handle().obj({control_pool, notify_oid});
-    auto& notify_obj = notify_objs[i];
-
-    int r = notify_obj.open(dpp);
+    int r = rgw_get_rados_ref(dpp, rados, { control_pool, notify_oid },
+                             &notify_objs[i]);
     if (r < 0) {
       ldpp_dout(dpp, 0) << "ERROR: notify_obj.open() returned r=" << r << dendl;
       return r;
     }
+    auto& notify_obj = notify_objs[i];
 
     librados::ObjectWriteOperation op;
     op.create(false);
+
     r = notify_obj.operate(dpp, &op, y);
     if (r < 0 && r != -EEXIST) {
       ldpp_dout(dpp, 0) << "ERROR: notify_obj.operate() returned r=" << r << dendl;
@@ -270,10 +271,6 @@ int RGWSI_Notify::do_start(optional_yield y, const DoutPrefixProvider *dpp)
 
   assert(zone_svc->is_started()); /* otherwise there's an ordering problem */
 
-  r = rados_svc->start(y, dpp);
-  if (r < 0) {
-    return r;
-  }
   r = finisher_svc->start(y, dpp);
   if (r < 0) {
     return r;
@@ -315,14 +312,14 @@ void RGWSI_Notify::shutdown()
   finalized = true;
 }
 
-int RGWSI_Notify::unwatch(RGWSI_RADOS::Obj& obj, uint64_t watch_handle)
+int RGWSI_Notify::unwatch(rgw_rados_ref& obj, uint64_t watch_handle)
 {
   int r = obj.unwatch(watch_handle);
   if (r < 0) {
     ldout(cct, 0) << "ERROR: rados->unwatch2() returned r=" << r << dendl;
     return r;
   }
-  r = rados_svc->handle().watch_flush();
+  r = rados->watch_flush();
   if (r < 0) {
     ldout(cct, 0) << "ERROR: rados->watch_flush() returned r=" << r << dendl;
     return r;
@@ -392,9 +389,9 @@ int RGWSI_Notify::distribute(const DoutPrefixProvider *dpp, const string& key,
     which will lead to division by 0 in pick_obj_control (num_watchers is 0).
   */
   if (num_watchers > 0) {
-    RGWSI_RADOS::Obj notify_obj = pick_control_obj(key);
+    auto notify_obj = pick_control_obj(key);
 
-    ldpp_dout(dpp, 10) << "distributing notification oid=" << notify_obj.get_ref().obj
+    ldpp_dout(dpp, 10) << "distributing notification oid=" << notify_obj.obj
                       << " cni=" << cni << dendl;
     return robust_notify(dpp, notify_obj, cni, y);
   }
@@ -443,7 +440,7 @@ static timeout_vector decode_timeouts(const bufferlist& bl)
 }
 
 int RGWSI_Notify::robust_notify(const DoutPrefixProvider *dpp,
-                                RGWSI_RADOS::Obj& notify_obj,
+                                rgw_rados_ref& notify_obj,
                                const RGWCacheNotifyInfo& cni,
                                 optional_yield y)
 {
index f7329136ece1718d6951700bd3b1cd65711e0066..618853d02c6554a640b5c1dec60ead63326a2062 100644 (file)
@@ -7,6 +7,8 @@
 
 #include "svc_rados.h"
 
+#include "rgw_tools.h"
+
 
 class Context;
 
@@ -21,14 +23,14 @@ class RGWSI_Notify : public RGWServiceInstance
 {
   friend class RGWWatcher;
   friend class RGWSI_Notify_ShutdownCB;
-  friend class RGWServices_Def;
+  friend struct RGWServices_Def;
 
 public:
   class CB;
 
 private:
   RGWSI_Zone *zone_svc{nullptr};
-  RGWSI_RADOS *rados_svc{nullptr};
+  librados::Rados *rados{nullptr};
   RGWSI_Finisher *finisher_svc{nullptr};
 
   ceph::shared_mutex watchers_lock = ceph::make_shared_mutex("watchers_lock");
@@ -37,7 +39,7 @@ private:
   int num_watchers{0};
   RGWWatcher **watchers{nullptr};
   std::set<int> watchers_set;
-  std::vector<RGWSI_RADOS::Obj> notify_objs;
+  std::vector<rgw_rados_ref> notify_objs;
 
   bool enabled{false};
 
@@ -45,7 +47,7 @@ private:
   uint64_t max_notify_retries = 10;
 
   std::string get_control_oid(int i);
-  RGWSI_RADOS::Obj pick_control_obj(const std::string& key);
+  rgw_rados_ref pick_control_obj(const std::string& key);
 
   CB *cb{nullptr};
 
@@ -58,16 +60,16 @@ private:
   void finalize_watch();
 
   void init(RGWSI_Zone *_zone_svc,
-            RGWSI_RADOS *_rados_svc,
+            librados::Rados* rados_,
             RGWSI_Finisher *_finisher_svc) {
     zone_svc = _zone_svc;
-    rados_svc = _rados_svc;
+    rados = rados_;
     finisher_svc = _finisher_svc;
   }
   int do_start(optional_yield, const DoutPrefixProvider *dpp) override;
   void shutdown() override;
 
-  int unwatch(RGWSI_RADOS::Obj& obj, uint64_t watch_handle);
+  int unwatch(rgw_rados_ref& obj, uint64_t watch_handle);
   void add_watcher(int i);
   void remove_watcher(int i);
 
@@ -79,7 +81,7 @@ private:
   void _set_enabled(bool status);
   void set_enabled(bool status);
 
-  int robust_notify(const DoutPrefixProvider *dpp, RGWSI_RADOS::Obj& notify_obj,
+  int robust_notify(const DoutPrefixProvider *dpp, rgw_rados_ref& notify_obj,
                    const RGWCacheNotifyInfo& bl, optional_yield y);
 
   void schedule_context(Context *c);