From: David Zafman Date: Tue, 23 Dec 2014 20:04:26 +0000 (-0800) Subject: osd: Pass oldest_map when generating past intervals X-Git-Tag: v0.80.10~69^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c09b6d9d64fdcdc3842c4f89acf10080125a4adc;p=ceph.git osd: Pass oldest_map when generating past intervals From load_pgs() the superblock hasn't been published yet so we need to retrieve the value of oldest_map depending on the context. Fixes: #10427 Signed-off-by: David Zafman (cherry picked from commit 7fb721c1ceb39b38ca2e653299bcf51e109411d7) Conflicts: src/osd/OSD.cc --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 77ed17aed027..5fe37310c203 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -2208,7 +2208,7 @@ void OSD::build_past_intervals_parallel() { map pis; - // calculate untion of map range + // calculate junction of map range epoch_t end_epoch = superblock.oldest_map; epoch_t cur_epoch = superblock.newest_map; for (ceph::unordered_map::iterator i = pg_map.begin(); @@ -2217,7 +2217,7 @@ void OSD::build_past_intervals_parallel() PG *pg = i->second; epoch_t start, end; - if (!pg->_calc_past_interval_range(&start, &end)) + if (!pg->_calc_past_interval_range(&start, &end, superblock.oldest_map)) continue; dout(10) << pg->info.pgid << " needs " << start << "-" << end << dendl; diff --git a/src/osd/PG.cc b/src/osd/PG.cc index ebc2020cfff2..4ea71295f763 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -603,7 +603,7 @@ bool PG::needs_backfill() const return ret; } -bool PG::_calc_past_interval_range(epoch_t *start, epoch_t *end) +bool PG::_calc_past_interval_range(epoch_t *start, epoch_t *end, epoch_t oldest_map) { *end = info.history.same_interval_since; @@ -620,7 +620,7 @@ bool PG::_calc_past_interval_range(epoch_t *start, epoch_t *end) *start = MAX(MAX(info.history.epoch_created, info.history.last_epoch_clean), - osd->get_superblock().oldest_map); + oldest_map); if (*start >= *end) { dout(10) << __func__ << " start epoch " << *start << " >= end epoch " << *end << ", nothing to do" << dendl; @@ -634,7 +634,8 @@ bool PG::_calc_past_interval_range(epoch_t *start, epoch_t *end) void PG::generate_past_intervals() { epoch_t cur_epoch, end_epoch; - if (!_calc_past_interval_range(&cur_epoch, &end_epoch)) { + if (!_calc_past_interval_range(&cur_epoch, &end_epoch, + osd->get_superblock().oldest_map)) { return; } diff --git a/src/osd/PG.h b/src/osd/PG.h index e3194779b0e2..57546b07e82b 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -779,7 +779,7 @@ public: void mark_clean(); ///< mark an active pg clean - bool _calc_past_interval_range(epoch_t *start, epoch_t *end); + bool _calc_past_interval_range(epoch_t *start, epoch_t *end, epoch_t oldest_map); void generate_past_intervals(); void trim_past_intervals(); void build_prior(std::auto_ptr &prior_set);