]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: Add osd version collector
authorDavid Zafman <dzafman@redhat.com>
Fri, 11 Sep 2020 21:46:55 +0000 (21:46 +0000)
committerDavid Zafman <dzafman@redhat.com>
Wed, 11 Nov 2020 23:10:11 +0000 (15:10 -0800)
Signed-off-by: David Zafman <dzafman@redhat.com>
src/mon/Monitor.cc
src/mon/OSDMonitor.cc
src/mon/OSDMonitor.h

index 7e1d30628d3f89c139c2804290d99737a3c1ea9d..170e2b6a9b8f636f499f60ad037500b3b455244f 100644 (file)
@@ -5363,6 +5363,8 @@ void Monitor::get_all_versions(std::map<string, list<string> > &versions)
 {
   // mon
   get_versions(versions);
+  // osd
+  osdmon()->get_versions(versions);
   dout(20) << __func__ << " all versions=" << versions << dendl;
 }
 
index e154ed72e004422f6ee0610aa203f1b2d34d6066..89f4a43c3a4c39b5b8bc47830f940b66e1cf95c1 100644 (file)
@@ -2133,6 +2133,19 @@ void OSDMonitor::count_metadata(const string& field, Formatter *f)
   f->close_section();
 }
 
+void OSDMonitor::get_versions(std::map<string, list<string> > &versions)
+{
+  for (int osd = 0; osd < osdmap.get_max_osd(); ++osd) {
+    if (osdmap.is_up(osd)) {
+      map<string,string> meta;
+      load_metadata(osd, meta, nullptr);
+      auto p = meta.find("ceph_version_short");
+      if (p == meta.end()) continue;
+      versions[p->second].push_back(string("osd.") + stringify(osd));
+    }
+  }
+}
+
 int OSDMonitor::get_osd_objectstore_type(int osd, string *type)
 {
   map<string, string> metadata;
index 1caa64676f01f26f5403267dcdf991412da697bb..02f0fa36ccee383d10675f3eba3d92a0bdab1c76 100644 (file)
@@ -634,6 +634,7 @@ private:
   void reencode_full_map(ceph::buffer::list& bl, uint64_t features);
 public:
   void count_metadata(const std::string& field, std::map<std::string,int> *out);
+  void get_versions(std::map<string, list<string> > &versions);
 protected:
   int get_osd_objectstore_type(int osd, std::string *type);
   bool is_pool_currently_all_bluestore(int64_t pool_id, const pg_pool_t &pool,