Optimized EC pools store pgtemp with primary shards first, this was not
being taken into account by OSDMonitor::preprocess_pgtemp which meant
that the change of pgtemp from [None,2,4] to [None,4,2] for a 2+1 pool
was being rejected as a nop because the primary first encoded version
of [None,2,4] is [None,4,2].
Signed-off-by: Bill Scales <bill_scales@uk.ibm.com>
(cherry picked from commit
00aa1933d3457c377d9483072e663442a4ff8ffd)
// change?
// NOTE: we assume that this will clear pg_primary, so consider
// an existing pg_primary field to imply a change
+ std::vector<int> acting_set;
+ osdmap.pg_to_acting_osds(p->first, acting_set);
if (p->second.size() &&
(osdmap.pg_temp->count(p->first) == 0 ||
- osdmap.pg_temp->get(p->first) != p->second ||
+ acting_set != p->second ||
osdmap.primary_temp->count(p->first)))
return false;
}