From: Samuel Just Date: Thu, 4 Apr 2019 00:45:26 +0000 (-0700) Subject: osd/: clarify interface for introducing disk state to PeeringState X-Git-Tag: v15.1.0~2774^2~28 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a428973054f7b627ced792da62a0ff0f0a89f044;p=ceph.git osd/: clarify interface for introducing disk state to PeeringState Signed-off-by: sjust@redhat.com --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 31053eb5e849..768097c6028d 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -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); diff --git a/src/osd/PeeringState.h b/src/osd/PeeringState.h index 8c1adbe6db90..a2c8de0c0018 100644 --- a/src/osd/PeeringState.h +++ b/src/osd/PeeringState.h @@ -1463,6 +1463,19 @@ public: bool backfill, ObjectStore::Transaction *t); + template + 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& childpgs, vector *out); void finish_split_stats(