]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PeeringState: fix wrong history of merge target 29835/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Thu, 22 Aug 2019 07:21:17 +0000 (15:21 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Thu, 22 Aug 2019 07:45:58 +0000 (15:45 +0800)
The merge target could be a stray pg that has never got the chance
to finish a complete peering cycle (we never purge strays before merge
is done) and hence leaving a zeroed last_epoch_started in the info.

In case the merge target incorrectly absorbs an invalid history in,
e.g., from an actual placeholder merge source pg, use

    history.epoch_created == 0

to identify if the merge target is truly a placeholder instead.

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

index 01e4e3c1ce181dee78418d21dcf30f55f268ca9c..b8d2ff4edec884961867322870269e6ccf5b0849 100644 (file)
@@ -2796,7 +2796,7 @@ void PeeringState::merge_from(
 
   // make sure we have a meaningful last_epoch_started/clean (if we were a
   // placeholder)
-  if (info.last_epoch_started == 0) {
+  if (info.history.epoch_created == 0) {
     // start with (a) source's history, since these PGs *should* have been
     // remapped in concert with each other...
     info.history = sources.begin()->second->info.history;