]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/osdmap_gate: remove ShardServices as a member
authorSamuel Just <sjust@redhat.com>
Fri, 24 Jun 2022 23:33:53 +0000 (23:33 +0000)
committerSamuel Just <sjust@redhat.com>
Wed, 13 Jul 2022 00:50:02 +0000 (00:50 +0000)
Instead, pass into get_map.

Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/osd/osd.cc
src/crimson/osd/osd.h
src/crimson/osd/osd_operations/client_request.cc
src/crimson/osd/osdmap_gate.cc
src/crimson/osd/osdmap_gate.h
src/crimson/osd/pg.cc

index 979fd138b7bc25c4778901032d78edbbd64063de..b08c8dcfa0e73e4c8f4136593abe940448b9da3a 100644 (file)
@@ -98,7 +98,7 @@ OSD::OSD(int id, uint32_t nonce,
       update_stats();
     }},
     asok{seastar::make_lw_shared<crimson::admin::AdminSocket>()},
-    osdmap_gate("OSD::osdmap_gate", std::make_optional(std::ref(shard_services))),
+    osdmap_gate("OSD::osdmap_gate"),
     log_client(cluster_msgr.get(), LogClient::NO_FLAGS),
     clog(log_client.create_channel())
 {
index 17b451e70af380a7a23dfa2c3220588415f624f4..809f2dda0dced3dc8caf0cc5923ea987415bd75f 100644 (file)
@@ -273,8 +273,11 @@ public:
        OSD_OSDMapGate::OSDMapBlocker::BlockingEvent;
       return opref.template with_blocking_event<OSDMapBlockingEvent>(
        [this, &opref](auto &&trigger) {
-         return osdmap_gate.wait_for_map(std::move(trigger),
-                                         opref.get_epoch());
+         return osdmap_gate.wait_for_map(
+           std::move(trigger),
+           opref.get_epoch(),
+           &shard_services
+         );
        });
     }).then([&logger, &opref](auto epoch) {
       logger.debug("{}: got map {}, entering get_pg", opref, epoch);
index c2a19cd512c27582b945d703332f0ce86df84767..7d3ea41b50ec927874ff4d25f435ae15afb76983 100644 (file)
@@ -133,8 +133,9 @@ seastar::future<> ClientRequest::with_pg_int(
        return with_blocking_event<
          PG_OSDMapGate::OSDMapBlocker::BlockingEvent
          >([this, &pg] (auto&& trigger) {
-           return pg.osdmap_gate.wait_for_map(std::move(trigger),
-                                              m->get_min_epoch());
+           return pg.osdmap_gate.wait_for_map(
+             std::move(trigger),
+             m->get_min_epoch());
          });
       }).then_interruptible([this, this_instance_id, &pg](auto map) {
        logger().debug("{}.{}: after wait_for_map", *this, this_instance_id);
index be0f1c08dde1ad3817b4fc42d07cfe2918af0fbd..b1fb669242cde65ef728b0b0bab11dacaf88dbb6 100644 (file)
@@ -25,7 +25,8 @@ void OSDMapGate<OSDMapGateTypeV>::OSDMapBlocker::dump_detail(Formatter *f) const
 template <OSDMapGateType OSDMapGateTypeV>
 seastar::future<epoch_t> OSDMapGate<OSDMapGateTypeV>::wait_for_map(
   typename OSDMapBlocker::BlockingEvent::TriggerI&& trigger,
-  epoch_t epoch)
+  epoch_t epoch,
+  ShardServices *shard_services)
 {
   if (__builtin_expect(stopping, false)) {
     return seastar::make_exception_future<epoch_t>(
@@ -40,7 +41,7 @@ seastar::future<epoch_t> OSDMapGate<OSDMapGateTypeV>::wait_for_map(
     auto fut = blocker.promise.get_shared_future();
     if (shard_services) {
       return trigger.maybe_record_blocking(
-       (*shard_services).get().osdmap_subscribe(current, true).then(
+       shard_services->osdmap_subscribe(current, true).then(
          [fut=std::move(fut)]() mutable {
            return std::move(fut);
          }),
index 2604598d05b1050fde52dab7ced1f1cc54a32473..9a7d542db3e3954ae816337ddc9ae3fdd8c6ddda 100644 (file)
@@ -55,19 +55,23 @@ private:
   const char *blocker_type;
   waiting_peering_t waiting_peering;
   epoch_t current = 0;
-  std::optional<std::reference_wrapper<ShardServices>> shard_services;
   bool stopping = false;
 public:
-  OSDMapGate(
-    const char *blocker_type,
-    std::optional<std::reference_wrapper<ShardServices>> shard_services)
-    : blocker_type(blocker_type), shard_services(shard_services) {}
-
-  // wait for an osdmap whose epoch is greater or equal to given epoch
-  // TODO: define me!
+  OSDMapGate(const char *blocker_type)
+    : blocker_type(blocker_type) {}
+
+  /**
+   * wait_for_map
+   *
+   * Wait for an osdmap whose epoch is greater or equal to given epoch.
+   * If shard_services is non-null, request map if not present.
+   */
   seastar::future<epoch_t>
-  wait_for_map(typename OSDMapBlocker::BlockingEvent::TriggerI&& trigger,
-              epoch_t epoch);
+  wait_for_map(
+    typename OSDMapBlocker::BlockingEvent::TriggerI&& trigger,
+    epoch_t epoch,
+    ShardServices *shard_services=nullptr
+  );
   void got_map(epoch_t epoch);
   seastar::future<> stop();
 };
index 33eeb4307865a65cc7dc2121cc1ab1ed65c5604f..203e4542ae3d808c2fb3eade9b0db6f201146556 100644 (file)
@@ -91,7 +91,7 @@ PG::PG(
     pg_whoami{pg_shard},
     coll_ref{coll_ref},
     pgmeta_oid{pgid.make_pgmeta_oid()},
-    osdmap_gate("PG::osdmap_gate", std::nullopt),
+    osdmap_gate("PG::osdmap_gate"),
     shard_services{shard_services},
     osdmap{osdmap},
     backend(