The reason why __get_pg_pool_size(pg)__ or __get_pg_pool_crush_rule(pg)__ fails is
that the pg does not exist anymore. So it generally makes sense to check __pg_exists(pg)__
before moving further.
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
(cherry picked from commit
79ef3bea7550559b7ea4e2b68dc407c7eb25defa)
Conflicts:
- *nextmap* has been renamed to *tmpmap*
to_check.insert(p.first);
}
for (auto& pg : to_check) {
- auto crush_rule = tmpmap.get_pg_pool_crush_rule(pg);
- if (crush_rule < 0) {
- lderr(cct) << __func__ << " unable to load crush-rule of pg "
- << pg << dendl;
+ if (!tmpmap.pg_exists(pg)) {
+ ldout(cct, 0) << __func__ << " pg " << pg << " is gone" << dendl;
+ to_cancel.insert(pg);
continue;
}
+ auto crush_rule = tmpmap.get_pg_pool_crush_rule(pg);
map<int, float> weight_map;
auto it = rule_weight_map.find(crush_rule);
if (it == rule_weight_map.end()) {