]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: require allow_crimson to boot crimson-osd
authorSamuel Just <sjust@redhat.com>
Sun, 9 Oct 2022 23:29:05 +0000 (23:29 +0000)
committerSamuel Just <sjust@redhat.com>
Tue, 14 Feb 2023 06:36:35 +0000 (22:36 -0800)
Fixes: https://tracker.ceph.com/issues/57799
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/osd/osd.cc
src/mon/OSDMonitor.cc

index bae5cecfbe29fbf783e2fcdecce3f5ab2b3b5216..90a3a3afd2818c33a5913fabf91a36386d165484 100644 (file)
@@ -531,6 +531,10 @@ seastar::future<> OSD::_send_boot()
                                   cluster_addrs,
                                   CEPH_FEATURES_ALL);
   collect_sys_info(&m->metadata, NULL);
+
+  // See OSDMonitor::preprocess_boot, prevents boot without allow_crimson
+  // OSDMap flag
+  m->metadata["osd_type"] = "crimson";
   return monc->send_message(std::move(m));
 }
 
index e359fd0210664607ce6ea89a845c7f000c502d2e..4eccbf42408cab398c2bb622ecfead5a20c0ee80 100644 (file)
@@ -3552,6 +3552,31 @@ bool OSDMonitor::preprocess_boot(MonOpRequestRef op)
     goto ignore;
   }
 
+  // See crimson/osd/osd.cc: OSD::_send_boot
+  if (auto type_iter = m->metadata.find("osd_type");
+      type_iter != m->metadata.end()) {
+    const auto &otype = type_iter->second;
+    // m->metadata["osd_type"] must be "crimson", classic doesn't send osd_type
+    if (otype == "crimson") {
+      if (!osdmap.get_allow_crimson()) {
+       mon.clog->info()
+         << "Disallowing boot of crimson-osd without allow_crimson "
+         << "OSDMap flag.  Run ceph osd set_allow_crimson to set "
+         << "allow_crimson flag.  Note that crimson-osd is "
+         << "considered unstable and may result in crashes or "
+         << "data loss.  Its usage should be restricted to "
+         << "testing and development.";
+       goto ignore;
+      }
+    } else {
+      derr << __func__ << ": osd " << m->get_orig_source_inst()
+          << " sent non-crimson osd_type field in MOSDBoot: "
+          << otype
+          << " -- booting anyway"
+          << dendl;
+    }
+  }
+
   if (osdmap.stretch_mode_enabled &&
       !(m->osd_features & CEPH_FEATUREMASK_STRETCH_MODE)) {
     mon.clog->info() << "disallowing boot of OSD "