The classical OSD does:
```
bool old_peering_evt(PGPeeringEventRef evt) {
return old_peering_msg(evt->get_epoch_sent(), evt->get_epoch_requested());
}
```
```
bool PG::old_peering_msg(epoch_t reply_epoch, epoch_t query_epoch)
{
if (auto last_reset = get_last_peering_reset();
last_reset > reply_epoch || last_reset > query_epoch) {
dout(10) << "old_peering_msg reply_epoch " << reply_epoch << " query_epoch "
<< query_epoch << " last_peering_reset " << last_reset << dendl;
return true;
}
return false;
}
```
See also: https://gist.github.com/rzarzynski/
e60750c279ae9d234728b0b199562c40#gistcomment-
3808289.
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
void PG::do_peering_event(
PGPeeringEvent& evt, PeeringCtx &rctx)
{
- if (peering_state.pg_has_reset_since(evt.get_epoch_requested())) {
+ if (peering_state.pg_has_reset_since(evt.get_epoch_requested()) ||
+ peering_state.pg_has_reset_since(evt.get_epoch_sent())) {
logger().debug("{} ignoring {} -- pg has reset", __func__, evt.get_desc());
} else {
logger().debug("{} handling {} for pg: {}", __func__, evt.get_desc(), pgid);