]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
osd/PeeringState: handle race condition of DeferBackfill event for Backfilling state 63572/head
authorNaveen Naidu <naveennaidu479@gmail.com>
Thu, 29 May 2025 08:58:32 +0000 (14:28 +0530)
committerNaveen Naidu <naveennaidu479@gmail.com>
Thu, 29 May 2025 12:19:59 +0000 (17:49 +0530)
commitb2bd15b4485f367c3f599a3d233d6e506b3285d1
tree8707c2f0f525bc0b442c50230b496ce0e9f0deb3
parent7c89819f00f43f41763e3b9a433ae38fbdb7f42a
osd/PeeringState: handle race condition of DeferBackfill event for Backfilling state

Currently when PG in `Backfilling` state receives a `DeferBackfill`
event, there are cases when that event could race with
`MOSDPGBackfill::OP_BACKFILL_FINISH` becasue the PG has already
finished backfilling. In such case, the following
happens:
  1. PG state set to `PG_STATE_BACKFILL_WAIT`
  2. Suspend backfilling
  3. Discard the event

Notice that we do not reschedule backfill in the above steps, this can
lead to a situation where the PG gets stuck in a `backfill_wait` state
forever. This bug got introduced due to the following commit:

`865839f`: osd/PeeringState: check racing with OP_BACKFILL_FINISH when defering
backfill
Link: https://github.com/ceph/ceph/pull/60185
This commit, fixes that by making sure that in race conditions such as
above - we only discard the event.

Fixes: https://tracker.ceph.com/issues/71010
Signed-off-by: Naveen Naidu <naveen.naidu@ibm.com>
src/osd/PeeringState.cc