]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osdc: Don't keep wrapping completion in wait_for_latest_osdmap
authorAdam C. Emerson <aemerson@redhat.com>
Tue, 10 Nov 2020 03:14:24 +0000 (22:14 -0500)
committerAdam C. Emerson <aemerson@redhat.com>
Sun, 20 Dec 2020 21:20:28 +0000 (16:20 -0500)
Also remove unsafe use of dispatch.

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
src/osdc/Objecter.h

index e76bb68ad80c632380d1cb53163005c7bf3ac846..3d2b967d2fa6150c2cf4d62ab8c632688d0399a0 100644 (file)
@@ -2503,6 +2503,7 @@ public:
                    ceph::coarse_mono_time sent, uint32_t register_gen);
   boost::system::error_code _normalize_watch_error(boost::system::error_code ec);
 
+  friend class CB_Objecter_GetVersion;
   friend class CB_DoWatchError;
 public:
   template<typename CT>
@@ -2665,7 +2666,7 @@ private:
     unique_lock l(rwlock);
     if (osdmap->get_epoch()) {
       l.unlock();
-      boost::asio::dispatch(std::move(init.completion_handler));
+      boost::asio::post(std::move(init.completion_handler));
     } else {
       waiting_for_map[0].emplace_back(
        OpCompletion::create(
@@ -2751,7 +2752,7 @@ public:
                    version_t oldest) {
       if (ec == boost::system::errc::resource_unavailable_try_again) {
        // try again as instructed
-       objecter->wait_for_latest_osdmap(std::move(fin));
+       objecter->_wait_for_latest_osdmap(std::move(*this));
       } else if (ec) {
        ceph::async::post(std::move(fin), ec);
       } else {
@@ -2785,6 +2786,13 @@ public:
   void _wait_for_new_map(std::unique_ptr<OpCompletion>, epoch_t epoch,
                         boost::system::error_code = {});
 
+private:
+  void _wait_for_latest_osdmap(CB_Objecter_GetVersion&& c) {
+    monc->get_version("osdmap", std::move(c));
+  }
+
+public:
+
   template<typename CompletionToken>
   typename boost::asio::async_result<CompletionToken, OpSignature>::return_type
   wait_for_latest_osdmap(CompletionToken&& token) {