]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: allow object locator to be specified in cls_rgw_bucket_complete_op
authorJ. Eric Ivancich <ivancich@redhat.com>
Mon, 22 May 2023 19:46:17 +0000 (15:46 -0400)
committerJ. Eric Ivancich <ivancich@redhat.com>
Wed, 9 Aug 2023 14:08:02 +0000 (10:08 -0400)
When a tag is not specified in bucket operation (i.e., it's not
transactional), the prepare function does not have to be called. But
then there was no way to specify a locator for the object since that
wasn't a parameter in the complete phase. This adds an object locator
parameter to complete.

Signed-off-by: J. Eric Ivancich <ivancich@redhat.com>
src/cls/rgw/cls_rgw_client.cc
src/cls/rgw/cls_rgw_client.h
src/rgw/driver/rados/rgw_rados.cc

index 73a79490a2d52983787275c079fb1cf6ad9ce62e..5e7fba88f24a1e386989af0b6a8af4616abb787c 100644 (file)
@@ -286,7 +286,8 @@ void cls_rgw_bucket_complete_op(ObjectWriteOperation& o, RGWModifyOp op, const s
                                 const rgw_bucket_dir_entry_meta& dir_meta,
                                const list<cls_rgw_obj_key> *remove_objs, bool log_op,
                                 uint16_t bilog_flags,
-                                const rgw_zone_set *zones_trace)
+                                const rgw_zone_set *zones_trace,
+                               const std::string& obj_locator)
 {
 
   bufferlist in;
@@ -295,6 +296,7 @@ void cls_rgw_bucket_complete_op(ObjectWriteOperation& o, RGWModifyOp op, const s
   call.tag = tag;
   call.key = key;
   call.ver = ver;
+  call.locator = obj_locator;
   call.meta = dir_meta;
   call.log_op = log_op;
   call.bilog_flags = bilog_flags;
index 139dbdb193955f4efbbbe1d82e277cb1a47e42f8..1ae49c877bb4d6165580685101ca9395e0096f37 100644 (file)
@@ -355,7 +355,8 @@ void cls_rgw_bucket_complete_op(librados::ObjectWriteOperation& o, RGWModifyOp o
                                 const cls_rgw_obj_key& key,
                                 const rgw_bucket_dir_entry_meta& dir_meta,
                                const std::list<cls_rgw_obj_key> *remove_objs, bool log_op,
-                                uint16_t bilog_op, const rgw_zone_set *zones_trace);
+                                uint16_t bilog_op, const rgw_zone_set *zones_trace,
+                               const std::string& obj_locator = ""); // ignored if it's the empty string
 
 void cls_rgw_remove_obj(librados::ObjectWriteOperation& o, std::list<std::string>& keep_attr_prefixes);
 void cls_rgw_obj_store_pg_ver(librados::ObjectWriteOperation& o, const std::string& attr);
index 09a762de29a47fe64f3acbc5ffc0f11cc70c9820..bb17ff3c6317998ea65d9acf42fb571345b29297 100644 (file)
@@ -8839,7 +8839,7 @@ int RGWRados::cls_obj_complete_op(BucketShard& bs, const rgw_obj& obj, RGWModify
   cls_rgw_obj_key key(ent.key.name, ent.key.instance);
   cls_rgw_guard_bucket_resharding(o, -ERR_BUSY_RESHARDING);
   cls_rgw_bucket_complete_op(o, op, tag, ver, key, dir_meta, remove_objs,
-                             svc.zone->need_to_log_data(), bilog_flags, &zones_trace);
+                             svc.zone->need_to_log_data(), bilog_flags, &zones_trace, obj.key.get_loc());
   complete_op_data *arg;
   index_completion_manager->create_completion(obj, op, tag, ver, key, dir_meta, remove_objs,
                                               svc.zone->need_to_log_data(), bilog_flags, &zones_trace, &arg);