]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: Pass oldest_map when generating past intervals
authorDavid Zafman <dzafman@redhat.com>
Tue, 23 Dec 2014 20:04:26 +0000 (12:04 -0800)
committerDavid Zafman <dzafman@redhat.com>
Tue, 3 Mar 2015 19:21:00 +0000 (11:21 -0800)
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 <dzafman@redhat.com>
(cherry picked from commit 7fb721c1ceb39b38ca2e653299bcf51e109411d7)

Conflicts:
src/osd/OSD.cc

src/osd/OSD.cc
src/osd/PG.cc
src/osd/PG.h

index 77ed17aed027cbcbf78136719c3af221b7587203..5fe37310c203d0485eec00aaaa1f47f32e8441ec 100644 (file)
@@ -2208,7 +2208,7 @@ void OSD::build_past_intervals_parallel()
 {
   map<PG*,pistate> 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<spg_t, PG*>::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;
index ebc2020cfff2734cca82490b2d357ac45e164830..4ea71295f763f295837ee519bfd41c993e8b3eb5 100644 (file)
@@ -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;
   }
 
index e3194779b0e216f08bc1028265f209333f9e6a6f..57546b07e82badfca2f3561cd0d98c779247fc96 100644 (file)
@@ -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<PriorSet> &prior_set);