]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd/PG: keep epoch, not map ref, of last osdmap for lsat persisted epoch
authorSage Weil <sage@redhat.com>
Thu, 4 Jan 2018 14:46:35 +0000 (08:46 -0600)
committerSage Weil <sage@redhat.com>
Tue, 3 Apr 2018 15:12:35 +0000 (10:12 -0500)
No need to pin the map in memory!

Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/PG.cc
src/osd/PG.h

index a1995c58d2a1071c037f81fdd1fe427a3343f066..787449b14b8600a1f049296c279e79a3ecc90c3f 100644 (file)
@@ -321,7 +321,7 @@ PG::PG(OSDService *o, OSDMapRef curmap,
     p.get_split_bits(_pool.info.get_pg_num()),
     _pool.id,
     p.shard),
-  last_persisted_osdmap_ref(curmap),
+  last_persisted_osdmap(curmap->get_epoch()),
   deleting(false),
   trace_endpoint("0.0.0.0", 0, "PG"),
   dirty_info(false), dirty_big_info(false),
@@ -3463,7 +3463,7 @@ void PG::prepare_write_info(map<string,bufferlist> *km)
   assert(ret == 0);
   if (need_update_epoch)
     last_epoch = get_osdmap()->get_epoch();
-  last_persisted_osdmap_ref = osdmap_ref;
+  last_persisted_osdmap = last_epoch;
 
   dirty_info = false;
   dirty_big_info = false;
@@ -6455,15 +6455,15 @@ void PG::handle_activate_map(RecoveryCtx *rctx)
   dout(10) << "handle_activate_map " << dendl;
   ActMap evt;
   recovery_state.handle_event(evt, rctx);
-  if (osdmap_ref->get_epoch() - last_persisted_osdmap_ref->get_epoch() >
+  if (osdmap_ref->get_epoch() - last_persisted_osdmap >
     cct->_conf->osd_pg_epoch_persisted_max_stale) {
     dout(20) << __func__ << ": Dirtying info: last_persisted is "
-            << last_persisted_osdmap_ref->get_epoch()
+            << last_persisted_osdmap
             << " while current is " << osdmap_ref->get_epoch() << dendl;
     dirty_info = true;
   } else {
     dout(20) << __func__ << ": Not dirtying info: last_persisted is "
-            << last_persisted_osdmap_ref->get_epoch()
+            << last_persisted_osdmap
             << " while current is " << osdmap_ref->get_epoch() << dendl;
   }
   if (osdmap_ref->check_new_blacklist_entries()) {
index 39e7069ac6c82fed8165151de14e99ecdc1c365b..f8d63079b01aedf52545dc0cbe574cc65d217e7b 100644 (file)
@@ -554,7 +554,7 @@ protected:
     return get_pgbackend()->get_is_recoverable_predicate();
   }
 protected:
-  OSDMapRef last_persisted_osdmap_ref;
+  epoch_t last_persisted_osdmap;
 
   void requeue_map_waiters();