pg_epoch_lock("OSDService::pg_epoch_lock"),
publish_lock("OSDService::publish_lock"),
pre_publish_lock("OSDService::pre_publish_lock"),
+ max_oldest_map(0),
peer_map_epoch_lock("OSDService::peer_map_epoch_lock"),
sched_scrub_lock("OSDService::sched_scrub_lock"), scrubs_pending(0),
scrubs_active(0),
OSDSuperblock& sblock)
{
MOSDMap *m = new MOSDMap(monc->get_fsid());
- m->oldest_map = sblock.oldest_map;
+ m->oldest_map = max_oldest_map;
m->newest_map = sblock.newest_map;
for (epoch_t e = to; e > since; e--) {
if (since < sblock.oldest_map) {
// just send latest full map
MOSDMap *m = new MOSDMap(monc->get_fsid());
- m->oldest_map = sblock.oldest_map;
+ m->oldest_map = max_oldest_map;
m->newest_map = sblock.newest_map;
get_map_bl(to, m->maps[to]);
send_map(m, con);
service.init();
service.publish_map(osdmap);
service.publish_superblock(superblock);
+ service.max_oldest_map = superblock.oldest_map;
osd_lock.Unlock();
logger->inc(l_osd_mape, last - first + 1);
if (first <= osdmap->get_epoch())
logger->inc(l_osd_mape_dup, osdmap->get_epoch() - first + 1);
+ if (service.max_oldest_map < m->oldest_map) {
+ service.max_oldest_map = m->oldest_map;
+ assert(service.max_oldest_map >= superblock.oldest_map);
+ }
// make sure there is something new, here, before we bother flushing the queues and such
if (last <= osdmap->get_epoch()) {