|
|
|
@ -194,6 +194,24 @@ void osd_t::start_pg_peering(pg_t & pg) |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (pg.pg_cursize < pg.pg_minsize) |
|
|
|
|
{ |
|
|
|
|
pg.state = PG_INCOMPLETE; |
|
|
|
|
report_pg_state(pg); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
std::set<osd_num_t> cur_peers; |
|
|
|
|
for (auto pg_osd: pg.all_peers) |
|
|
|
|
{ |
|
|
|
|
if (pg_osd == this->osd_num || msgr.osd_peer_fds.find(pg_osd) != msgr.osd_peer_fds.end()) |
|
|
|
|
{ |
|
|
|
|
cur_peers.insert(pg_osd); |
|
|
|
|
} |
|
|
|
|
else if (msgr.wanted_peers.find(pg_osd) == msgr.wanted_peers.end()) |
|
|
|
|
{ |
|
|
|
|
msgr.connect_peer(pg_osd, st_cli.peer_states[pg_osd]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (pg.target_history.size()) |
|
|
|
|
{ |
|
|
|
|
// Refuse to start PG if no peers are available from any of the historical OSD sets
|
|
|
|
@ -222,24 +240,6 @@ void osd_t::start_pg_peering(pg_t & pg) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (pg.pg_cursize < pg.pg_minsize) |
|
|
|
|
{ |
|
|
|
|
pg.state = PG_INCOMPLETE; |
|
|
|
|
report_pg_state(pg); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
std::set<osd_num_t> cur_peers; |
|
|
|
|
for (auto pg_osd: pg.all_peers) |
|
|
|
|
{ |
|
|
|
|
if (pg_osd == this->osd_num || msgr.osd_peer_fds.find(pg_osd) != msgr.osd_peer_fds.end()) |
|
|
|
|
{ |
|
|
|
|
cur_peers.insert(pg_osd); |
|
|
|
|
} |
|
|
|
|
else if (msgr.wanted_peers.find(pg_osd) == msgr.wanted_peers.end()) |
|
|
|
|
{ |
|
|
|
|
msgr.connect_peer(pg_osd, st_cli.peer_states[pg_osd]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
pg.cur_peers.insert(pg.cur_peers.begin(), cur_peers.begin(), cur_peers.end()); |
|
|
|
|
if (pg.peering_state) |
|
|
|
|
{ |
|
|
|
|