]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commit
mon/OSDMonitor: check creating_pgs.last_scan_epoch instead when sending creates
authorKefu Chai <kchai@redhat.com>
Fri, 25 Aug 2017 06:13:14 +0000 (14:13 +0800)
committerKefu Chai <kchai@redhat.com>
Fri, 25 Aug 2017 06:34:35 +0000 (14:34 +0800)
commit953a8caaa5fcf26d86805d1957b01b78c76f567e
treed60dc1317b810c56a06162d442dac2f1360e39a3
parent1f8cfd6dc589b1d206f401c4956dd945778513f9
mon/OSDMonitor: check creating_pgs.last_scan_epoch instead when sending creates

we cannot be sure that the creating_pgs_by_osd_epoch is in sync with
creating_pgs.pgs even if mapping.get_epoch() is less or equal to
creating_pgs_epoch. because, 1) the access to mapping.epoch is not
protected by lock, 2) even worse, the mapping might be not finished yet
when we are trying to send pg-creates to subscribers.

so instead of comparing creating_pgs_epoch with mapping's epoch, we
should compare it with creating_pgs.last_scan_epoch. the former is
updated once the creating_pgs_by_osd_epoch is updated with the latest
mapping's epoch and creating_pgs.pgs; the latter is updated with current
osdmap's epoch when creating_pgs is being updated with the inc osd map.
if we are using a creating_pgs_epoch in sync, creating_pgs_epoch should
be creating_pgs.last_scan_epoch + 1.

Fixes: http://tracker.ceph.com/issues/20785
Signed-off-by: Kefu Chai <kchai@redhat.com>
src/mon/OSDMonitor.cc