]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/OSDMap: Add health warning if 'require-osd-release' != current release
authorSridhar Seshasayee <sseshasa@redhat.com>
Mon, 22 Nov 2021 15:16:02 +0000 (20:46 +0530)
committerSridhar Seshasayee <sseshasa@redhat.com>
Fri, 3 Dec 2021 09:56:02 +0000 (15:26 +0530)
After all OSDs are upgraded to a new release, generate a health warning if
the 'require-osd-release' flag doesn't match the the new release version.
This will result in the cluster showing a warning in the health state until
the flag is set properly.

Fixes: https://tracker.ceph.com/issues/51984
Signed-off-by: Sridhar Seshasayee <sseshasa@redhat.com>
src/osd/OSDMap.cc
src/osd/OSDMap.h

index f0096d32bee545f02bf327ba9a808130886ca17e..1168b6dc35600c208111189bad7dd10c5f2aa70c 100644 (file)
@@ -5993,7 +5993,13 @@ void OSDMap::check_health(CephContext *cct,
   }
 
   // OSD_UPGRADE_FINISHED
-  // none of these (yet) since we don't run until luminous upgrade is done.
+  if (auto require_release = pending_require_osd_release()) {
+    ostringstream ss;
+    ss << "all OSDs are running " << *require_release << " or later but"
+       << " require_osd_release < " << *require_release;
+    auto& d = checks->add("OSD_UPGRADE_FINISHED", HEALTH_WARN, ss.str(), 0);
+    d.detail.push_back(ss.str());
+  }
 
   // POOL_NEARFULL/BACKFILLFULL/FULL
   {
@@ -6226,3 +6232,25 @@ unsigned OSDMap::get_device_class_flags(int id) const
     flags = it->second;
   return flags;
 }
+
+std::optional<std::string> OSDMap::pending_require_osd_release() const
+{
+  if (HAVE_FEATURE(get_up_osd_features(), SERVER_QUINCY) &&
+      require_osd_release < ceph_release_t::quincy) {
+    return "quincy";
+  }
+  if (HAVE_FEATURE(get_up_osd_features(), SERVER_PACIFIC) &&
+      require_osd_release < ceph_release_t::pacific) {
+    return "pacific";
+  }
+  if (HAVE_FEATURE(get_up_osd_features(), SERVER_OCTOPUS) &&
+      require_osd_release < ceph_release_t::octopus) {
+    return "octopus";
+  }
+  if (HAVE_FEATURE(get_up_osd_features(), SERVER_NAUTILUS) &&
+      require_osd_release < ceph_release_t::nautilus) {
+    return "nautilus";
+  }
+
+  return std::nullopt;
+}
index 711badddec066f7900d20606d92d06dbc67d7c79..cfd93a10db119ca5bdd8c31e63950be44b0b8857 100644 (file)
@@ -1542,6 +1542,7 @@ public:
                        std::ostream *ss) const;
 
   float pool_raw_used_rate(int64_t poolid) const;
+  std::optional<std::string> pending_require_osd_release() const;
 
 };
 WRITE_CLASS_ENCODER_FEATURES(OSDMap)