From: xie xingguo Date: Mon, 2 Sep 2019 05:34:35 +0000 (+0800) Subject: Revert "mgr/DaemonServer: safe-to-destroy - do not consider irrelevant pgs" X-Git-Tag: v15.1.0~504^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F32203%2Fhead;p=ceph.git Revert "mgr/DaemonServer: safe-to-destroy - do not consider irrelevant pgs" This reverts commit ba8dd78236eec2c70b9bdc335d847c5762d4b6d4. 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 --- diff --git a/src/mgr/DaemonServer.cc b/src/mgr/DaemonServer.cc index 2fd572ed6a5..8af4a1a76b6 100644 --- a/src/mgr/DaemonServer.cc +++ b/src/mgr/DaemonServer.cc @@ -1425,33 +1425,6 @@ bool DaemonServer::_handle_command( safe_to_destroy.insert(osd); continue; // clearly safe to destroy } - set 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) {