]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson: write some other osd metas
authorchunmei-liu <chunmei.liu@intel.com>
Sun, 24 Oct 2021 22:06:28 +0000 (15:06 -0700)
committerchunmei-liu <chunmei.liu@intel.com>
Sat, 30 Oct 2021 01:03:49 +0000 (18:03 -0700)
Signed-off-by: chunmei-liu <chunmei.liu@intel.com>
src/crimson/os/seastore/seastore.cc
src/crimson/os/seastore/seastore.h
src/crimson/osd/osd.cc
src/crimson/osd/osd.h

index 452bba333d780f8c1b9da05cc32f34364df0efad..8dbe2586926555df5b336b9151ce4cc57a03a356 100644 (file)
@@ -9,9 +9,12 @@
 #include <fmt/format.h>
 #include <fmt/ostream.h>
 
+#include <seastar/core/file.hh>
+#include <seastar/core/fstream.hh>
 #include <seastar/core/shared_mutex.hh>
 
 #include "common/safe_io.h"
+#include "include/stringify.h"
 #include "os/Transaction.h"
 
 #include "crimson/common/buffer_io.h"
@@ -136,6 +139,24 @@ seastar::future<> SeaStore::umount()
   );
 }
 
+seastar::future<> SeaStore::write_fsid(uuid_d new_osd_fsid)
+{
+  LOG_PREFIX(SeaStore::write_fsid);
+  return read_meta("fsid").then([this, FNAME, new_osd_fsid] (auto tuple) {
+    auto [ret, fsid] = tuple;
+    std::string str_fsid = stringify(new_osd_fsid);
+    if (ret == -1) {
+       return write_meta("fsid", stringify(new_osd_fsid));
+    } else if (ret == 0 && fsid != str_fsid) {
+       ERROR("on-disk fsid {} != provided {}",
+         fsid, stringify(new_osd_fsid));
+       throw std::runtime_error("store fsid error");
+     } else {
+      return seastar::now();
+     }
+   });
+}
+
 SeaStore::mkfs_ertr::future<> SeaStore::mkfs(uuid_d new_osd_fsid)
 {
   return seastar::do_with(
@@ -238,6 +259,23 @@ SeaStore::mkfs_ertr::future<> SeaStore::mkfs(uuid_d new_osd_fsid)
        });
       });
     });
+  }).safe_then([this, new_osd_fsid] {
+    return write_fsid(new_osd_fsid);
+  }).safe_then([this] {
+    return read_meta("type").then([this] (auto tuple) {
+      auto [ret, type] = tuple;
+      if (ret == 0 && type == "seastore") {
+        return seastar::now();
+      } else if (ret == 0 && type != "seastore") {
+        LOG_PREFIX(SeaStore::mkfs);
+        ERROR("expected seastore, but type is {}", type);
+        throw std::runtime_error("store type error");
+      } else {
+        return write_meta("type", "seastore");
+      }
+    });
+  }).safe_then([this] {
+    return write_meta("mkfs_done", "yes");
   }).safe_then([this] {
     return umount();
   }).handle_error(
index f5dce812351477a5caf165f12d0db7d8da82c2bb..83b4625e134617ce88e0117278e50542a9b959e7 100644 (file)
@@ -350,6 +350,7 @@ private:
   }
   seastar::metrics::metric_group metrics;
   void register_metrics();
+  seastar::future<> write_fsid(uuid_d new_osd_fsid);
 };
 
 std::unique_ptr<SeaStore> make_seastore(
index 969b7af809e6c1db58f4a229fbfe9b27a7336cdd..ac540d2854026dd79776d6900487238809b1f6be 100644 (file)
@@ -176,6 +176,8 @@ seastar::future<> OSD::mkfs(uuid_d osd_uuid, uuid_d cluster_fsid)
     return _write_superblock();
   }).then([cluster_fsid, this] {
     return store.write_meta("ceph_fsid", cluster_fsid.to_string());
+  }).then([this] {
+    return store.write_meta("magic", CEPH_OSD_ONDISK_MAGIC);
   }).then([this] {
     return store.write_meta("whoami", std::to_string(whoami));
   }).then([this] {
@@ -1139,9 +1141,10 @@ seastar::future<> OSD::committed_osd_maps(version_t first,
        return seastar::now();
       }
     }
-    check_osdmap_features();
-    // yay!
-    return consume_map(osdmap->get_epoch());
+    return check_osdmap_features().then([this] {
+      // yay!
+      return consume_map(osdmap->get_epoch());
+    });
   }).then([m, this] {
     if (state.is_active()) {
       logger().info("osd.{}: now active", whoami);
@@ -1367,9 +1370,11 @@ seastar::future<> OSD::handle_peering_op(
   return seastar::now();
 }
 
-void OSD::check_osdmap_features()
+seastar::future<> OSD::check_osdmap_features()
 {
   heartbeat->set_require_authorizer(true);
+  return store.write_meta("require_osd_release",
+                          stringify((int)osdmap->require_osd_release));
 }
 
 seastar::future<> OSD::consume_map(epoch_t epoch)
index f51c89c2be6150a0cd19b10775822d70413638bf..318366aba59a7655d1e6cbac243c898d801977cc 100644 (file)
@@ -202,7 +202,7 @@ private:
                                        version_t last,
                                        Ref<MOSDMap> m);
 
-  void check_osdmap_features();
+  seastar::future<> check_osdmap_features();
 
   seastar::future<> handle_command(crimson::net::ConnectionRef conn,
                                   Ref<MCommand> m);