unsigned usable = 1;
// select replicas that have log contiguity with primary.
- // prefer up, then acting, then any peer_info osds
+ // prefer up, then acting, then any peer_info osds
+ eversion_t oldest_auth_log_entry =
+ std::min(primary->second.log_tail, auth_log_shard->second.log_tail);
for (vector<int>::const_iterator i = up.begin();
i != up.end();
++i) {
continue;
const pg_info_t &cur_info = all_info.find(up_cand)->second;
if (cur_info.is_incomplete() ||
- cur_info.last_update < MIN(
- primary->second.log_tail,
- auth_log_shard->second.log_tail)) {
+ cur_info.last_update < oldest_auth_log_entry) {
/* We include auth_log_shard->second.log_tail because in GetLog,
* we will request logs back to the min last_update over our
* acting_backfill set, which will result in our log being extended
// skip up osds we already considered above
if (acting_cand == primary->first)
continue;
- vector<int>::const_iterator up_it = find(up.begin(), up.end(), acting_cand.osd);
+ vector<int>::const_iterator up_it = find(up.begin(), up.end(), *i);
if (up_it != up.end())
continue;
const pg_info_t &cur_info = all_info.find(acting_cand)->second;
if (cur_info.is_incomplete() ||
- cur_info.last_update < primary->second.log_tail) {
+ cur_info.last_update < oldest_auth_log_entry) {
ss << " shard " << acting_cand << " (acting) REJECTED "
<< cur_info << std::endl;
} else {
continue;
if (i->second.is_incomplete() ||
- i->second.last_update < primary->second.log_tail) {
+ i->second.last_update < oldest_auth_log_entry) {
ss << " shard " << i->first << " (stray) REJECTED "
<< i->second << std::endl;
} else {