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:
parent
c4d12bfef8
commit
ce4e554ed6
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user