]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: convert SnapTrimObjSubEvent::remove_or_update to ertr
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Sun, 11 Dec 2022 16:38:38 +0000 (16:38 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 28 Feb 2023 16:22:05 +0000 (16:22 +0000)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/osd/osd_operations/snaptrim_event.cc
src/crimson/osd/osd_operations/snaptrim_event.h

index ccccda5d18557b814f560b435760e16821320acf..3a68935ab4d3882f2b86e858fc4b8e528a3ee5f4 100644 (file)
@@ -402,7 +402,7 @@ void SnapTrimObjSubEvent::update_head(
     attrs);
 }
 
-SnapTrimObjSubEvent::interruptible_future<
+SnapTrimObjSubEvent::remove_or_update_iertr::future<
   SnapTrimObjSubEvent::remove_or_update_ret_t>
 SnapTrimObjSubEvent::remove_or_update(
   ObjectContextRef obc,
@@ -412,15 +412,18 @@ SnapTrimObjSubEvent::remove_or_update(
   if (citer == obc->ssc->snapset.clone_snaps.end()) {
     logger().error("{}: No clone_snaps in snapset {} for object {}",
                    *this, obc->ssc->snapset, coid);
+    return crimson::ct_error::enoent::make();
   }
   const auto& old_snaps = citer->second;
   if (old_snaps.empty()) {
     logger().error("{}: no object info snaps for object {}",
                    *this, coid);
+    return crimson::ct_error::enoent::make();
   }
   if (obc->ssc->snapset.seq == 0) {
     logger().error("{}: no snapset.seq for object {}",
                    *this, coid);
+    return crimson::ct_error::enoent::make();
   }
   const OSDMapRef& osdmap = pg->get_osdmap();
   std::set<snapid_t> new_snaps;
@@ -507,8 +510,8 @@ seastar::future<> SnapTrimObjSubEvent::with_pg(
           logger().debug("{}: processing clone_obc={}", *this, clone_obc);
           return remove_or_update(
             clone_obc, clone_obc->head
-          ).then_unpack_interruptible([clone_obc, this]
-                                      (auto&& txn, auto&& log_entries) mutable {
+          ).safe_then_unpack_interruptible([clone_obc, this]
+                                           (auto&& txn, auto&& log_entries) mutable {
             auto [submitted, all_completed] = pg->submit_transaction(
               std::move(clone_obc),
               std::move(txn),
index 408f529b78827183a658b23d6bf50d205aa9d148..c3bbe1a6d5e7506de4f65ed2b61828891010202b 100644 (file)
@@ -149,9 +149,14 @@ private:
     ceph::os::Transaction& txn,
     std::vector<pg_log_entry_t>& log_entries);
 
+  using remove_or_update_ertr =
+    crimson::errorator<crimson::ct_error::enoent>;
+  using remove_or_update_iertr =
+    crimson::interruptible::interruptible_errorator<
+      IOInterruptCondition, remove_or_update_ertr>;
   using remove_or_update_ret_t =
     std::pair<ceph::os::Transaction, std::vector<pg_log_entry_t>>;
-  interruptible_future<remove_or_update_ret_t>
+  remove_or_update_iertr::future<remove_or_update_ret_t>
   remove_or_update(ObjectContextRef obc, ObjectContextRef head_obc);
 
   // we don't need to synchronize with other instances started by