]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/osd_operations/client_request: Support FLAG_EIO
authorMatan Breizman <mbreizma@redhat.com>
Wed, 23 Nov 2022 13:25:52 +0000 (13:25 +0000)
committerMatan Breizman <mbreizma@redhat.com>
Wed, 23 Nov 2022 15:53:54 +0000 (15:53 +0000)
See 5ac9f523ea263eeb747e2543a667a25de67d07b8

Signed-off-by: Matan Breizman <mbreizma@redhat.com>
src/crimson/osd/osd_operations/client_request.cc

index 3f2e5c81ba655e469eb481d116a1a4fc080623e9..858c2dd98433fa9b2949ff9a6343b8c5f36abedd 100644 (file)
@@ -287,6 +287,17 @@ ClientRequest::do_process(
   if (m->has_flag(CEPH_OSD_FLAG_PARALLELEXEC)) {
     return reply_op_error(pg, -EINVAL);
   }
+  const pg_pool_t pool = pg->get_pgpool().info;
+  if (pool.has_flag(pg_pool_t::FLAG_EIO)) {
+    // drop op on the floor; the client will handle returning EIO
+    if (m->has_flag(CEPH_OSD_FLAG_SUPPORTSPOOLEIO)) {
+      logger().debug("discarding op due to pool EIO flag");
+      return seastar::make_ready_future<seq_mode_t>(seq_mode_t::IN_ORDER);
+    } else {
+      logger().debug("replying EIO due to pool EIO flag");
+      return reply_op_error(pg, -EIO);
+    }
+  }
   if (m->get_oid().name.size()
     > crimson::common::local_conf()->osd_max_object_name_len) {
     return reply_op_error(pg, -ENAMETOOLONG);