From 6e9ea4fbeb3885330b277448f9e81b3dfea224c4 Mon Sep 17 00:00:00 2001 From: Tao Ning Date: Tue, 24 Sep 2019 12:45:24 +0800 Subject: [PATCH] osd/PGLog: reset log.complete_to when recover obect failed 1. Injection read fault, recover failed object is added to the missing set, log.complete_to == log.end() 2. Before the first object recovery, the new object writes, update info.last_update, because num_missing() != 0, so last_complete will not be updated 3. After the first object recovery, PeeringState::recover_got generates the error: ceph_assert(info.last_complete == info.last_update); Fixed: https://tracker.ceph.com/issues/42019 Signed-off-by: Tao Ning --- src/osd/PeeringState.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/osd/PeeringState.cc b/src/osd/PeeringState.cc index df942f3f9b4..008fa52ba98 100644 --- a/src/osd/PeeringState.cc +++ b/src/osd/PeeringState.cc @@ -3735,6 +3735,7 @@ void PeeringState::force_object_missing( peer_missing[peer].add(soid, version, eversion_t(), false); } else { pg_log.missing_add(soid, version, eversion_t()); + pg_log.reset_complete_to(&info); pg_log.set_last_requested(0); } } -- 2.39.5