From: Sage Weil Date: Thu, 12 Feb 2015 21:49:50 +0000 (-0800) Subject: mon/OSDMonitor: do not trust small values in osd epoch cache X-Git-Tag: v0.93~20^2~2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=a5759e9b97107488a8508f36adf9ca1aba3fae07;p=ceph.git mon/OSDMonitor: do not trust small values in osd epoch cache If the epoch cache says the osd has epoch 100 and the osd is asking for epoch 200+, do not send it 100+. Fixes: #10787 Backport: giant, firefly Signed-off-by: Sage Weil --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index a5c02d04858a9..c008e20680e8e 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2118,10 +2118,13 @@ void OSDMonitor::send_incremental(PaxosServiceMessage *req, epoch_t first) osd = req->get_source().num(); map::iterator p = osd_epoch.find(osd); if (p != osd_epoch.end()) { - dout(10) << " osd." << osd << " should have epoch " << p->second << dendl; - first = p->second + 1; - if (first > osdmap.get_epoch()) - return; + if (first <= p->second) { + dout(10) << __func__ << " osd." << osd << " should already have epoch " + << p->second << dendl; + first = p->second + 1; + if (first > osdmap.get_epoch()) + return; + } } }