From 92be979173b43ece5891d026d57b2d47b5764cb5 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Fri, 24 Jun 2022 23:33:53 +0000 Subject: [PATCH] crimson/osd/osdmap_gate: remove ShardServices as a member Instead, pass into get_map. Signed-off-by: Samuel Just --- src/crimson/osd/osd.cc | 2 +- src/crimson/osd/osd.h | 7 ++++-- .../osd/osd_operations/client_request.cc | 5 ++-- src/crimson/osd/osdmap_gate.cc | 5 ++-- src/crimson/osd/osdmap_gate.h | 24 +++++++++++-------- src/crimson/osd/pg.cc | 2 +- 6 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 979fd138b7bc2..b08c8dcfa0e73 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -98,7 +98,7 @@ OSD::OSD(int id, uint32_t nonce, update_stats(); }}, asok{seastar::make_lw_shared()}, - 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()) { diff --git a/src/crimson/osd/osd.h b/src/crimson/osd/osd.h index 17b451e70af38..809f2dda0dced 100644 --- a/src/crimson/osd/osd.h +++ b/src/crimson/osd/osd.h @@ -273,8 +273,11 @@ public: OSD_OSDMapGate::OSDMapBlocker::BlockingEvent; return opref.template with_blocking_event( [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); diff --git a/src/crimson/osd/osd_operations/client_request.cc b/src/crimson/osd/osd_operations/client_request.cc index c2a19cd512c27..7d3ea41b50ec9 100644 --- a/src/crimson/osd/osd_operations/client_request.cc +++ b/src/crimson/osd/osd_operations/client_request.cc @@ -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); diff --git a/src/crimson/osd/osdmap_gate.cc b/src/crimson/osd/osdmap_gate.cc index be0f1c08dde1a..b1fb669242cde 100644 --- a/src/crimson/osd/osdmap_gate.cc +++ b/src/crimson/osd/osdmap_gate.cc @@ -25,7 +25,8 @@ void OSDMapGate::OSDMapBlocker::dump_detail(Formatter *f) const template seastar::future OSDMapGate::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( @@ -40,7 +41,7 @@ seastar::future OSDMapGate::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); }), diff --git a/src/crimson/osd/osdmap_gate.h b/src/crimson/osd/osdmap_gate.h index 2604598d05b10..9a7d542db3e39 100644 --- a/src/crimson/osd/osdmap_gate.h +++ b/src/crimson/osd/osdmap_gate.h @@ -55,19 +55,23 @@ private: const char *blocker_type; waiting_peering_t waiting_peering; epoch_t current = 0; - std::optional> shard_services; bool stopping = false; public: - OSDMapGate( - const char *blocker_type, - std::optional> 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 - 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(); }; diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index 33eeb4307865a..203e4542ae3d8 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -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( -- 2.39.5