]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: do not send duplicated osdmap msg to not sync'ed osd 13046/head
authorMingxin Liu <mingxin@xsky.com>
Mon, 2 Jan 2017 05:20:10 +0000 (13:20 +0800)
committerNathan Cutler <ncutler@suse.com>
Sat, 21 Jan 2017 21:42:28 +0000 (22:42 +0100)
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 <mingxin@xsky.com>
(cherry picked from commit 57274488c072ec6912b700288ce5b1ea8372d162)

src/mon/PGMonitor.cc

index 0941f40b2d0965a08cf1ed7085e76f6be048ede8..32a6708934f6ee723f7d210256fb786b28b25e8e 100644 (file)
@@ -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