From: Mingxin Liu Date: Mon, 2 Jan 2017 05:20:10 +0000 (+0800) Subject: mon: do not send duplicated osdmap msg to not sync'ed osd X-Git-Tag: v12.0.0~180^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=57274488c072ec6912b700288ce5b1ea8372d162;p=ceph.git mon: do not send duplicated osdmap msg to not sync'ed osd prior to this change: a peon may forward the pgstats to leader, and record it locally, but leader will check if osd has the latest map before process, if not, will use a route op to indicate peon to send it, then poen will delete routed op when fininaly send out which make peon cannot send pgstatack when leader has processed the pgstat update. so osd will always track it util reach a threshold block pgstats sending, at worst, reopen mon session. also, both leader and peon will send out the osdmap message to the osd. after this change: only the peon will send out the osdmap message. and the pgstatack message will be routed to the osd as expected. so the osd will not keep track of the "acked" pg stats in its queue forever before times out. Fixes: http://tracker.ceph.com/issues/18458 Signed-off-by: Mingxin Liu --- diff --git a/src/mon/PGMonitor.cc b/src/mon/PGMonitor.cc index f83a92413761..e9df086ba000 100644 --- a/src/mon/PGMonitor.cc +++ b/src/mon/PGMonitor.cc @@ -705,7 +705,8 @@ bool PGMonitor::preprocess_pg_stats(MonOpRequestRef op) // only if they've had the map for a while. if (stats->had_map_for > 30.0 && mon->osdmon()->is_readable() && - stats->epoch < mon->osdmon()->osdmap.get_epoch()) + stats->epoch < mon->osdmon()->osdmap.get_epoch() && + !session->proxy_con) mon->osdmon()->send_latest_now_nodelete(op, stats->epoch+1); // Always forward the PGStats to the leader, even if they are the same as