]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: use lock safe OSDMap accessors for TMAP2OMAP check
authorSage Weil <sage@redhat.com>
Sun, 20 Jul 2014 20:41:15 +0000 (13:41 -0700)
committerJohn Spray <john.spray@redhat.com>
Mon, 25 Aug 2014 00:34:01 +0000 (01:34 +0100)
Signed-off-by: Sage Weil <sage@redhat.com>
src/mds/MDS.cc

index 8245db4cd0f6048c7e5c03fd59eeb601db0ea4dc..85b0a27739d738c4ee11eba0467b9d164dc0094d 100644 (file)
@@ -638,14 +638,18 @@ int MDS::init(MDSMap::DaemonState wanted_state)
   while (true) {
     objecter->maybe_request_map();
     objecter->wait_for_osd_map();
-    uint64_t osd_features = objecter->osdmap->get_up_osd_features();
-    if (osd_features & CEPH_FEATURE_OSD_TMAP2OMAP)
+    const OSDMap *osdmap = objecter->get_osdmap_read();
+    uint64_t osd_features = osdmap->get_up_osd_features();
+    if (osd_features & CEPH_FEATURE_OSD_TMAP2OMAP) {
+      objecter->put_osdmap_read();
       break;
-    if (objecter->osdmap->get_num_up_osds() > 0) {
+    }
+    if (osdmap->get_num_up_osds() > 0) {
         derr << "*** one or more OSDs do not support TMAP2OMAP; upgrade OSDs before starting MDS (or downgrade MDS) ***" << dendl;
     } else {
-        derr << "*** no OSDs are up as of epoch " << objecter->osdmap->get_epoch() << ", waiting" << dendl;
+        derr << "*** no OSDs are up as of epoch " << osdmap->get_epoch() << ", waiting" << dendl;
     }
+    objecter->put_osdmap_read();
     sleep(10);
   }