From dc6825e81adc4d5464c8baf67d12d06ca5f28cc3 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 8 Aug 2024 00:18:16 +0000 Subject: [PATCH] crimson/osd/osd.cc: convert OSD::mkfs to a coroutine Signed-off-by: Samuel Just --- src/crimson/osd/osd.cc | 80 ++++++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 38 deletions(-) diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 591c1aca0e4..52b2fc4ca01 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -197,50 +197,54 @@ seastar::future<> OSD::mkfs( std::string osdspec_affinity) { LOG_PREFIX(OSD::mkfs); - return store.start().then([&store, FNAME, osd_uuid] { - return store.mkfs(osd_uuid).handle_error( - crimson::stateful_ec::assert_failure([FNAME] (const auto& ec) { - ERROR("error creating empty object store in {}: ({}) {}", - local_conf().get_val("osd_data"), - ec.value(), ec.message()); - })); - }).then([&store, FNAME] { - return store.mount().handle_error( - crimson::stateful_ec::assert_failure([FNAME](const auto& ec) { - ERROR("error mounting object store in {}: ({}) {}", - local_conf().get_val("osd_data"), - ec.value(), ec.message()); - })); - }).then([&store] { - return open_or_create_meta_coll(store); - }).then([&store, whoami, cluster_fsid](auto meta_coll) { + + co_await store.start(); + + co_await store.mkfs(osd_uuid).handle_error( + crimson::stateful_ec::assert_failure([FNAME] (const auto& ec) { + ERROR("error creating empty object store in {}: ({}) {}", + local_conf().get_val("osd_data"), + ec.value(), ec.message()); + })); + + co_await store.mount().handle_error( + crimson::stateful_ec::assert_failure([FNAME](const auto& ec) { + ERROR("error mounting object store in {}: ({}) {}", + local_conf().get_val("osd_data"), + ec.value(), ec.message()); + })); + + { + auto meta_coll = co_await open_or_create_meta_coll(store); + OSDSuperblock superblock; superblock.cluster_fsid = cluster_fsid; superblock.osd_fsid = store.get_fsid(); superblock.whoami = whoami; superblock.compat_features = get_osd_initial_compat_set(); - return _write_superblock( + co_await _write_superblock( store, std::move(meta_coll), std::move(superblock)); - }).then([&store, cluster_fsid] { - return store.write_meta("ceph_fsid", cluster_fsid.to_string()); - }).then([&store] { - return store.write_meta("magic", CEPH_OSD_ONDISK_MAGIC); - }).then([&store, whoami] { - return store.write_meta("whoami", std::to_string(whoami)); - }).then([&store] { - return _write_key_meta(store); - }).then([&store, osdspec_affinity=std::move(osdspec_affinity)] { - return store.write_meta("osdspec_affinity", osdspec_affinity); - }).then([&store] { - return store.write_meta("ready", "ready"); - }).then([&store, whoami, cluster_fsid] { - fmt::print("created object store {} for osd.{} fsid {}\n", - local_conf().get_val("osd_data"), - whoami, cluster_fsid); - return store.umount(); - }).then([&store] { - return store.stop(); - }); + } + + co_await store.write_meta("ceph_fsid", cluster_fsid.to_string()); + + co_await store.write_meta("magic", CEPH_OSD_ONDISK_MAGIC); + + co_await store.write_meta("whoami", std::to_string(whoami)); + + co_await _write_key_meta(store); + + co_await store.write_meta("osdspec_affinity", osdspec_affinity); + + co_await store.write_meta("ready", "ready"); + + fmt::print("created object store {} for osd.{} fsid {}\n", + local_conf().get_val("osd_data"), + whoami, cluster_fsid); + co_await store.umount(); + + co_await store.stop(); + co_return; } seastar::future<> OSD::_write_superblock( -- 2.39.5