Bug #61744
openPGAdvanceMap::start() 'from' epoch adjustment
0%
Description
/*
* PGAdvanceMap is scheduled at pg creation and when
* broadcasting new osdmaps to pgs. We are not able to serialize
* between the two different PGAdvanceMap callers since a new pg
* will get advanced to the latest osdmap (at it's creation).
* As a result, we may need to adjust the PGAdvance operation
* 'from' epoch according to the following scenarios:
* 1) The pg is already advanced to the current osdmap.
* 2) The pg is advanced to *some* osdmap which is newer
or older than this operation 'from' epoch.
*/
Consider the following as an example:
At the pg (1.x) creation: PGAdvanceMap (id=1, from=10, to=12)
Broadcasted map to pgs: PGAdvanceMap (id=2, from=10, to=13)
Broadcasted map to pgs: PGAdvanceMap (id=3, from=14, to=15)
PGAdvanceMap(id=2) won't be scheduled on the pg (1.x) since it's still being created.
PGAdvanceMap(id=3) will be scheduled on the pg (1.x).
The pg's osdmap epoch is 12 while from is 14,
therefore we must adjust 'from' epoch to the pg's osdmap epoch.
An attempt to tolerate this issue: https://github.com/ceph/ceph/pull/51961/commits/aa35013b5421560071642c95945411ab3d35aabf
Optimally, we should be able to serialize the two PGAdvance users to have continuous epoch ranges scheduled between them, without adjusting the 'from' epoch within PGAdvance::start().
No data to display