]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: fix ENOENT on accessing RadosGW user's index of buckets
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 4 Apr 2023 21:22:51 +0000 (21:22 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 11 Apr 2023 21:09:59 +0000 (21:09 +0000)
https://gist.github.com/rzarzynski/267661b719c414126a713826175f445c

Fixes: https://tracker.ceph.com/issues/59429
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/osd/pg_backend.cc

index 86011bf081f63b1aa36bf8718853b94a35fe6e1d..77432a2c0e2a7c50b4db69a422f20fba6efe72f9 100644 (file)
@@ -1322,13 +1322,19 @@ PGBackend::omap_get_header(
   OSDOp& osd_op,
   object_stat_sum_t& delta_stats) const
 {
-  return omap_get_header(coll, ghobject_t{os.oi.soid}).safe_then_interruptible(
-    [&delta_stats, &osd_op] (ceph::bufferlist&& header) {
-      osd_op.outdata = std::move(header);
-      delta_stats.num_rd_kb += shift_round_up(osd_op.outdata.length(), 10);
-      delta_stats.num_rd++;
-      return seastar::now();
-    });
+  if (os.oi.is_omap()) {
+    return omap_get_header(coll, ghobject_t{os.oi.soid}).safe_then_interruptible(
+      [&delta_stats, &osd_op] (ceph::bufferlist&& header) {
+        osd_op.outdata = std::move(header);
+        delta_stats.num_rd_kb += shift_round_up(osd_op.outdata.length(), 10);
+        delta_stats.num_rd++;
+        return seastar::now();
+      });
+  } else {
+    // no omap? return empty data but not ENOENT. This is imporant for
+    // the case when the object is being creating due to to may_write().
+    return seastar::now();
+  }
 }
 
 PGBackend::ll_read_ierrorator::future<>