oldmap->pg_to_acting_osds(pgid.pgid, acting);
dout(20) << " " << pgid << " in epoch " << e << " was " << acting << dendl;
int up = 0;
+ int actual_osds = 0;
for (unsigned i=0; i<acting.size(); i++) {
- if (osdmap->is_up(acting[i])) {
- if (acting[i] != whoami) {
- pset.insert(
- pg_shard_t(
- acting[i],
- osdmap->pg_is_ec(pgid.pgid) ? i : ghobject_t::NO_SHARD));
+ if (acting[i] != CRUSH_ITEM_NONE) {
+ if (osdmap->is_up(acting[i])) {
+ if (acting[i] != whoami) {
+ pset.insert(
+ pg_shard_t(
+ acting[i],
+ osdmap->pg_is_ec(pgid.pgid) ? shard_id_t(i) : ghobject_t::NO_SHARD));
+ }
+ up++;
}
- up++;
+ actual_osds++;
}
}
- if (!up && !acting.empty()) {
+ if (!up && actual_osds) {
// sucky. add down osds, even tho we can't reach them right now.
for (unsigned i=0; i<acting.size(); i++) {
- if (acting[i] != whoami) {
+ if (acting[i] != whoami && acting[i] != CRUSH_ITEM_NONE) {
pset.insert(
pg_shard_t(
acting[i],