From: chunmei-liu Date: Sun, 24 Oct 2021 22:06:28 +0000 (-0700) Subject: crimson: write some other osd metas X-Git-Tag: v17.1.0~560^2~3 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=784aa2f4f24c869e3df91d0bab1c0784a52afcac;p=ceph.git crimson: write some other osd metas Signed-off-by: chunmei-liu --- diff --git a/src/crimson/os/seastore/seastore.cc b/src/crimson/os/seastore/seastore.cc index 452bba333d780..8dbe258692655 100644 --- a/src/crimson/os/seastore/seastore.cc +++ b/src/crimson/os/seastore/seastore.cc @@ -9,9 +9,12 @@ #include #include +#include +#include #include #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( diff --git a/src/crimson/os/seastore/seastore.h b/src/crimson/os/seastore/seastore.h index f5dce81235147..83b4625e13461 100644 --- a/src/crimson/os/seastore/seastore.h +++ b/src/crimson/os/seastore/seastore.h @@ -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 make_seastore( diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 969b7af809e6c..ac540d2854026 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -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) diff --git a/src/crimson/osd/osd.h b/src/crimson/osd/osd.h index f51c89c2be615..318366aba59a7 100644 --- a/src/crimson/osd/osd.h +++ b/src/crimson/osd/osd.h @@ -202,7 +202,7 @@ private: version_t last, Ref m); - void check_osdmap_features(); + seastar::future<> check_osdmap_features(); seastar::future<> handle_command(crimson::net::ConnectionRef conn, Ref m);