1
0
mirror of https://github.com/ceph/ceph synced 2025-01-10 05:00:59 +00:00

Revert "mgr/DaemonServer: safe-to-destroy - do not consider irrelevant pgs"

This reverts commit ba8dd78236.

We use OSD device class to separate pools. Hence removing
the device class of an osd may cause mgr mistakenly approve
an invalid safe-to-destroy request, e.g., because that osd now
belongs to no pool while data migration could be still in-progress..

Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
This commit is contained in:
xie xingguo 2019-09-02 13:34:35 +08:00
parent c4d12bfef8
commit ce4e554ed6

View File

@ -1425,33 +1425,6 @@ bool DaemonServer::_handle_command(
safe_to_destroy.insert(osd);
continue; // clearly safe to destroy
}
set<int64_t> pools;
osdmap.get_pool_ids_by_osd(g_ceph_context, osd, &pools);
if (pools.empty()) {
// osd does not belong to any pools yet
safe_to_destroy.insert(osd);
continue;
}
if (osdmap.is_down(osd) && osdmap.is_out(osd)) {
// if osd is down&out and all relevant pools are active+clean,
// then should be safe to destroy
bool all_osd_pools_active_clean = true;
for (auto &ps: pg_map.pg_stat) {
auto& pg = ps.first;
auto state = ps.second.state;
if (!pools.count(pg.pool()))
continue;
if ((state & (PG_STATE_ACTIVE | PG_STATE_CLEAN)) !=
(PG_STATE_ACTIVE | PG_STATE_CLEAN)) {
all_osd_pools_active_clean = false;
break;
}
}
if (all_osd_pools_active_clean) {
safe_to_destroy.insert(osd);
continue;
}
}
auto q = pg_map.num_pg_by_osd.find(osd);
if (q != pg_map.num_pg_by_osd.end()) {
if (q->second.acting > 0 || q->second.up_not_acting > 0) {