]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/OSDMap: ignore xinfo if features == 0
authorSage Weil <sage@redhat.com>
Tue, 19 Sep 2017 22:25:56 +0000 (18:25 -0400)
committerBrad Hubbard <bhubbard@redhat.com>
Wed, 20 Sep 2017 03:11:10 +0000 (13:11 +1000)
Some old bug (e.g., http://tracker.ceph.com/issues/20751) could
result in an UP+EXISTS osd having features==0.  If that happens,
we shouldn't crash the mon, which (reasonably) does

   if (osdmap.get_epoch()) {
     if (osdmap.get_num_up_osds() > 0) {
       assert(osdmap.get_up_osd_features() & CEPH_FEATURE_MON_STATEFUL_SUB);
       check_subs();
     }
   }

Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSDMap.cc

index 7986b35e130acc20fa3df8190cc7ab084bec7964..e20bd469f19c7d1f7278d4eef6868982932b2094 100644 (file)
@@ -1414,6 +1414,8 @@ void OSDMap::_calc_up_osd_features()
     if (!is_up(osd))
       continue;
     const osd_xinfo_t &xi = get_xinfo(osd);
+    if (xi.features == 0)
+      continue;  // bogus xinfo, maybe #20751 or similar, skipping
     if (first) {
       cached_up_osd_features = xi.features;
       first = false;