]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: erroratorize FuturizedStore::omap_get_header()
authorKefu Chai <kchai@redhat.com>
Sun, 20 Dec 2020 14:47:11 +0000 (22:47 +0800)
committerKefu Chai <kchai@redhat.com>
Sun, 20 Dec 2020 16:41:44 +0000 (00:41 +0800)
Signed-off-by: Kefu Chai <kchai@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/pg_backend.cc
src/crimson/osd/pg_backend.h
src/crimson/osd/replicated_recovery_backend.cc

index 51548d874f5bf317b142268714119c8b157fc64f..8b9955156b6796e23edbb6b4479203f2cf6b18bd 100644 (file)
@@ -451,16 +451,23 @@ seastar::future<struct stat> AlienStore::stat(
   });
 }
 
-seastar::future<ceph::bufferlist> AlienStore::omap_get_header(
-  CollectionRef ch,
-  const ghobject_t& oid)
+auto AlienStore::omap_get_header(CollectionRef ch,
+                                 const ghobject_t& oid)
+  -> read_errorator::future<ceph::bufferlist>
 {
   return seastar::do_with(ceph::bufferlist(), [=](auto& bl) {
     return tp->submit([=, &bl] {
       auto c = static_cast<AlienCollection*>(ch.get());
       return store->omap_get_header(c->collection, oid, &bl);
-    }).then([&bl] (int i) {
-      return seastar::make_ready_future<ceph::bufferlist>(std::move(bl));
+    }).then([&bl] (int r) -> read_errorator::future<ceph::bufferlist> {
+      if (r == -ENOENT) {
+        return crimson::ct_error::enoent::make();
+      } else if (r < 0) {
+        logger().error("omap_get_header: {}", r);
+        return crimson::ct_error::input_output_error::make();
+      } else {
+        return read_errorator::make_ready_future<ceph::bufferlist>(std::move(bl));
+      }
     });
   });
 }
index fde0c1757bca473d955bd130157d5bc898b39d32..92739340e782c8360a1c4b272c9291863313e85b 100644 (file)
@@ -99,7 +99,7 @@ public:
   seastar::future<struct stat> stat(
     CollectionRef,
     const ghobject_t&) final;
-  seastar::future<ceph::bufferlist> omap_get_header(
+  read_errorator::future<ceph::bufferlist> omap_get_header(
     CollectionRef,
     const ghobject_t&) final;
   seastar::future<std::map<uint64_t, uint64_t>> fiemap(
index 645a75340b0868232d1b73dbcf4884f9f7ec1412..eb93d72ec58ad8977636edfaeb38b4547adab707 100644 (file)
@@ -295,18 +295,19 @@ CyanStore::omap_get_values(CollectionRef ch,
     std::make_tuple(true, std::move(values)));
 }
 
-seastar::future<ceph::bufferlist>
-CyanStore::omap_get_header(
-    CollectionRef ch,
-    const ghobject_t& oid
-  ) {
+auto
+CyanStore::omap_get_header(CollectionRef ch,
+                          const ghobject_t& oid)
+  -> read_errorator::future<ceph::bufferlist>
+{
   auto c = static_cast<Collection*>(ch.get());
   auto o = c->get_object(oid);
   if (!o) {
-    throw std::runtime_error(fmt::format("object does not exist: {}", oid));
+    return crimson::ct_error::enoent::make();
   }
 
-  return seastar::make_ready_future<ceph::bufferlist>(o->omap_header);
+  return read_errorator::make_ready_future<ceph::bufferlist>(
+    o->omap_header);
 }
 
 seastar::future<> CyanStore::do_transaction(CollectionRef ch,
index 65e031ff556e021cce1ae77c2df7188641a133f7..07a8ff29e7e8394083f9e17fb8b355dc85318dd8 100644 (file)
@@ -118,7 +118,7 @@ public:
     const ghobject_t& end,
     uint64_t limit) const final;
 
-  seastar::future<ceph::bufferlist> omap_get_header(
+  read_errorator::future<ceph::bufferlist> omap_get_header(
     CollectionRef c,
     const ghobject_t& oid) final;
 
index e81bc8f175b705c7e14595afca04c2a9806a3f0f..bb173056b9de46dc3892b00546c86fb5c869eece 100644 (file)
@@ -124,7 +124,7 @@ public:
     const std::optional<std::string> &start ///< [in] start, empty for begin
     ) = 0; ///< @return <done, values> values.empty() iff done
 
-  virtual seastar::future<bufferlist> omap_get_header(
+  virtual read_errorator::future<bufferlist> omap_get_header(
     CollectionRef c,
     const ghobject_t& oid) = 0;
 
index 7cd2193debe69e38ac8eec43577e1062ac7dacd0..50c148cea111f365142b0010c45253debb394daf 100644 (file)
@@ -170,9 +170,11 @@ seastar::future<struct stat> SeaStore::stat(
   return seastar::make_ready_future<struct stat>(st);
 }
 
-seastar::future<ceph::bufferlist> omap_get_header(
+auto
+SeaStore::omap_get_header(
   CollectionRef c,
   const ghobject_t& oid)
+  -> read_errorator::future<bufferlist>
 {
   return seastar::make_ready_future<bufferlist>();
 }
index 1db5773edf128882596ecc7e01c8d3929297ccde..798442c34888198e89dfc9d361b718522982439d 100644 (file)
@@ -82,7 +82,7 @@ public:
     const std::optional<std::string> &start ///< [in] start, empty for begin
     ) final; ///< @return <done, values> values.empty() iff done
 
-  seastar::future<bufferlist> omap_get_header(
+  read_errorator::future<bufferlist> omap_get_header(
     CollectionRef c,
     const ghobject_t& oid) final;
 
index 4ba0a403ed1cfb1e17a815f9a426fe9759412830..44242cea042efff6d668319b9828edc3445c29b6 100644 (file)
@@ -881,18 +881,20 @@ maybe_get_omap_vals(
   }
 }
 
-seastar::future<ceph::bufferlist> PGBackend::omap_get_header(
+PGBackend::ll_read_errorator::future<ceph::bufferlist>
+PGBackend::omap_get_header(
   const crimson::os::CollectionRef& c,
   const ghobject_t& oid) const
 {
   return store->omap_get_header(c, oid);
 }
 
-seastar::future<> PGBackend::omap_get_header(
+PGBackend::ll_read_errorator::future<>
+PGBackend::omap_get_header(
   const ObjectState& os,
   OSDOp& osd_op) const
 {
-  return omap_get_header(coll, ghobject_t{os.oi.soid}).then(
+  return omap_get_header(coll, ghobject_t{os.oi.soid}).safe_then(
     [&osd_op] (ceph::bufferlist&& header) {
       osd_op.outdata = std::move(header);
       return seastar::now();
index cd2fe897d27c9b3381b3efec4179ee49cb1f021f..6ea0ef81b33c085c0fad61ee0ec00ed10e1d3242 100644 (file)
@@ -173,10 +173,10 @@ public:
     OSDOp& osd_op,
     ceph::os::Transaction& trans,
     osd_op_params_t& osd_op_params);
-  seastar::future<ceph::bufferlist> omap_get_header(
+  ll_read_errorator::future<ceph::bufferlist> omap_get_header(
     const crimson::os::CollectionRef& c,
     const ghobject_t& oid) const;
-  seastar::future<> omap_get_header(
+  ll_read_errorator::future<> omap_get_header(
     const ObjectState& os,
     OSDOp& osd_op) const;
   seastar::future<> omap_set_header(
index 0ed5cf9a060f3b3bb4c86aee77df92622c0b6f42..b0fbe097d0162e257258fbec31965393cbb5e684 100644 (file)
@@ -362,8 +362,8 @@ seastar::future<PushOp> ReplicatedRecoveryBackend::build_push_op(
     return [this, &recovery_info, &progress, &new_progress, &oi, &v, pop=&pop] {
       v = recovery_info.version;
       if (progress.first) {
-       return backend->omap_get_header(coll, ghobject_t(recovery_info.soid))
-         .then([this, &recovery_info, pop](auto bl) {
+       return backend->omap_get_header(coll, ghobject_t(recovery_info.soid)).safe_then(
+          [this, &recovery_info, pop](auto bl) {
          pop->omap_header.claim_append(bl);
          return store->get_attrs(coll, ghobject_t(recovery_info.soid));
        }).safe_then([&oi, pop, &new_progress, &v](auto attrs) mutable {
@@ -377,7 +377,7 @@ seastar::future<PushOp> ReplicatedRecoveryBackend::build_push_op(
            v = oi.version;
          }
          return seastar::make_ready_future<>();
-       }, crimson::os::FuturizedStore::get_attrs_ertr::all_same_way(
+       }, crimson::os::FuturizedStore::read_errorator::all_same_way(
            [] (const std::error_code& e) {
            return seastar::make_exception_future<>(e);
          })