You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
crimson/osd: cancel ongoing pglog-based recoveries on recovery defering
Previously, we rely on checking `PG::is_recovery()` in
`PGRecevery::start_recovery_ops()` to determine whether it's still valid
to proceed the recovery. This turns out to be inefficient, for example:
1. PG `P` is under recovery, and `PGRecovery::start_recovery_ops()` is
called;
2. PG `P`'s recovery is deferred, and `PGRecovery::start_recovery_ops()`
is blocked on waiting for external replies;
3. Before the arrivals of external replies, PG `P` resumes recovery and
a new round of `PGRecovery::start_recovery_ops()` starts;
4. The external replies arrives and the old
`PGRecovery::start_recovery_ops()` continues as `PG:is_recovering()`
returns true.
In the above case, we get two duplicated recovery ops, which is
incorrect.
Fixes: https://tracker.ceph.com/issues/67380
Signed-off-by: Xuehan Xu <[email protected]>
0 commit comments