From: Sage Weil Date: Sun, 17 Sep 2017 22:55:29 +0000 (-0500) Subject: osd/PG: move some more split machinery into PG X-Git-Tag: v13.0.1~634^2~27 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=81f93729ff4125edac6010135c116416d5769dc1;p=ceph.git osd/PG: move some more split machinery into PG and move other split pieces into the public interface. Signed-off-by: Sage Weil --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 2ee9b5130b7d..55d80ebab96f 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -7930,8 +7930,8 @@ void OSD::split_pgs( parent->get_pgid().get_split_bits(pg_num) ); - vector updated_stats(childpgids.size() + 1); - parent->info.stats.stats.sum.split(updated_stats); + vector updated_stats; + parent->start_split_stats(childpgids, &updated_stats); vector::iterator stat_iter = updated_stats.begin(); for (set::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); } /* diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 294234d7e708..9aa70ee7a1c4 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -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& childpgs, vector *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; diff --git a/src/osd/PG.h b/src/osd/PG.h index bb016f95b398..b7bb23ccdefd 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -388,6 +388,16 @@ public: void rm_backoff(BackoffRef b); + void start_split_stats(const set& childpgs, vector *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>> &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();