]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr: don't update osd stat which is already out 38354/head
authorZhi Zhang <willzzhang@tencent.com>
Wed, 29 Jul 2020 10:47:42 +0000 (18:47 +0800)
committerIgor Fedotov <ifedotov@suse.com>
Mon, 30 Nov 2020 15:07:31 +0000 (18:07 +0300)
Ceph status still reports slow requests on the OSD which is already out.
When orignal PG monitor handled PGSTATS msg, it wouldn't update osd stat
if this OSD is not in OSD map, but current MGR had no checks on that.

Fixes: https://tracker.ceph.com/issues/46440
Signed-off-by: Zhi Zhang <zhangz.david@outlook.com>
(cherry picked from commit 493ec9d3acd3f57eed3e4b96ad7c6739c2089ff1)

src/mgr/ClusterState.cc

index 8502e570e854cf18adffb0362cb10b843a396e93..48cabca179c139cf0d3fd7a293f4e9a89e75129a 100644 (file)
@@ -73,7 +73,17 @@ void ClusterState::ingest_pgstats(MPGStats *stats)
   std::lock_guard l(lock);
 
   const int from = stats->get_orig_source().num();
-  pending_inc.update_stat(from, std::move(stats->osd_stat));
+  bool is_in = with_osdmap([from](const OSDMap& osdmap) {
+    return osdmap.is_in(from);
+  });
+
+  if (is_in) {
+    pending_inc.update_stat(from, std::move(stats->osd_stat));
+  } else {
+    osd_stat_t empty_stat;
+    empty_stat.seq = stats->osd_stat.seq;
+    pending_inc.update_stat(from, std::move(empty_stat));  
+  }
 
   for (auto p : stats->pg_stat) {
     pg_t pgid = p.first;