]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/s3: RGWGetObj still sets attrs on ReadOp error 55094/head
authorCasey Bodley <cbodley@redhat.com>
Tue, 21 Nov 2023 03:48:55 +0000 (22:48 -0500)
committerCasey Bodley <cbodley@redhat.com>
Mon, 8 Jan 2024 19:16:01 +0000 (14:16 -0500)
when `ReadOp::prepare()` fails with `-ERR_NOT_MODIFIED`, it succeeded in
reading the head object for mtime and attrs like etag. make those attrs
available to RGWGetObj so we can still send ETag and other cache-related
response headers

Fixes: https://tracker.ceph.com/issues/45736
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit ccd241c565aa898231e4bfa4ea313c3406b55391)

Conflicts:
src/rgw/rgw_op.cc no multipart get part

src/rgw/rgw_op.cc

index 71fb198f3622bee3ac05c0cf8adefd37bd3fc52e..7890eddd8273cb2eb6443468fbacf302befea224 100644 (file)
@@ -2229,11 +2229,11 @@ void RGWGetObj::execute(optional_yield y)
   read_op->params.lastmod = &lastmod;
 
   op_ret = read_op->prepare(s->yield, this);
-  if (op_ret < 0)
-    goto done_err;
   version_id = s->object->get_instance();
   s->obj_size = s->object->get_obj_size();
   attrs = s->object->get_attrs();
+  if (op_ret < 0)
+    goto done_err;
 
   /* STAT ops don't need data, and do no i/o */
   if (get_type() == RGW_OP_STAT_OBJ) {