Merge pull request #8247 from liewegas/wip-split-creates

mon: do not send useless pg_create messages for split pgs

Reviewed-by: Kefu Chai <kchai@redhat.com>
This commit is contained in:
Sage Weil 2016-03-26 16:12:29 -04:00
commit fca1c707d0
2 changed files with 8 additions and 5 deletions

View File

@ -468,7 +468,8 @@ void PGMap::stat_pg_add(const pg_t &pgid, const pg_stat_t &s,
num_pg++;
num_pg_by_state[s.state]++;
if (s.state & PG_STATE_CREATING) {
if ((s.state & PG_STATE_CREATING) &&
s.parent_split_bits == 0) {
creating_pgs.insert(pgid);
if (s.acting_primary >= 0) {
creating_pgs_by_osd_epoch[s.acting_primary][s.mapping_epoch].insert(pgid);
@ -505,7 +506,8 @@ void PGMap::stat_pg_sub(const pg_t &pgid, const pg_stat_t &s,
if (end == 0)
num_pg_by_state.erase(s.state);
if (s.state & PG_STATE_CREATING) {
if ((s.state & PG_STATE_CREATING) &&
s.parent_split_bits == 0) {
creating_pgs.erase(pgid);
if (s.acting_primary >= 0) {
map<epoch_t,set<pg_t> >& r = creating_pgs_by_osd_epoch[s.acting_primary];

View File

@ -1252,11 +1252,12 @@ epoch_t PGMonitor::send_pg_creates(int osd, Connection *con, epoch_t next)
<< dendl;
last = q->first;
for (set<pg_t>::iterator r = q->second.begin(); r != q->second.end(); ++r) {
pg_stat_t &st = pg_map.pg_stat[*r];
if (!m)
m = new MOSDPGCreate(pg_map.last_osdmap_epoch);
m->mkpg[*r] = pg_create_t(pg_map.pg_stat[*r].created,
pg_map.pg_stat[*r].parent,
pg_map.pg_stat[*r].parent_split_bits);
m->mkpg[*r] = pg_create_t(st.created,
st.parent,
st.parent_split_bits);
// Need the create time from the monitor using its clock to set
// last_scrub_stamp upon pg creation.
m->ctimes[*r] = pg_map.pg_stat[*r].last_scrub_stamp;