Skip to content

Commit 259f695

Browse files
authored
Merge pull request ceph#56916 from Matan-B/wip-matanb-crimson-recovery-misc
crimson/osd/replicated_backend: misc fixes Reviewed-by: Samuel Just <[email protected]>
2 parents 0db3313 + aad993f commit 259f695

File tree

6 files changed

+32
-16
lines changed

6 files changed

+32
-16
lines changed

src/crimson/osd/osd_operations/client_request.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,8 @@ ClientRequest::process_op(
251251
co_await ihref.enter_stage<interruptor>(
252252
client_pp(*pg).recover_missing, *this
253253
);
254-
co_await recover_missings(pg, m->get_hobj(), snaps_need_to_recover());
254+
co_await recover_missings(pg, m->get_hobj(),
255+
snaps_need_to_recover(), m->get_reqid());
255256

256257
DEBUGDPP("{}.{}: checking already_complete",
257258
*pg, *this, this_instance_id);

src/crimson/osd/osd_operations/client_request_common.cc

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ InterruptibleOperation::template interruptible_future<>
1919
CommonClientRequest::recover_missings(
2020
Ref<PG> &pg,
2121
const hobject_t& soid,
22-
std::set<snapid_t> &&snaps)
22+
std::set<snapid_t> &&snaps,
23+
const osd_reqid_t& reqid)
2324
{
2425
LOG_PREFIX(CommonClientRequest::recover_missings);
2526
if (!pg->is_primary()) {
@@ -28,17 +29,17 @@ CommonClientRequest::recover_missings(
2829
return seastar::now();
2930
}
3031
return do_recover_missing(
31-
pg, soid.get_head()
32-
).then_interruptible([snaps=std::move(snaps), pg, soid]() mutable {
32+
pg, soid.get_head(), reqid
33+
).then_interruptible([snaps=std::move(snaps), pg, soid, reqid]() mutable {
3334
return pg->obc_loader.with_obc<RWState::RWREAD>(
3435
soid.get_head(),
35-
[snaps=std::move(snaps), pg, soid](auto head, auto) mutable {
36+
[snaps=std::move(snaps), pg, soid, reqid](auto head, auto) mutable {
3637
return seastar::do_with(
3738
std::move(snaps),
38-
[pg, soid, head](auto &snaps) mutable {
39+
[pg, soid, head, reqid](auto &snaps) mutable {
3940
return InterruptibleOperation::interruptor::do_for_each(
4041
snaps,
41-
[pg, soid, head](auto &snap) mutable ->
42+
[pg, soid, head, reqid](auto &snap) mutable ->
4243
InterruptibleOperation::template interruptible_future<> {
4344
auto coid = head->obs.oi.soid;
4445
coid.snap = snap;
@@ -50,7 +51,7 @@ CommonClientRequest::recover_missings(
5051
* we skip the oid as there is no corresponding clone to recover.
5152
* See https://tracker.ceph.com/issues/63821 */
5253
if (oid) {
53-
return do_recover_missing(pg, *oid);
54+
return do_recover_missing(pg, *oid, reqid);
5455
} else {
5556
return seastar::now();
5657
}
@@ -64,19 +65,29 @@ CommonClientRequest::recover_missings(
6465

6566
typename InterruptibleOperation::template interruptible_future<>
6667
CommonClientRequest::do_recover_missing(
67-
Ref<PG>& pg, const hobject_t& soid)
68+
Ref<PG>& pg,
69+
const hobject_t& soid,
70+
const osd_reqid_t& reqid)
6871
{
6972
eversion_t ver;
7073
assert(pg->is_primary());
71-
logger().debug("{} check for recovery, {}", __func__, soid);
74+
logger().debug("{} reqid {} check for recovery, {}",
75+
__func__, reqid, soid);
7276
if (!pg->is_unreadable_object(soid, &ver) &&
7377
!pg->is_degraded_or_backfilling_object(soid)) {
78+
logger().debug("{} reqid {} nothing to recover {}",
79+
__func__, reqid, soid);
7480
return seastar::now();
7581
}
76-
logger().debug("{} need to wait for recovery, {}", __func__, soid);
82+
logger().debug("{} reqid {} need to wait for recovery, {} version {}",
83+
__func__, reqid, soid, ver);
7784
if (pg->get_recovery_backend()->is_recovering(soid)) {
85+
logger().debug("{} reqid {} object {} version {}, already recovering",
86+
__func__, reqid, soid, ver);
7887
return pg->get_recovery_backend()->get_recovering(soid).wait_for_recovered();
7988
} else {
89+
logger().debug("{} reqid {} object {} version {}, starting recovery",
90+
__func__, reqid, soid, ver);
8091
auto [op, fut] =
8192
pg->get_shard_services().start_operation<UrgentRecovery>(
8293
soid, ver, pg, pg->get_shard_services(), pg->get_osdmap_epoch());

src/crimson/osd/osd_operations/client_request_common.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,14 @@ struct CommonClientRequest {
1515
recover_missings(
1616
Ref<PG> &pg,
1717
const hobject_t& soid,
18-
std::set<snapid_t> &&snaps);
18+
std::set<snapid_t> &&snaps,
19+
const osd_reqid_t& reqid);
1920

2021
static InterruptibleOperation::template interruptible_future<>
21-
do_recover_missing(Ref<PG>& pg, const hobject_t& soid);
22+
do_recover_missing(
23+
Ref<PG>& pg,
24+
const hobject_t& soid,
25+
const osd_reqid_t& reqid);
2226

2327
static bool should_abort_request(
2428
const crimson::Operation& op, std::exception_ptr eptr);

src/crimson/osd/osd_operations/internal_client_request.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ seastar::future<> InternalClientRequest::start()
6969
return enter_stage<interruptor>(
7070
client_pp().recover_missing);
7171
}).then_interruptible([this] {
72-
return do_recover_missing(pg, get_target_oid());
72+
return do_recover_missing(pg, get_target_oid(), osd_reqid_t());
7373
}).then_interruptible([this] {
7474
return enter_stage<interruptor>(
7575
client_pp().get_obc);

src/crimson/osd/replicated_backend.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ ReplicatedBackend::_submit_transaction(std::set<pg_shard_t>&& pg_shards,
4444
std::vector<pg_log_entry_t>&& log_entries)
4545
{
4646
LOG_PREFIX(ReplicatedBackend::_submit_transaction);
47-
DEBUGDPP("object {}, {}", dpp, hoid);
47+
DEBUGDPP("object {}", dpp, hoid);
4848

4949
const ceph_tid_t tid = shard_services.get_tid();
5050
auto pending_txn =

src/crimson/osd/replicated_recovery_backend.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ ReplicatedRecoveryBackend::prep_push(
401401
push_info.recovery_info.ss = push_info_ss;
402402
push_info.recovery_info.soid = soid;
403403
push_info.recovery_info.oi = obc->obs.oi;
404-
push_info.recovery_info.version = obc->obs.oi.version;
404+
push_info.recovery_info.version = need;
405405
push_info.recovery_info.object_exist =
406406
missing_iter->second.clean_regions.object_is_exist();
407407
push_info.recovery_progress.omap_complete =

0 commit comments

Comments
 (0)