]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
RGW - Zipper bucket/object lifecycle in librgw
authorDaniel Gryniewicz <dang@redhat.com>
Tue, 31 Aug 2021 13:17:55 +0000 (09:17 -0400)
committerDaniel Gryniewicz <dang@redhat.com>
Fri, 17 Sep 2021 13:43:01 +0000 (09:43 -0400)
s->bucket and s->object need to have a single lifecycle across an entire
op, never replaced, since lots of things use pointers to them.

Make sure s->bucket is created in read_permissions(), and that s->object
is created with the correct bucket.

Signed-off-by: Daniel Gryniewicz <dang@redhat.com>
src/rgw/rgw_file.h
src/rgw/rgw_op.cc

index 0ccd2a5794189643588c4f085078878051aca7e8..bdbfa56021ae4093c30464c0bb2757da6b386d9c 100644 (file)
@@ -2631,11 +2631,10 @@ public:
     state->op = OP_PUT;
 
     src_bucket_name = src_parent->bucket_name();
-    // need s->src_bucket_name?
+    state->src_bucket_name = src_bucket_name;
     dest_bucket_name = dst_parent->bucket_name();
-    // need s->bucket.name?
+    state->bucket_name = dest_bucket_name;
     dest_obj_name = dst_parent->format_child_name(dst_name, false);
-    // need s->object_name?
 
     int rc = valid_s3_object_name(dest_obj_name);
     if (rc != 0)
@@ -2667,7 +2666,7 @@ public:
     dest_policy = s3policy;
     /* src_object required before RGWCopyObj::verify_permissions() */
     rgw_obj_key k = rgw_obj_key(src_name);
-    src_object = rgwlib.get_store()->get_object(k);
+    src_object = s->bucket->get_object(k);
     s->object = src_object->clone(); // needed to avoid trap at rgw_op.cc:5150
     return ret;
   }
index 64f4fc0e64030ea935fa38b6dd88ce2d2964573a..c5c7a51a62b1dbfeef0770632d372882359cd64c 100644 (file)
@@ -5368,11 +5368,6 @@ void RGWCopyObj::execute(optional_yield y)
   if (init_common() < 0)
     return;
 
-  if (! s->object->get_bucket()) {
-    s->bucket = src_object->get_bucket()->clone();
-    s->object->set_bucket(s->bucket.get());
-  }
-
   // make reservation for notification if needed
   std::unique_ptr<rgw::sal::Notification> res = store->get_notification(s->object.get(),
                                                s, rgw::notify::ObjectCreatedCopy);