]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: consider epoch_sent when ignoring old peering event. 42314/head
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 13 Jul 2021 16:26:20 +0000 (16:26 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 13 Jul 2021 16:30:15 +0000 (16:30 +0000)
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>
src/crimson/osd/pg.cc

index afc9ae1d841a51ba9e7fab39dd5ca772de66a3d0..6a1f101d9bdff310d6b793d82abd9db1e32f7937 100644 (file)
@@ -463,7 +463,8 @@ seastar::future<> PG::read_state(crimson::os::FuturizedStore* store)
 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);