If we get a pg create and have to generate the pg_history_t fields,
populate the last_epoch_split field too. This is needed discard ops sent
from before the last split. Specifically, PG::can_discard_op() looks at
it when the client has the RESEND_ON_SPLIT feature bit. If we don't
discard, we may run afoul of assertions later (e.g., that the object
belongs to the PG at all) or potentially process an op out of order.
Fixes: http://tracker.ceph.com/issues/20754
Signed-off-by: Sage Weil <sage@redhat.com>
if (acting_primary != new_acting_primary) {
h->same_primary_since = e;
}
+ if (pgid.pgid.is_split(lastmap->get_pg_num(pgid.pgid.pool()),
+ osdmap->get_pg_num(pgid.pgid.pool()),
+ nullptr)) {
+ h->last_epoch_split = e;
+ }
lastmap = osdmap;
}
dout(20) << __func__ << " " << debug.str() << dendl;