]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd: move send_incremental_map to OSDSingletonState
authorSamuel Just <sjust@redhat.com>
Fri, 9 Sep 2022 02:57:22 +0000 (19:57 -0700)
committerSamuel Just <sjust@redhat.com>
Tue, 27 Sep 2022 02:35:41 +0000 (19:35 -0700)
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/pg_shard_manager.h
src/crimson/osd/shard_services.cc
src/crimson/osd/shard_services.h

index d2bdc42f6203dc8c72c733ec0c7ad32d582a3429..7ebe89f4d31e21e052a44a84c11af5a5b1703814 100644 (file)
@@ -376,6 +376,7 @@ seastar::future<> OSD::start()
     );
   }).then([this](OSDSuperblock&& sb) {
     superblock = std::move(sb);
+    pg_shard_manager.set_superblock(sb);
     return pg_shard_manager.get_local_map(superblock.current_epoch);
   }).then([this](OSDMapService::local_cached_map_t&& map) {
     osdmap = make_local_shared_foreign(OSDMapService::local_cached_map_t(map));
@@ -909,6 +910,7 @@ seastar::future<> OSD::handle_osd_map(crimson::net::ConnectionRef conn,
         superblock.clean_thru = last;
       }
       pg_shard_manager.get_meta_coll().store_superblock(t, superblock);
+      pg_shard_manager.set_superblock(superblock);
       logger().debug("OSD::handle_osd_map: do_transaction...");
       return store.do_transaction(
        pg_shard_manager.get_meta_coll().collection(),
@@ -1073,32 +1075,6 @@ seastar::future<> OSD::handle_update_log_missing_reply(
   return seastar::now();
 }
 
-seastar::future<> OSD::send_incremental_map(crimson::net::ConnectionRef conn,
-                                           epoch_t first)
-{
-  if (first >= superblock.oldest_map) {
-    return pg_shard_manager.load_map_bls(first, superblock.newest_map)
-    .then([this, conn, first](auto&& bls) {
-      auto m = crimson::make_message<MOSDMap>(monc->get_fsid(),
-         osdmap->get_encoding_features());
-      m->oldest_map = first;
-      m->newest_map = superblock.newest_map;
-      m->maps = std::move(bls);
-      return conn->send(std::move(m));
-    });
-  } else {
-    return pg_shard_manager.load_map_bl(osdmap->get_epoch())
-    .then([this, conn](auto&& bl) mutable {
-      auto m = crimson::make_message<MOSDMap>(monc->get_fsid(),
-         osdmap->get_encoding_features());
-      m->oldest_map = superblock.oldest_map;
-      m->newest_map = superblock.newest_map;
-      m->maps.emplace(osdmap->get_epoch(), std::move(bl));
-      return conn->send(std::move(m));
-    });
-  }
-}
-
 seastar::future<> OSD::handle_rep_op(crimson::net::ConnectionRef conn,
                                     Ref<MOSDRepOp> m)
 {
index 04d3251312e2725fdb6430b7b04f4ff7d28fe48b..02aa2d3e25ff07823f345b581d3e8a4525b0154b 100644 (file)
@@ -141,9 +141,6 @@ public:
   seastar::future<> dump_pg_state_history(Formatter*) const;
   void print(std::ostream&) const;
 
-  seastar::future<> send_incremental_map(crimson::net::ConnectionRef conn,
-                                        epoch_t first);
-
   /// @return the seq id of the pg stats being sent
   uint64_t send_pg_stats();
 
index 883775463795b975a3628dcb7ae9a0db3a59507f..d19e5a97ee23b3c1e104135259e83e1d6fff9042 100644 (file)
@@ -115,11 +115,11 @@ seastar::future<> ClientRequest::with_pg_int(
   auto instance_handle = get_instance_handle();
   auto &ihref = *instance_handle;
   return interruptor::with_interruption(
-    [this, pgref, this_instance_id, &ihref]() mutable {
+    [this, pgref, this_instance_id, &ihref, &shard_services]() mutable {
       PG &pg = *pgref;
       if (pg.can_discard_op(*m)) {
-       return osd.send_incremental_map(
-         conn, m->get_map_epoch()
+       return shard_services.send_incremental_map(
+         std::ref(*conn), m->get_map_epoch()
        ).then([this, this_instance_id, pgref] {
          logger().debug("{}.{}: discarding", *this, this_instance_id);
          pgref->client_request_orderer.remove_request(*this);
@@ -310,6 +310,7 @@ ClientRequest::do_process(
              return ihref.enter_stage<interruptor>(pp(*pg).send_reply, *this
              ).then_interruptible(
                [this, reply=std::move(reply)]() mutable {
+                 logger().debug("{}: sending response", *this);
                  return conn->send(std::move(reply)).then([] {
                    return seastar::make_ready_future<seq_mode_t>(seq_mode_t::IN_ORDER);
                  });
index cc2aa6a84e17e175e363a8c4ab5b49da84660331..3fdc3524d18cbd834869388a3f59dc9f1d6f6a69 100644 (file)
@@ -127,6 +127,8 @@ public:
   FORWARD_TO_OSD_SINGLETON(init_meta_coll)
   FORWARD_TO_OSD_SINGLETON(get_meta_coll)
 
+  FORWARD_TO_OSD_SINGLETON(set_superblock)
+
   // Core OSDMap methods
   FORWARD_TO_OSD_SINGLETON(get_local_map)
   FORWARD_TO_OSD_SINGLETON(load_map_bl)
index 979b3314b49289dfa1a419800031acb4f298a14e..68794184d0a540c2dbf6690db66cde260460da44 100644 (file)
@@ -365,6 +365,7 @@ seastar::future<std::map<epoch_t, bufferlist>> OSDSingletonState::load_map_bls(
   epoch_t first,
   epoch_t last)
 {
+  ceph_assert(first <= last);
   return seastar::map_reduce(boost::make_counting_iterator<epoch_t>(first),
                             boost::make_counting_iterator<epoch_t>(last + 1),
                             [this](epoch_t e) {
@@ -665,5 +666,36 @@ seastar::future<> ShardServices::dispatch_context(
   });
 }
 
+seastar::future<> OSDSingletonState::send_incremental_map(
+  crimson::net::Connection &conn,
+  epoch_t first)
+{
+  if (first >= superblock.oldest_map) {
+    return load_map_bls(
+      first, superblock.newest_map
+    ).then([this, &conn, first](auto&& bls) {
+      auto m = crimson::make_message<MOSDMap>(
+       monc.get_fsid(),
+       osdmap->get_encoding_features());
+      m->oldest_map = first;
+      m->newest_map = superblock.newest_map;
+      m->maps = std::move(bls);
+      return conn.send(std::move(m));
+    });
+  } else {
+    return load_map_bl(osdmap->get_epoch()
+    ).then([this, &conn](auto&& bl) mutable {
+      auto m = crimson::make_message<MOSDMap>(
+       monc.get_fsid(),
+       osdmap->get_encoding_features());
+      m->oldest_map = superblock.oldest_map;
+      m->newest_map = superblock.newest_map;
+      m->maps.emplace(osdmap->get_epoch(), std::move(bl));
+      return conn.send(std::move(m));
+    });
+  }
+}
+
+
 
 };
index e1adbb9049d96765b98584d86962fa917b048fa8..2f6e026b342d3d850fb0d13bd420362502d84473 100644 (file)
@@ -226,6 +226,15 @@ private:
     return *meta_coll;
   }
 
+  OSDSuperblock superblock;
+  void set_superblock(OSDSuperblock _superblock) {
+    superblock = std::move(_superblock);
+  }
+
+  seastar::future<> send_incremental_map(
+    crimson::net::Connection &conn,
+    epoch_t first);
+
   auto get_pool_info(int64_t poolid) {
     return get_meta_coll().load_final_pool_info(poolid);
   }
@@ -421,6 +430,8 @@ public:
   FORWARD_TO_OSD_SINGLETON(get_pool_info)
   FORWARD(with_throttle_while, with_throttle_while, local_state.throttler)
 
+  FORWARD_TO_OSD_SINGLETON(send_incremental_map)
+
   FORWARD_TO_OSD_SINGLETON(osdmap_subscribe)
   FORWARD_TO_OSD_SINGLETON(queue_want_pg_temp)
   FORWARD_TO_OSD_SINGLETON(remove_want_pg_temp)