]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: move some osd logic into handle_pg_trim
authorSage Weil <sage@redhat.com>
Sun, 17 Sep 2017 22:10:53 +0000 (17:10 -0500)
committerSage Weil <sage@redhat.com>
Fri, 6 Oct 2017 18:08:18 +0000 (13:08 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSD.cc
src/osd/PG.cc
src/osd/PG.h

index 9cbce15c9b5355b35eb2acdd98e5b1aae73fc8e6..342051a1c6a0498afdbe8dc7c23c863c6d7b6cba 100644 (file)
@@ -8391,29 +8391,7 @@ void OSD::handle_pg_trim(OpRequestRef op)
     dout(10) << " don't have pg " << m->pgid << dendl;
     return;
   }
-
-  if (m->epoch < pg->info.history.same_interval_since) {
-    dout(10) << *pg << " got old trim to " << m->trim_to << ", ignoring" << dendl;
-    pg->unlock();
-    return;
-  }
-
-  if (pg->is_primary()) {
-    // peer is informing us of their last_complete_ondisk
-    dout(10) << *pg << " replica osd." << from << " lcod " << m->trim_to << dendl;
-    pg->peer_last_complete_ondisk[pg_shard_t(from, m->pgid.shard)] =
-      m->trim_to;
-    // trim log when the pg is recovered
-    pg->calc_min_last_complete_ondisk();
-  } else {
-    // primary is instructing us to trim
-    ObjectStore::Transaction t;
-    pg->pg_log.trim(m->trim_to, pg->info);
-    pg->dirty_info = true;
-    pg->write_if_dirty(t);
-    int tr = store->queue_transaction(pg->osr.get(), std::move(t), NULL);
-    assert(tr == 0);
-  }
+  pg->handle_pg_trim(m->epoch, from, m->pgid.shard, m->trim_to);
   pg->unlock();
 }
 
index ba8e17315028b325299f590ffdfa26d0a2ce92a2..36058c439b6412e055158479d65760a6ff43f460 100644 (file)
@@ -3076,6 +3076,31 @@ void PG::trim_log()
   }
 }
 
+void PG::handle_pg_trim(epoch_t epoch, int from, shard_id_t shard, eversion_t trim_to)
+{
+  if (epoch < info.history.same_interval_since) {
+    dout(10) << " got old trim to " << trim_to << ", ignoring" << dendl;
+    return;
+  }
+
+  if (is_primary()) {
+    // peer is informing us of their last_complete_ondisk
+    dout(10) << " replica osd." << from << " lcod " << trim_to << dendl;
+    peer_last_complete_ondisk[pg_shard_t(from, shard)] = trim_to;
+
+    // trim log when the pg is recovered
+    calc_min_last_complete_ondisk();
+  } else {
+    // primary is instructing us to trim
+    ObjectStore::Transaction t;
+    pg_log.trim(trim_to, info);
+    dirty_info = true;
+    write_if_dirty(t);
+    int tr = osd->store->queue_transaction(osr.get(), std::move(t), NULL);
+    assert(tr == 0);
+  }
+}
+
 void PG::add_log_entry(const pg_log_entry_t& e, bool applied)
 {
   // raise last_complete only if we were previously up to date
index f37707e3f4912c3ac89f5fb1d8e6ba676687688b..4c64a0e60010531c51c0d1c5de20c4e623a63d2b 100644 (file)
@@ -408,6 +408,8 @@ public:
   void handle_loaded(RecoveryCtx *rctx);
   void handle_query_state(Formatter *f);
 
+  void handle_pg_trim(epoch_t epoch, int from, shard_id_t shard, eversion_t trim_to);
+
   virtual void get_watchers(std::list<obj_watch_item_t> *ls) = 0;
 
   void dump_pgstate_history(Formatter *f);