From: Sage Weil Date: Wed, 5 Oct 2011 18:13:13 +0000 (-0700) Subject: osd: fix map epoch check in handle_osd_map X-Git-Tag: v0.37~76 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e4a69004b16726dec9c60800aef4aac859b1b142;p=ceph.git osd: fix map epoch check in handle_osd_map Signed-off-by: Sage Weil --- diff --git a/src/messages/MOSDMap.h b/src/messages/MOSDMap.h index 74977812c8fd..fa3bd9a4cdbf 100644 --- a/src/messages/MOSDMap.h +++ b/src/messages/MOSDMap.h @@ -108,7 +108,10 @@ public: const char *get_type_name() { return "omap"; } void print(ostream& out) { - out << "osd_map(" << get_first() << "," << get_last() << ")"; + out << "osd_map(" << get_first() << ".." << get_last(); + if (oldest_map || newest_map) + out << " src has " << oldest_map << ".." << newest_map; + out << ")"; } }; diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 8ad00c862da8..064b5741d7c6 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -3018,7 +3018,10 @@ void OSD::handle_osd_map(MOSDMap *m) epoch_t first = m->get_first(); epoch_t last = m->get_last(); - dout(3) << "handle_osd_map epochs [" << first << "," << last << "], i have " << osdmap->get_epoch() << dendl; + dout(3) << "handle_osd_map epochs [" << first << "," << last << "], i have " + << osdmap->get_epoch() + << ", src has [" << m->oldest_map << "," << m->newest_map << "]" + << dendl; if (logger) { logger->inc(l_osd_map); @@ -3039,7 +3042,8 @@ void OSD::handle_osd_map(MOSDMap *m) if (first > osdmap->get_epoch() + 1) { dout(10) << "handle_osd_map message skips epochs " << osdmap->get_epoch() + 1 << ".." << (first-1) << dendl; - if (m->oldest_map && m->oldest_map <= osdmap->get_epoch()) { + if ((m->oldest_map < first && osdmap->get_epoch() == 0) || + m->oldest_map <= osdmap->get_epoch()) { monc->sub_want("osdmap", osdmap->get_epoch()+1, CEPH_SUBSCRIBE_ONETIME); monc->renew_subs(); m->put();