From: Tao Ning Date: Tue, 24 Sep 2019 04:45:24 +0000 (+0800) Subject: osd/PGLog: reset log.complete_to when recover obect failed X-Git-Tag: v15.1.0~1405^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F30533%2Fhead;p=ceph.git 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 --- diff --git a/src/osd/PeeringState.cc b/src/osd/PeeringState.cc index df942f3f9b4e..008fa52ba98c 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); } }