diff --git a/src/crimson/osd/osd_operations/client_request.cc b/src/crimson/osd/osd_operations/client_request.cc index a6e6d1e682a..a51cc7256d6 100644 --- a/src/crimson/osd/osd_operations/client_request.cc +++ b/src/crimson/osd/osd_operations/client_request.cc @@ -69,9 +69,7 @@ seastar::future<> ClientRequest::start() return with_blocking_future(osd.wait_for_pg(m->get_spg())); }).then([this, opref](Ref pgref) { PG &pg = *pgref; - if (__builtin_expect(m->get_map_epoch() - < pg.get_info().history.same_primary_since, - false)) { + if (pg.can_discard_op(*m)) { return osd.send_incremental_map(conn.get(), m->get_map_epoch()); } return with_blocking_future( diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index ca99a4b9996..3abe129c2fe 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -993,4 +993,9 @@ void PG::on_change(ceph::os::Transaction &t) { backend->on_actingset_changed({ is_primary() }); } +bool PG::can_discard_op(const MOSDOp& m) const { + return __builtin_expect(m.get_map_epoch() + < peering_state.get_info().history.same_primary_since, false); +} + } diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index 7bfc477b0a2..7cdd054c33a 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -672,6 +672,7 @@ private: template bool can_discard_replica_op(const MsgType& m) const; + bool can_discard_op(const MOSDOp& m) const; bool is_missing_object(const hobject_t& soid) const { return peering_state.get_pg_log().get_missing().get_items().count(soid); }