From 81f93729ff4125edac6010135c116416d5769dc1 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sun, 17 Sep 2017 17:55:29 -0500 Subject: [PATCH] osd/PG: move some more split machinery into PG and move other split pieces into the public interface. Signed-off-by: Sage Weil --- src/osd/OSD.cc | 10 ++++------ src/osd/PG.cc | 12 ++++++++++++ src/osd/PG.h | 17 ++++++++++------- 3 files changed, 26 insertions(+), 13 deletions(-) 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(); -- 2.47.3