Skip to content

Commit 14cc06e

Browse files
authored
Merge pull request ceph#57691 from xxhdx1985126/wip-66216
crimson/osd/osd_operations/client_request_common: `PeeringState::needs_recovery()` may fail if the object is under backfill Reviewed-by: Samuel Just <[email protected]> Reviewed-by: Matan Breizman <[email protected]>
2 parents 679f382 + 5716f03 commit 14cc06e

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

src/crimson/osd/osd_operations/client_request_common.cc

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,34 @@ CommonClientRequest::do_recover_missing(
1919
const hobject_t& soid,
2020
const osd_reqid_t& reqid)
2121
{
22-
eversion_t ver;
23-
assert(pg->is_primary());
2422
logger().debug("{} reqid {} check for recovery, {}",
2523
__func__, reqid, soid);
24+
assert(pg->is_primary());
25+
eversion_t ver;
2626
auto &peering_state = pg->get_peering_state();
2727
auto &missing_loc = peering_state.get_missing_loc();
28-
bool needs_recovery = missing_loc.needs_recovery(soid, &ver);
29-
if (!pg->is_unreadable_object(soid) &&
30-
!pg->is_degraded_or_backfilling_object(soid)) {
28+
bool needs_recovery_or_backfill = false;
29+
30+
if (pg->is_unreadable_object(soid)) {
31+
logger().debug("{} reqid {}, {} is unreadable",
32+
__func__, reqid, soid);
33+
ceph_assert(missing_loc.needs_recovery(soid, &ver));
34+
needs_recovery_or_backfill = true;
35+
}
36+
37+
if (pg->is_degraded_or_backfilling_object(soid)) {
38+
logger().debug("{} reqid {}, {} is degraded or backfilling",
39+
__func__, reqid, soid);
40+
if (missing_loc.needs_recovery(soid, &ver)) {
41+
needs_recovery_or_backfill = true;
42+
}
43+
}
44+
45+
if (!needs_recovery_or_backfill) {
3146
logger().debug("{} reqid {} nothing to recover {}",
3247
__func__, reqid, soid);
3348
return seastar::now();
3449
}
35-
ceph_assert(needs_recovery);
3650

3751
logger().debug("{} reqid {} need to wait for recovery, {} version {}",
3852
__func__, reqid, soid, ver);

0 commit comments

Comments
 (0)