]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: move all mark_clean-ish activity into try_mark_clean()
authorSage Weil <sage@redhat.com>
Sat, 15 Sep 2018 19:31:41 +0000 (14:31 -0500)
committerSage Weil <sage@redhat.com>
Thu, 20 Sep 2018 13:35:15 +0000 (08:35 -0500)
Keep it all in one place (try_mark_clean()).  The key behavioral change
is that we update last_epoch_clean and last_epoch_started when we are
peered too, only only when we are active.

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

index beaf7b1743be02e8ec9a3fc09cb1033b5da2e290..34ebff9e5886a4e79db872bb6ecf7bc68d786ed9 100644 (file)
@@ -2330,7 +2330,7 @@ unsigned PG::get_scrub_priority()
   return pool_scrub_priority > 0 ? pool_scrub_priority : cct->_conf->osd_scrub_priority;
 }
 
-void PG::mark_clean()
+void PG::try_mark_clean()
 {
   if (actingset.size() == get_osdmap()->get_pg_size(info.pgid.pgid)) {
     state_clear(PG_STATE_FORCED_BACKFILL | PG_STATE_FORCED_RECOVERY);
@@ -2342,7 +2342,27 @@ void PG::mark_clean()
     dirty_info = true;
   }
 
-  kick_snap_trim();
+  if (is_active()) {
+    kick_snap_trim();
+  } else if (is_peered()) {
+    bool target;
+    if (pool.info.is_pending_merge(info.pgid.pgid, &target)) {
+      if (target) {
+       ldout(cct, 10) << "ready to merge (target)" << dendl;
+       osd->set_ready_to_merge_target(this,
+                                      info.history.last_epoch_clean);
+      } else {
+       ldout(cct, 10) << "ready to merge (source)" << dendl;
+       osd->set_ready_to_merge_source(this);
+      }
+    }
+  }
+
+  state_clear(PG_STATE_FORCED_RECOVERY | PG_STATE_FORCED_BACKFILL);
+
+  share_pg_info();
+  publish_stats_to_osd();
+  requeue_ops(waiting_for_clean_to_primary_repair);
 }
 
 bool PG::set_force_recovery(bool b)
@@ -7989,26 +8009,7 @@ PG::RecoveryState::Clean::Clean(my_context ctx)
   Context *c = pg->finish_recovery();
   context< RecoveryMachine >().get_cur_transaction()->register_on_commit(c);
 
-  if (pg->is_active()) {
-    pg->mark_clean();
-  } else if (pg->is_peered()) {
-    bool target;
-    if (pg->pool.info.is_pending_merge(pg->info.pgid.pgid, &target)) {
-      if (target) {
-       ldout(pg->cct, 10) << "ready to merge (target)" << dendl;
-       pg->osd->set_ready_to_merge_target(pg,
-                                          pg->info.history.last_epoch_clean);
-      } else {
-       ldout(pg->cct, 10) << "ready to merge (source)" << dendl;
-       pg->osd->set_ready_to_merge_source(pg);
-      }
-    }
-  }
-  pg->state_clear(PG_STATE_FORCED_RECOVERY | PG_STATE_FORCED_BACKFILL);
-
-  pg->share_pg_info();
-  pg->publish_stats_to_osd();
-  pg->requeue_ops(pg->waiting_for_clean_to_primary_repair);
+  pg->try_mark_clean();
 }
 
 void PG::RecoveryState::Clean::exit()
index c44563ba0109ba214c1b3ffc7c4888e70ac6a83a..1c1aaa7b634c1b617dea6a3c02fd0840334d223b 100644 (file)
@@ -1332,7 +1332,7 @@ protected:
   /// get priority for pg deletion
   unsigned get_delete_priority();
 
-  void mark_clean();  ///< mark an active pg clean
+  void try_mark_clean();  ///< mark an active pg clean
 
   /// return [start,end) bounds for required past_intervals
   static pair<epoch_t, epoch_t> get_required_past_interval_bounds(