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();
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);
}
/*
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;
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();
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;
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();