]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd/PGLog: reset log.complete_to when recover obect failed
authorTao Ning <ningtao@sangfor.com.cn>
Tue, 24 Sep 2019 04:45:24 +0000 (12:45 +0800)
committerTao Ning <ningtao@sangfor.com.cn>
Tue, 24 Sep 2019 04:45:24 +0000 (12:45 +0800)
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 <ningtao@sangfor.com.cn>
src/osd/PeeringState.cc

index df942f3f9b4ed488d4ac2e094f9db2655cfb3054..008fa52ba98c2cfd51c5009c539823d674e9bd5c 100644 (file)
@@ -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);
     }
   }