]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd, crimson/os: errorate the FuturizedStore::mkfs() paths.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 21 Sep 2021 23:01:06 +0000 (23:01 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 23 Sep 2021 17:27:27 +0000 (17:27 +0000)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/os/alienstore/alien_store.cc
src/crimson/os/alienstore/alien_store.h
src/crimson/os/cyanstore/cyan_store.cc
src/crimson/os/cyanstore/cyan_store.h
src/crimson/os/futurized_store.h
src/crimson/os/seastore/seastore.cc
src/crimson/os/seastore/seastore.h
src/crimson/osd/osd.cc
src/test/crimson/seastore/onode_tree/test_fltree_onode_manager.cc
src/test/crimson/seastore/transaction_manager_test_state.h

index c9dd14501d8a44dd26bc26cb62e72eb060c85666..870f6aa422e5a35f4bfc90a45f6a71779b9b2a36 100644 (file)
@@ -150,16 +150,20 @@ seastar::future<> AlienStore::umount()
   });
 }
 
-seastar::future<> AlienStore::mkfs(uuid_d osd_fsid)
+AlienStore::mkfs_ertr::future<> AlienStore::mkfs(uuid_d osd_fsid)
 {
   logger().debug("{}", __func__);
   store->set_fsid(osd_fsid);
   assert(tp);
   return tp->submit([this] {
     return store->mkfs();
-  }).then([] (int r) {
-    assert(r == 0);
-    return seastar::now();
+  }).then([] (int r) -> mkfs_ertr::future<> {
+    if (r != 0) {
+      return crimson::stateful_ec{
+        std::error_code(-r, std::generic_category()) };
+    } else {
+      return mkfs_ertr::now();
+    }
   });
 }
 
index 5f96d0658e3990362006b94f76daac1d64c6bbf5..b0ab87e254e689551ebe075000978330716d5482 100644 (file)
@@ -49,7 +49,7 @@ public:
   seastar::future<> mount() final;
   seastar::future<> umount() final;
 
-  seastar::future<> mkfs(uuid_d new_osd_fsid) final;
+  mkfs_ertr::future<> mkfs(uuid_d new_osd_fsid) final;
   read_errorator::future<ceph::bufferlist> read(CollectionRef c,
                                    const ghobject_t& oid,
                                    uint64_t offset,
index fdf24d906079163f3eb78ed86f34d0a2c4acd3bd..0f5efc1f7e7e976b3868923ce51280a3fed5d6e6 100644 (file)
@@ -101,9 +101,9 @@ private:
   };
 };
 
-seastar::future<> CyanStore::mkfs(uuid_d new_osd_fsid)
+CyanStore::mkfs_ertr::future<> CyanStore::mkfs(uuid_d new_osd_fsid)
 {
-  return read_meta("fsid").then([=](auto&& ret) {
+  return read_meta("fsid").then([=](auto&& ret) -> mkfs_ertr::future<> {
     auto& [r, fsid_str] = ret;
     if (r == -ENOENT) {
       if (new_osd_fsid.is_zero()) {
@@ -113,25 +113,28 @@ seastar::future<> CyanStore::mkfs(uuid_d new_osd_fsid)
       }
       return write_meta("fsid", fmt::format("{}", osd_fsid));
     } else if (r < 0) {
-      throw std::runtime_error("read_meta");
+      static const char msg[]{"read_meta"};
+      return crimson::stateful_ec{ singleton_ec<msg>() };
     } else {
       logger().info("mkfs already has fsid {}", fsid_str);
       if (!osd_fsid.parse(fsid_str.c_str())) {
-        throw std::runtime_error("failed to parse fsid");
+        static const char msg[]{"failed to parse fsid"};
+        return crimson::stateful_ec{ singleton_ec<msg>() };
       } else if (osd_fsid != new_osd_fsid) {
         logger().error("on-disk fsid {} != provided {}", osd_fsid, new_osd_fsid);
-        throw std::runtime_error("unmatched osd_fsid");
+        static const char msg[]{"unmatched osd_fsid"};
+        return crimson::stateful_ec{ singleton_ec<msg>() };
       } else {
-       return seastar::now();
+       return mkfs_ertr::now();
       }
     }
-  }).then([this]{
+  }).safe_then([this]{
     std::string fn = path + "/collections";
     ceph::bufferlist bl;
     std::set<coll_t> collections;
     ceph::encode(collections, bl);
     return crimson::write_file(std::move(bl), fn);
-  }).then([this] {
+  }).safe_then([this] {
     return write_meta("type", "memstore");
   });
 }
index 8c182d0dd8afe40963af5a4a6aaf8041d59d18a1..d4881202c600ba7708b9aad0faa4109d0cf5daa4 100644 (file)
@@ -71,7 +71,7 @@ public:
   seastar::future<> mount() final;
   seastar::future<> umount() final;
 
-  seastar::future<> mkfs(uuid_d new_osd_fsid) final;
+  mkfs_ertr::future<> mkfs(uuid_d new_osd_fsid) final;
   seastar::future<store_statfs_t> stat() const final;
   seastar::future<struct stat> stat(
     CollectionRef c,
index 435b11067f4daf7bd89c295782ca659d8b4d121c..b4dced9dc87cdb154373f9ece0379e2c44b7792b 100644 (file)
@@ -68,7 +68,8 @@ public:
   virtual seastar::future<> mount() = 0;
   virtual seastar::future<> umount() = 0;
 
-  virtual seastar::future<> mkfs(uuid_d new_osd_fsid) = 0;
+  using mkfs_ertr = crimson::errorator<crimson::stateful_ec>;
+  virtual mkfs_ertr::future<> mkfs(uuid_d new_osd_fsid) = 0;
   virtual seastar::future<store_statfs_t> stat() const = 0;
 
   using CollectionRef = boost::intrusive_ptr<FuturizedCollection>;
index 1b3f166c0ed56a6a8ff3bb3434e52320362595ae..b15b5138e31ee46ed4681aa4853ce976e0ab8e7c 100644 (file)
@@ -108,7 +108,7 @@ seastar::future<> SeaStore::umount()
   );
 }
 
-seastar::future<> SeaStore::mkfs(uuid_d new_osd_fsid)
+SeaStore::mkfs_ertr::future<> SeaStore::mkfs(uuid_d new_osd_fsid)
 {
   return segment_manager->mkfs(
     seastore_meta_t{new_osd_fsid}
index 471328c8a3a211d88a5bde708a402bc05bd170d0..d9eacf418986e570ef22636df6e0c7c9e854ddd3 100644 (file)
@@ -52,7 +52,7 @@ public:
   seastar::future<> mount() final;
   seastar::future<> umount() final;
 
-  seastar::future<> mkfs(uuid_d new_osd_fsid) final;
+  mkfs_ertr::future<> mkfs(uuid_d new_osd_fsid) final;
   seastar::future<store_statfs_t> stat() const final;
 
   read_errorator::future<ceph::bufferlist> read(
index 7f82fa26205e25584f80cf077484df2f5ee2d00e..ea5c46bf1f40701cd8e15acdd4ddac412b2e130a 100644 (file)
@@ -152,7 +152,13 @@ CompatSet get_osd_initial_compat_set()
 seastar::future<> OSD::mkfs(uuid_d osd_uuid, uuid_d cluster_fsid)
 {
   return store.start().then([this, osd_uuid] {
-    return store.mkfs(osd_uuid);
+    return store.mkfs(osd_uuid).handle_error(
+      crimson::stateful_ec::handle([] (const auto& ec) {
+        logger().error("error creating empty object store in {}: ({}) {}",
+                       local_conf().get_val<std::string>("osd_data"),
+                       ec.value(), ec.message());
+        std::exit(EXIT_FAILURE);
+      }));
   }).then([this] {
     return store.mount();
   }).then([cluster_fsid, this] {
index b52a79e29a7876574c166e5b7e57ddce7fa3aaa1..baf5bb29bb15a0e7e87f115be6537062f629f260 100644 (file)
@@ -79,9 +79,9 @@ struct fltree_onode_manager_test_t
     TMTestState::_destroy();
   }
 
-  virtual seastar::future<> _mkfs() final {
+  virtual FuturizedStore::mkfs_ertr::future<> _mkfs() final {
     return TMTestState::_mkfs(
-    ).then([this] {
+    ).safe_then([this] {
       return tm->mount(
       ).safe_then([this] {
        return repeat_eagain([this] {
index 04c7a11c87e55c589ee4417ec1d995f9cde2d410..56aaac2ad9dfbd7c723769240d010216db4e4c29 100644 (file)
@@ -36,7 +36,7 @@ protected:
   }
 
   virtual seastar::future<> _teardown() = 0;
-  virtual seastar::future<> _mkfs() = 0;
+  virtual FuturizedStore::mkfs_ertr::future<> _mkfs() = 0;
   virtual seastar::future<> _mount() = 0;
 
   void restart() {
@@ -153,7 +153,7 @@ protected:
     });
   }
 
-  virtual seastar::future<> _mkfs() {
+  virtual FuturizedStore::mkfs_ertr::future<> _mkfs() {
     return tm->mkfs(
     ).handle_error(
       crimson::ct_error::assert_all{"Error in teardown"}
@@ -253,7 +253,7 @@ protected:
     return seastore->mount();
   }
 
-  virtual seastar::future<> _mkfs() {
+  virtual FuturizedStore::mkfs_ertr::future<> _mkfs() {
     return seastore->mkfs(uuid_d{});
   }
 };