]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PeeringState: do not trim pg log past last_update_ondisk
authorxie xingguo <xie.xingguo@zte.com.cn>
Thu, 12 Mar 2020 10:01:45 +0000 (18:01 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Thu, 12 Mar 2020 11:26:40 +0000 (19:26 +0800)
Trimming past last_update_ondisk would be really bad, e.g.,
a new interval change would cancel&redo a previous op, and if
we trim past last_update_ondisk, there could be potential
object inconsistencies as log merging won't necessarily be able
to find all divergent entries later (we lost track of the unfinished
op that should really be reverted).

Fixes: https://tracker.ceph.com/issues/44532
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/osd/PeeringState.cc

index 685334cc09abef2ab8ec53d68676b4fbdba81e4a..976a3de25234855873b9b74a61b7dab0de6e0712 100644 (file)
@@ -4094,9 +4094,10 @@ void PeeringState::calc_trim_to_aggressive()
   size_t target = pl->get_target_pg_log_entries();
 
   // limit pg log trimming up to the can_rollback_to value
-  eversion_t limit = std::min(
+  eversion_t limit = std::min({
     pg_log.get_head(),
-    pg_log.get_can_rollback_to());
+    pg_log.get_can_rollback_to(),
+    last_update_ondisk});
   psdout(10) << __func__ << " limit = " << limit << dendl;
 
   if (limit != eversion_t() &&