]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: move some more split machinery into PG
authorSage Weil <sage@redhat.com>
Sun, 17 Sep 2017 22:55:29 +0000 (17:55 -0500)
committerSage Weil <sage@redhat.com>
Fri, 6 Oct 2017 18:08:18 +0000 (13:08 -0500)
and move other split pieces into the public interface.

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

index 2ee9b5130b7df921869cc379b559bf34bef9738a..55d80ebab96ffd4618558c4889957bf410ef8a3d 100644 (file)
@@ -7930,8 +7930,8 @@ void OSD::split_pgs(
     parent->get_pgid().get_split_bits(pg_num)
     );
 
-  vector<object_stat_sum_t> updated_stats(childpgids.size() + 1);
-  parent->info.stats.stats.sum.split(updated_stats);
+  vector<object_stat_sum_t> updated_stats;
+  parent->start_split_stats(childpgids, &updated_stats);
 
   vector<object_stat_sum_t>::iterator stat_iter = updated_stats.begin();
   for (set<spg_t>::const_iterator i = childpgids.begin();
@@ -7960,14 +7960,12 @@ void OSD::split_pgs(
       i->pgid,
       child,
       split_bits);
-    child->info.stats.stats.sum = *stat_iter;
 
-    child->write_if_dirty(*(rctx->transaction));
+    child->finish_split_stats(*stat_iter, rctx->transaction);
     child->unlock();
   }
   assert(stat_iter != updated_stats.end());
-  parent->info.stats.stats.sum = *stat_iter;
-  parent->write_if_dirty(*(rctx->transaction));
+  parent->finish_split_stats(*stat_iter, rctx->transaction);
 }
 
 /*
index 294234d7e70801d6cdbee3564de98a18359e88b3..9aa70ee7a1c4386db7c0a023e3a737bcea62fd0a 100644 (file)
@@ -2273,6 +2273,18 @@ void PG::split_into(pg_t child_pgid, PG *child, unsigned split_bits)
   dirty_big_info = true;
 }
 
+void PG::start_split_stats(const set<spg_t>& childpgs, vector<object_stat_sum_t> *out)
+{
+  out->resize(childpgs.size() + 1);
+  info.stats.stats.sum.split(*out);
+}
+
+void PG::finish_split_stats(const object_stat_sum_t& stats, ObjectStore::Transaction *t)
+{
+  info.stats.stats.sum = stats;
+  write_if_dirty(*t);
+}
+
 void PG::add_backoff(SessionRef s, const hobject_t& begin, const hobject_t& end)
 {
   ConnectionRef con = s->con;
index bb016f95b3982baf2efdb7dc45d6024395116e06..b7bb23ccdefd80b7c2ae1c2692527797868f2538 100644 (file)
@@ -388,6 +388,16 @@ public:
 
   void rm_backoff(BackoffRef b);
 
+  void start_split_stats(const set<spg_t>& childpgs, vector<object_stat_sum_t> *v);
+  virtual void split_colls(
+    spg_t child,
+    int split_bits,
+    int seed,
+    const pg_pool_t *pool,
+    ObjectStore::Transaction *t) = 0;
+  void split_into(pg_t child_pgid, PG *child, unsigned split_bits);
+  void finish_split_stats(const object_stat_sum_t& stats, ObjectStore::Transaction *t);
+
   void scrub(epoch_t queued, ThreadPool::TPHandle &handle);
   void reg_next_scrub();
   void unreg_next_scrub();
@@ -1382,7 +1392,6 @@ protected:
   void start_recovery_op(const hobject_t& soid);
   void finish_recovery_op(const hobject_t& soid, bool dequeue=false);
 
-  void split_into(pg_t child_pgid, PG *child, unsigned split_bits);
   virtual void _split_into(pg_t child_pgid, PG *child, unsigned split_bits) = 0;
 
   friend class C_OSD_RepModify_Commit;
@@ -1603,12 +1612,6 @@ protected:
                         boost::optional<uint32_t>>> &missing_digest) { }
   virtual void _scrub_clear_state() { }
   virtual void _scrub_finish() { }
-  virtual void split_colls(
-    spg_t child,
-    int split_bits,
-    int seed,
-    const pg_pool_t *pool,
-    ObjectStore::Transaction *t) = 0;
   void clear_scrub_reserved();
   void scrub_reserve_replicas();
   void scrub_unreserve_replicas();