]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd: add PG::read_state()
authorKefu Chai <kchai@redhat.com>
Mon, 25 Feb 2019 13:03:12 +0000 (21:03 +0800)
committerKefu Chai <kchai@redhat.com>
Wed, 20 Mar 2019 06:54:07 +0000 (14:54 +0800)
to load pg_info and past_intervals

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/osd/osd.cc
src/crimson/osd/pg.cc
src/crimson/osd/pg.h

index bb3acbae39b4877877e235c89610cee3b35d957d..931ee66f0da7d2eba6f89ae1ebf60390bf00f389 100644 (file)
@@ -347,7 +347,9 @@ seastar::future<Ref<PG>> OSD::load_pg(spg_t pgid)
                       std::move(ec_profile),
                       osdmap,
                       cluster_msgr}};
-    return seastar::make_ready_future<Ref<PG>>(std::move(pg));
+    return pg->read_state(store.get()).then([pg] {
+      return seastar::make_ready_future<Ref<PG>>(std::move(pg));
+    });
   });
 }
 
index d256eb8b46d5536f5a4b638b708c06c6c872ba81..7473a5951645199669ad928c394581ce554bdb05 100644 (file)
@@ -2,6 +2,9 @@
 
 #include "osd/OSDMap.h"
 
+#include "crimson/os/cyan_store.h"
+#include "crimson/osd/pg_meta.h"
+
 
 PG::PG(spg_t pgid,
        pg_shard_t pg_shard,
@@ -13,12 +16,23 @@ PG::PG(spg_t pgid,
   : pgid{pgid},
     whoami{pg_shard},
     pool{std::move(pool)},
+    info{pgid},
     osdmap{osdmap},
     msgr{msgr}
 {
   // TODO
 }
 
+seastar::future<> PG::read_state(ceph::os::CyanStore* store)
+{
+  return PGMeta{store, pgid}.load().then(
+    [this](pg_info_t pg_info_, PastIntervals past_intervals_) {
+      last_written_info = std::move(pg_info_);
+      past_intervals = std::move(past_intervals_);
+      return seastar::now();
+    });
+}
+
 epoch_t PG::get_osdmap_epoch() const
 {
   return osdmap->get_epoch();
@@ -28,3 +42,13 @@ pg_shard_t PG::get_whoami() const
 {
   return whoami;
 }
+
+const pg_info_t& PG::get_info() const
+{
+  return info;
+}
+
+const PastIntervals& PG::get_past_intervals() const
+{
+  return past_intervals;
+}
index 05dc8028cb4bd90246cc5602029cd93238a665b1..ce770825f247e8f5805047566f34e22a12022ace 100644 (file)
@@ -17,6 +17,10 @@ namespace ceph::net {
   class Messenger;
 }
 
+namespace ceph::os {
+  class CyanStore;
+}
+
 class PG : public boost::intrusive_ref_counter<
   PG,
   boost::thread_unsafe_counter>
@@ -34,12 +38,22 @@ public:
      ceph::net::Messenger* msgr);
 
   epoch_t get_osdmap_epoch() const;
+  const pg_info_t& get_info() const;
+  const PastIntervals& get_past_intervals() const;
   pg_shard_t get_whoami() const;
 
+  seastar::future<> read_state(ceph::os::CyanStore* store);
+
 private:
   const spg_t pgid;
   pg_shard_t whoami;
   pg_pool_t pool;
+  //< pg state
+  pg_info_t info;
+  //< last written info, for fast info persistence
+  pg_info_t last_written_info;
+  PastIntervals past_intervals;
+
   cached_map_t osdmap;
   ceph::net::Messenger* msgr = nullptr;
 };