osd/PG: discard ops based on either new or old lfor and features

If the client has the new feature bit, use the new field; if they have the
older feature bit, use the old field.

Note that there is no change to the Objecter: last_force_op_resend is
still the "current" field that it should pay attention to.

Signed-off-by: Sage Weil <sage@redhat.com>
This commit is contained in:
Sage Weil 2017-02-01 18:37:25 -05:00
parent 0423b541b3
commit 8caa8f162e

View File

@ -5468,11 +5468,19 @@ bool PG::can_discard_op(OpRequestRef& op)
return true;
}
if (m->get_map_epoch() < pool.info.last_force_op_resend &&
m->get_connection()->has_feature(CEPH_FEATURE_OSD_POOLRESEND)) {
dout(7) << __func__ << " sent before last_force_op_resend "
<< pool.info.last_force_op_resend << ", dropping" << *m << dendl;
return true;
if (m->get_connection()->has_feature(CEPH_FEATURE_RESEND_ON_SPLIT)) {
if (m->get_map_epoch() < pool.info.get_last_force_op_resend()) {
dout(7) << __func__ << " sent before last_force_op_resend "
<< pool.info.last_force_op_resend << ", dropping" << *m << dendl;
return true;
}
} else if (m->get_connection()->has_feature(CEPH_FEATURE_OSD_POOLRESEND)) {
if (m->get_map_epoch() < pool.info.get_last_force_op_resend_preluminous()) {
dout(7) << __func__ << " sent before last_force_op_resend_preluminous "
<< pool.info.last_force_op_resend_preluminous
<< ", dropping" << *m << dendl;
return true;
}
}
return false;