]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/: clarify interface for introducing disk state to PeeringState
authorSamuel Just <sjust@redhat.com>
Thu, 4 Apr 2019 00:45:26 +0000 (17:45 -0700)
committersjust@redhat.com <sjust@redhat.com>
Wed, 1 May 2019 18:22:25 +0000 (11:22 -0700)
Signed-off-by: sjust@redhat.com <sjust@redhat.com>
src/osd/PG.cc
src/osd/PeeringState.h

index 31053eb5e84916f31fb4b5c4e037d4b8f9057c80..768097c6028d96d8b0c7a23854587e3b0452f555 100644 (file)
@@ -1325,8 +1325,15 @@ int PG::read_info(
 
 void PG::read_state(ObjectStore *store)
 {
-  int r = read_info(store, pg_id, coll, info, past_intervals,
-                   info_struct_v);
+  PastIntervals past_intervals_from_disk;
+  pg_info_t info_from_disk;
+  int r = read_info(
+    store,
+    pg_id,
+    coll,
+    info_from_disk,
+    past_intervals_from_disk,
+    info_struct_v);
   ceph_assert(r >= 0);
 
   if (info_struct_v < compat_struct_v) {
@@ -1335,22 +1342,25 @@ void PG::read_state(ObjectStore *store)
     ceph_abort_msg("PG too old to upgrade");
   }
 
-  last_written_info = info;
-
-  ostringstream oss;
-  pg_log.read_log_and_missing(
-    store,
-    ch,
-    pgmeta_oid,
-    info,
-    oss,
-    cct->_conf->osd_ignore_stale_divergent_priors,
-    cct->_conf->osd_debug_verify_missing_on_start);
-  if (oss.tellp())
-    osd->clog->error() << oss.str();
-
-  // log any weirdness
-  recovery_state.log_weirdness();
+  recovery_state.last_written_info = info;
+
+  recovery_state.init_from_disk_state(
+    std::move(info_from_disk),
+    std::move(past_intervals_from_disk),
+    [this, store] (PGLog &pglog) {
+      ostringstream oss;
+      pglog.read_log_and_missing(
+       store,
+       ch,
+       pgmeta_oid,
+       info,
+       oss,
+       cct->_conf->osd_ignore_stale_divergent_priors,
+       cct->_conf->osd_debug_verify_missing_on_start);
+
+      if (oss.tellp())
+       osd->clog->error() << oss.str();
+    });
 
   if (info_struct_v < latest_struct_v) {
     upgrade(store);
index 8c1adbe6db9023a296015abba2db36bb7470630f..a2c8de0c0018b2410bceccbe840d9a724b5883d7 100644 (file)
@@ -1463,6 +1463,19 @@ public:
     bool backfill,
     ObjectStore::Transaction *t);
 
+  template <typename F>
+  void init_from_disk_state(
+    pg_info_t &&info_from_disk,
+    PastIntervals &&past_intervals_from_disk,
+    F &&pg_log_init) {
+    info = std::move(info_from_disk);
+    last_written_info = info;
+    past_intervals = std::move(past_intervals_from_disk);
+    pg_log_init(pg_log);
+    log_weirdness();
+  }
+
+
   void start_split_stats(
     const set<spg_t>& childpgs, vector<object_stat_sum_t> *out);
   void finish_split_stats(