]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commit
osd/PeeringState: separate history's pruub from pg's
authorSage Weil <sage@newdream.net>
Thu, 18 Nov 2021 20:46:06 +0000 (15:46 -0500)
committerSage Weil <sage@newdream.net>
Mon, 22 Nov 2021 15:25:24 +0000 (10:25 -0500)
commit96d6bf22a5dbf14da1de0ee6128585b9dd9d60d8
tree3bac67b6284889bd6a2b335d44d30b5b951cee07
parent1d1cd65cb94233a9fe269d960129e9df901af334
osd/PeeringState: separate history's pruub from pg's

(pruub = prior_readable_until_ub [upper bound])

During peering, a primary may conclude that it does not need to wait for
the prior interval(s)' read lease because it will query all such osds.
However, it is dangerous to reflect that local inference about future
peering effects in the info.history, which is freely shared with other
OSDs.  For example, if the primary cleared the history pruub, shared it,
and then failed, the next primary may conclude that it does not need to
wait for the lease to expire.

Instead, track the pruub in the conventional way.  Only at the end of
peering do we clear it (if there are no prior_interval_down_osds) before
ending our final activate infos out, when we have already talked to the
peer osds and they know the prior interval has finished.

Fixes: https://tracker.ceph.com/issues/53326
Signed-off-by: Sage Weil <sage@newdream.net>
src/osd/PeeringState.cc
src/osd/PeeringState.h