Skip to content

Commit 1367490

Browse files
committed
crimson/osd/replicated_recovery_backend: handle_pull_response() - recalc_subsets()
Signed-off-by: Matan Breizman <[email protected]>
1 parent 0cbe982 commit 1367490

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

src/crimson/osd/replicated_recovery_backend.cc

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -799,11 +799,23 @@ ReplicatedRecoveryBackend::_handle_pull_response(
799799
if (pull_info.recovery_progress.first) {
800800
prepare_waiter = pg.obc_loader.with_obc<RWState::RWNONE>(
801801
pull_info.recovery_info.soid,
802-
[&pull_info, &recovery_waiter, &push_op](auto, auto obc) {
802+
[this, &pull_info, &recovery_waiter, &push_op](auto, auto obc) {
803803
pull_info.obc = obc;
804804
recovery_waiter.obc = obc;
805-
obc->obs.oi.decode_no_oid(push_op.attrset.at(OI_ATTR), push_op.soid);
805+
obc->obs.oi.decode_no_oid(push_op.attrset.at(OI_ATTR),
806+
push_op.soid);
807+
if (push_op.attrset.contains(SS_ATTR)) {
808+
bufferlist ssbl = push_op.attrset.at(SS_ATTR);
809+
SnapSet ss(ssbl);
810+
assert(!pull_info.obc->ssc->exists ||
811+
ss.seq == pull_info.obc->ssc->snapset.seq);
812+
}
806813
pull_info.recovery_info.oi = obc->obs.oi;
814+
if (pull_info.recovery_info.soid.snap &&
815+
pull_info.recovery_info.soid.snap < CEPH_NOSNAP) {
816+
recalc_subsets(pull_info.recovery_info,
817+
pull_info.obc->ssc);
818+
}
807819
return crimson::osd::PG::load_obc_ertr::now();
808820
}).handle_error_interruptible(crimson::ct_error::assert_all{});
809821
};
@@ -857,6 +869,17 @@ ReplicatedRecoveryBackend::_handle_pull_response(
857869
});
858870
}
859871

872+
void ReplicatedRecoveryBackend::recalc_subsets(
873+
ObjectRecoveryInfo& recovery_info,
874+
crimson::osd::SnapSetContextRef ssc)
875+
{
876+
assert(ssc);
877+
auto subsets = crimson::osd::calc_clone_subsets(
878+
ssc->snapset, recovery_info.soid, pg.get_local_missing(),
879+
pg.get_info().last_backfill);
880+
crimson::osd::set_subsets(subsets, recovery_info);
881+
}
882+
860883
RecoveryBackend::interruptible_future<>
861884
ReplicatedRecoveryBackend::handle_pull_response(
862885
Ref<MOSDPGPush> m)

src/crimson/osd/replicated_recovery_backend.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ class ReplicatedRecoveryBackend : public RecoveryBackend {
8282
PushOp& push_op,
8383
PullOp* response,
8484
ceph::os::Transaction* t);
85+
void recalc_subsets(
86+
ObjectRecoveryInfo& recovery_info,
87+
crimson::osd::SnapSetContextRef ssc);
8588
std::pair<interval_set<uint64_t>, ceph::bufferlist> trim_pushed_data(
8689
const interval_set<uint64_t> &copy_subset,
8790
const interval_set<uint64_t> &intervals_received,

0 commit comments

Comments
 (0)