From: Jane Zhu Date: Mon, 21 Apr 2025 16:00:23 +0000 (+0000) Subject: rgw: prefetch data from versioned object instance head X-Git-Tag: v20.1.0~204^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=951c83c854d190864c1e53d43945931b6c4fe019;p=ceph.git rgw: prefetch data from versioned object instance head Signed-off-by: Jane Zhu (cherry picked from commit 5e47f6711605987c0b90bab29eda770e5b52dfaf) --- diff --git a/src/rgw/driver/daos/rgw_sal_daos.cc b/src/rgw/driver/daos/rgw_sal_daos.cc index 808a0a5f993a..f60c5a11208e 100644 --- a/src/rgw/driver/daos/rgw_sal_daos.cc +++ b/src/rgw/driver/daos/rgw_sal_daos.cc @@ -940,7 +940,7 @@ int DaosObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, } // Update object attrs - set_atomic(); + set_atomic(true); attrs[attr_name] = attr_val; ret = set_dir_entry_attrs(dpp, &ent, &attrs); diff --git a/src/rgw/driver/motr/rgw_sal_motr.cc b/src/rgw/driver/motr/rgw_sal_motr.cc index b00720302056..dee118243f7f 100644 --- a/src/rgw/driver/motr/rgw_sal_motr.cc +++ b/src/rgw/driver/motr/rgw_sal_motr.cc @@ -1238,7 +1238,7 @@ int MotrObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, op if (r < 0) { return r; } - set_atomic(); + set_atomic(true); state.attrset[attr_name] = attr_val; return set_obj_attrs(dpp, &state.attrset, nullptr, y, flags); } @@ -1249,7 +1249,7 @@ int MotrObject::delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr Attrs rmattr; bufferlist bl; - set_atomic(); + set_atomic(true); rmattr[attr_name] = bl; return set_obj_attrs(dpp, nullptr, &rmattr, y, rgw::sal::FLAG_LOG_OP); } diff --git a/src/rgw/driver/rados/rgw_cr_rados.cc b/src/rgw/driver/rados/rgw_cr_rados.cc index 7c65b59d3a91..69465ccd9b7a 100644 --- a/src/rgw/driver/rados/rgw_cr_rados.cc +++ b/src/rgw/driver/rados/rgw_cr_rados.cc @@ -913,7 +913,7 @@ int RGWAsyncRemoveObj::_send_request(const DoutPrefixProvider *dpp) { ldpp_dout(dpp, 0) << __func__ << "(): deleting obj=" << obj << dendl; - obj->set_atomic(); + obj->set_atomic(true); int ret = obj->load_obj_state(dpp, null_yield); if (ret < 0) { diff --git a/src/rgw/driver/rados/rgw_lc_tier.cc b/src/rgw/driver/rados/rgw_lc_tier.cc index ece1e93370e8..cf057f6fae8f 100644 --- a/src/rgw/driver/rados/rgw_lc_tier.cc +++ b/src/rgw/driver/rados/rgw_lc_tier.cc @@ -922,7 +922,7 @@ static int cloud_tier_plain_transfer(RGWLCCloudTierCtx& tier_ctx) { rgw_obj dest_obj(dest_bucket, rgw_obj_key(target_obj_name)); - tier_ctx.obj->set_atomic(); + tier_ctx.obj->set_atomic(true); /* Prepare Read from source */ /* TODO: Define readf, writef as stack variables. For some reason, @@ -966,7 +966,7 @@ static int cloud_tier_send_multipart_part(RGWLCCloudTierCtx& tier_ctx, rgw_obj dest_obj(dest_bucket, rgw_obj_key(target_obj_name)); - tier_ctx.obj->set_atomic(); + tier_ctx.obj->set_atomic(true); /* TODO: Define readf, writef as stack variables. For some reason, * when used as stack variables (esp., readf), the transition seems to diff --git a/src/rgw/driver/rados/rgw_putobj_processor.cc b/src/rgw/driver/rados/rgw_putobj_processor.cc index cd07a416d591..645f744be441 100644 --- a/src/rgw/driver/rados/rgw_putobj_processor.cc +++ b/src/rgw/driver/rados/rgw_putobj_processor.cc @@ -394,7 +394,7 @@ int AtomicObjectProcessor::complete( return r; } - obj_ctx.set_atomic(head_obj); + obj_ctx.set_atomic(head_obj, true); RGWRados::Object op_target(store, bucket_info, obj_ctx, head_obj); @@ -768,7 +768,7 @@ int AppendObjectProcessor::complete( if (r < 0) { return r; } - obj_ctx.set_atomic(head_obj); + obj_ctx.set_atomic(head_obj, true); RGWRados::Object op_target(store, bucket_info, obj_ctx, head_obj); //For Append obj, disable versioning op_target.set_versioning_disabled(true); diff --git a/src/rgw/driver/rados/rgw_rados.cc b/src/rgw/driver/rados/rgw_rados.cc index 08731ab69cd6..f60a5e700ebf 100644 --- a/src/rgw/driver/rados/rgw_rados.cc +++ b/src/rgw/driver/rados/rgw_rados.cc @@ -252,10 +252,10 @@ void RGWObjectCtx::set_compressed(const rgw_obj& obj) { objs_state[obj].state.compressed = true; } -void RGWObjectCtx::set_atomic(const rgw_obj& obj) { +void RGWObjectCtx::set_atomic(const rgw_obj& obj, bool atomic) { std::unique_lock wl{lock}; assert (!obj.empty()); - objs_state[obj].state.is_atomic = true; + objs_state[obj].state.is_atomic = atomic; } void RGWObjectCtx::set_prefetch_data(const rgw_obj& obj) { std::unique_lock wl{lock}; @@ -2959,7 +2959,7 @@ int RGWRados::swift_versioning_copy(RGWObjectCtx& obj_ctx, return 0; } - obj_ctx.set_atomic(obj); + obj_ctx.set_atomic(obj, true); RGWObjState * state = nullptr; RGWObjManifest *manifest = nullptr; @@ -2999,7 +2999,7 @@ int RGWRados::swift_versioning_copy(RGWObjectCtx& obj_ctx, gen_rand_obj_instance_name(&dest_obj); } - obj_ctx.set_atomic(dest_obj); + obj_ctx.set_atomic(dest_obj, true); rgw_zone_id no_zone; @@ -3100,8 +3100,8 @@ int RGWRados::swift_versioning_restore(RGWObjectCtx& obj_ctx, gen_rand_obj_instance_name(&obj); } - obj_ctx.set_atomic(archive_obj); - obj_ctx.set_atomic(obj); + obj_ctx.set_atomic(archive_obj, true); + obj_ctx.set_atomic(obj, true); jspan_context no_trace{false, false}; @@ -5294,7 +5294,7 @@ int RGWRados::transition_obj(RGWObjectCtx& obj_ctx, real_time read_mtime; uint64_t obj_size; - obj_ctx.set_atomic(obj); + obj_ctx.set_atomic(obj, true); RGWRados::Object op_target(this, bucket_info, obj_ctx, obj); RGWRados::Object::Read read_op(&op_target); @@ -6095,7 +6095,7 @@ static int resync_encrypted_multipart(const DoutPrefixProvider* dpp, const RGWObjState& state) { // only overwrite if the tag hasn't changed - obj_ctx.set_atomic(state.obj); + obj_ctx.set_atomic(state.obj, true); // make a tiny adjustment to the existing mtime so that fetch_remote_obj() // won't return ERR_NOT_MODIFIED when resyncing the object @@ -6649,6 +6649,11 @@ int RGWRados::get_olh_target_state(const DoutPrefixProvider *dpp, RGWObjectCtx& return r; } + // if prefetch was requested, apply it to the target too + if (olh_state->prefetch_data) { + obj_ctx.set_prefetch_data(target); + } + return get_obj_state(dpp, &obj_ctx, bucket_info, target, psm, false, y); } diff --git a/src/rgw/driver/rados/rgw_rados.h b/src/rgw/driver/rados/rgw_rados.h index f676cfeed79a..7e8b3da8afb6 100644 --- a/src/rgw/driver/rados/rgw_rados.h +++ b/src/rgw/driver/rados/rgw_rados.h @@ -208,7 +208,7 @@ public: RGWObjStateManifest *get_state(const rgw_obj& obj); void set_compressed(const rgw_obj& obj); - void set_atomic(const rgw_obj& obj); + void set_atomic(const rgw_obj& obj, bool atomic); void set_prefetch_data(const rgw_obj& obj); void invalidate(const rgw_obj& obj); }; @@ -1459,9 +1459,9 @@ int restore_obj_from_cloud(RGWLCCloudTierCtx& tier_ctx, int append_async(const DoutPrefixProvider *dpp, rgw_raw_obj& obj, size_t size, bufferlist& bl); public: - void set_atomic(void *ctx, const rgw_obj& obj) { + void set_atomic(void *ctx, const rgw_obj& obj, bool atomic) { RGWObjectCtx *rctx = static_cast(ctx); - rctx->set_atomic(obj); + rctx->set_atomic(obj, atomic); } void set_prefetch_data(void *ctx, const rgw_obj& obj) { RGWObjectCtx *rctx = static_cast(ctx); diff --git a/src/rgw/driver/rados/rgw_sal_rados.cc b/src/rgw/driver/rados/rgw_sal_rados.cc index 9a719bcbd946..05fdc7cf7015 100644 --- a/src/rgw/driver/rados/rgw_sal_rados.cc +++ b/src/rgw/driver/rados/rgw_sal_rados.cc @@ -1247,7 +1247,7 @@ int RadosBucket::commit_logging_object(const std::string& obj_name, optional_yie } RGWObjectCtx obj_ctx(store); - obj_ctx.set_atomic(head_obj); + obj_ctx.set_atomic(head_obj, true); const auto& bucket_info = get_info(); RGWRados::Object rgw_head_obj(store->getRados(), bucket_info, @@ -2746,7 +2746,7 @@ int RadosObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, o /* Temporarily set target */ state.obj = target; - set_atomic(); + set_atomic(true); state.attrset[attr_name] = attr_val; r = set_obj_attrs(dpp, &state.attrset, nullptr, y, flags); /* Restore target */ @@ -2760,7 +2760,7 @@ int RadosObject::delete_obj_attrs(const DoutPrefixProvider* dpp, const char* att Attrs rmattr; bufferlist bl; - set_atomic(); + set_atomic(true); rmattr[attr_name] = bl; return set_obj_attrs(dpp, nullptr, &rmattr, y, rgw::sal::FLAG_LOG_OP); } @@ -2912,7 +2912,7 @@ int RadosObject::chown(User& new_user, const DoutPrefixProvider* dpp, optional_y bl.clear(); encode(policy, bl); - set_atomic(); + set_atomic(true); map attrs; attrs[RGW_ATTR_ACL] = bl; r = set_obj_attrs(dpp, &attrs, nullptr, y, rgw::sal::FLAG_LOG_OP); @@ -3117,7 +3117,7 @@ int RadosObject::set_cloud_restore_status(const DoutPrefixProvider* dpp, rgw::sal::RGWRestoreStatus restore_status) { int ret = 0; - set_atomic(); + set_atomic(true); bufferlist bl; using ceph::encode; @@ -3159,7 +3159,7 @@ int RadosObject::handle_obj_expiry(const DoutPrefixProvider* dpp, optional_yield obj_key.instance.clear(); } - set_atomic(); + set_atomic(true); map attrs = get_attrs(); RGWRados::Object op_target(store->getRados(), bucket->get_info(), *rados_ctx, get_obj()); RGWRados::Object::Write obj_op(&op_target); @@ -3271,7 +3271,7 @@ int RadosObject::write_cloud_tier(const DoutPrefixProvider* dpp, RGWRados::Object op_target(store->getRados(), bucket->get_info(), *rados_ctx, get_obj()); RGWRados::Object::Write obj_op(&op_target); - set_atomic(); + set_atomic(true); obj_op.meta.modify_tail = true; obj_op.meta.flags = PUT_OBJ_CREATE; obj_op.meta.category = RGWObjCategory::CloudTiered; @@ -4201,7 +4201,7 @@ int RadosMultipartUpload::complete(const DoutPrefixProvider *dpp, attrs[RGW_ATTR_COMPRESSION] = tmp; } - target_obj->set_atomic(); + target_obj->set_atomic(true); const RGWBucketInfo& bucket_info = target_obj->get_bucket()->get_info(); RGWRados::Object op_target(store->getRados(), bucket_info, diff --git a/src/rgw/driver/rados/rgw_sal_rados.h b/src/rgw/driver/rados/rgw_sal_rados.h index 9e99d69b3b75..68db1b8bf096 100644 --- a/src/rgw/driver/rados/rgw_sal_rados.h +++ b/src/rgw/driver/rados/rgw_sal_rados.h @@ -585,9 +585,9 @@ class RadosObject : public StoreObject { const DoutPrefixProvider* dpp, optional_yield y) override; virtual RGWAccessControlPolicy& get_acl(void) override { return acls; } virtual int set_acl(const RGWAccessControlPolicy& acl) override { acls = acl; return 0; } - virtual void set_atomic() override { - rados_ctx->set_atomic(state.obj); - StoreObject::set_atomic(); + virtual void set_atomic(bool atomic) override { + rados_ctx->set_atomic(state.obj, atomic); + StoreObject::set_atomic(atomic); } virtual void set_prefetch_data() override { rados_ctx->set_prefetch_data(state.obj); diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index aebbad773a9f..e764947ed945 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -633,7 +633,7 @@ int rgw_build_object_policies(const DoutPrefixProvider *dpp, rgw::sal::Driver* d return -ERR_NO_SUCH_BUCKET; } - s->object->set_atomic(); + s->object->set_atomic(true); if (prefetch_data) { s->object->set_prefetch_data(); } @@ -644,7 +644,7 @@ int rgw_build_object_policies(const DoutPrefixProvider *dpp, rgw::sal::Driver* d } static int rgw_iam_remove_objtags(const DoutPrefixProvider *dpp, req_state* s, rgw::sal::Object* object, bool has_existing_obj_tag, bool has_resource_tag) { - object->set_atomic(); + object->set_atomic(true); int op_ret = object->get_obj_attrs(s->yield, dpp); if (op_ret < 0) return op_ret; @@ -720,7 +720,7 @@ static int rgw_iam_add_tags_from_bl(req_state* s, bufferlist& bl, bool has_exist } static int rgw_iam_add_objtags(const DoutPrefixProvider *dpp, req_state* s, rgw::sal::Object* object, bool has_existing_obj_tag, bool has_resource_tag) { - object->set_atomic(); + object->set_atomic(true); int op_ret = object->get_obj_attrs(s->yield, dpp); if (op_ret < 0) return op_ret; @@ -918,12 +918,13 @@ void handle_replication_status_header( auto attr_iter = attrs.find(RGW_ATTR_OBJ_REPLICATION_STATUS); if (attr_iter != attrs.end() && attr_iter->second.to_str() == "PENDING") { if (s->object->is_sync_completed(dpp, y, obj_mtime)) { - s->object->set_atomic(); + s->object->set_atomic(true); rgw::sal::Attrs setattrs, rmattrs; bufferlist bl; bl.append("COMPLETED"); setattrs[RGW_ATTR_OBJ_REPLICATION_STATUS] = bl; int ret = s->object->set_obj_attrs(dpp, &setattrs, &rmattrs, y, 0); + s->object->set_atomic(false); if (ret < 0) { ldpp_dout(dpp, 0) << "ERROR: failed to set object replication status to COMPLETED ret=" << ret << dendl; return; @@ -1093,7 +1094,7 @@ void rgw_bucket_object_pre_exec(req_state *s) int RGWGetObj::verify_permission(optional_yield y) { - s->object->set_atomic(); + s->object->set_atomic(true); if (prefetch_data()) { s->object->set_prefetch_data(); @@ -1219,7 +1220,7 @@ void RGWGetObjTags::execute(optional_yield y) { rgw::sal::Attrs attrs; - s->object->set_atomic(); + s->object->set_atomic(true); op_ret = s->object->get_obj_attrs(y, this); @@ -1262,7 +1263,7 @@ void RGWPutObjTags::execute(optional_yield y) return; } - s->object->set_atomic(); + s->object->set_atomic(true); op_ret = s->object->modify_obj_attrs(RGW_ATTR_TAGS, tags_bl, y, this); if (op_ret == -ECANCELED){ op_ret = -ERR_TAG_CONFLICT; @@ -1806,7 +1807,7 @@ int RGWGetObj::read_user_manifest_part(rgw::sal::Bucket* bucket, ldpp_dout(this, 20) << "reading obj=" << part << " ofs=" << cur_ofs << " end=" << cur_end << dendl; - part->set_atomic(); + part->set_atomic(true); part->set_prefetch_data(); std::unique_ptr read_op = part->get_read_op(); @@ -4075,7 +4076,7 @@ int RGWPutObj::verify_permission(optional_yield y) auto cs_bucket = driver->get_bucket(copy_source_bucket_info); auto cs_object = cs_bucket->get_object(rgw_obj_key(copy_source_object_name, copy_source_version_id)); - cs_object->set_atomic(); + cs_object->set_atomic(true); cs_object->set_prefetch_data(); /* check source object permissions */ @@ -5298,7 +5299,7 @@ void RGWPutMetadataObject::execute(optional_yield y) { rgw::sal::Attrs attrs, rmattrs; - s->object->set_atomic(); + s->object->set_atomic(true); op_ret = get_params(y); if (op_ret < 0) { @@ -5371,7 +5372,7 @@ void RGWRestoreObj::execute(optional_yield y) return; } - s->object->set_atomic(); + s->object->set_atomic(true); int op_ret = s->object->get_obj_attrs(y, this); if (op_ret < 0) { ldpp_dout(this, 1) << "failed to fetch get_obj_attrs op ret = " << op_ret << dendl; @@ -5569,7 +5570,7 @@ void RGWDeleteObj::execute(optional_yield y) return; } - s->object->set_atomic(); + s->object->set_atomic(true); bool ver_restored = false; op_ret = s->object->swift_versioning_restore(s->owner, s->user->get_id(), @@ -5729,7 +5730,7 @@ int RGWCopyObj::verify_permission(optional_yield y) /* get buckets info (source and dest) */ if (s->local_source && source_zone.empty()) { - s->src_object->set_atomic(); + s->src_object->set_atomic(true); s->src_object->set_prefetch_data(); rgw_placement_rule src_placement; @@ -5781,7 +5782,7 @@ int RGWCopyObj::verify_permission(optional_yield y) RGWAccessControlPolicy dest_bucket_policy; - s->object->set_atomic(); + s->object->set_atomic(true); /* check dest bucket permissions */ op_ret = read_bucket_policy(this, driver, s, s->bucket->get_info(), @@ -5894,8 +5895,8 @@ void RGWCopyObj::execute(optional_yield y) s->object->gen_rand_obj_instance_name(); } - s->src_object->set_atomic(); - s->object->set_atomic(); + s->src_object->set_atomic(true); + s->object->set_atomic(true); encode_delete_at_attr(delete_at, attrs); @@ -6308,7 +6309,7 @@ void RGWPutACLs::execute(optional_yield y) map attrs; if (!rgw::sal::Object::empty(s->object.get())) { - s->object->set_atomic(); + s->object->set_atomic(true); //if instance is empty, we should modify the latest object op_ret = s->object->modify_obj_attrs(RGW_ATTR_ACL, bl, s->yield, this); } else { @@ -7509,7 +7510,7 @@ void RGWDeleteMultiObj::handle_individual_object(const rgw_obj_key& o, optional_ return; } - obj->set_atomic(); + obj->set_atomic(true); std::string version_id; // empty std::unique_ptr del_op = obj->get_delete_op(); @@ -7676,7 +7677,7 @@ bool RGWBulkDelete::Deleter::delete_single(const acct_path_t& path, optional_yie bucket_owner.id = bucket->get_info().owner; std::unique_ptr obj = bucket->get_object(path.obj_key); - obj->set_atomic(); + obj->set_atomic(true); std::unique_ptr del_op = obj->get_delete_op(); del_op->params.versioning_status = obj->get_bucket()->get_info().versioning_status(); @@ -8288,7 +8289,7 @@ ssize_t RGWBulkUploadOp::AlignedStreamGetter::get_exactly(const size_t want, int RGWGetAttrs::verify_permission(optional_yield y) { - s->object->set_atomic(); + s->object->set_atomic(true); auto [has_s3_existing_tag, has_s3_resource_tag] = rgw_check_policy_condition(this, s); if (has_s3_existing_tag || has_s3_resource_tag) @@ -8316,7 +8317,7 @@ void RGWGetAttrs::execute(optional_yield y) if (op_ret < 0) return; - s->object->set_atomic(); + s->object->set_atomic(true); op_ret = s->object->get_obj_attrs(s->yield, this); if (op_ret < 0) { @@ -8372,7 +8373,7 @@ void RGWRMAttrs::execute(optional_yield y) if (op_ret < 0) return; - s->object->set_atomic(); + s->object->set_atomic(true); op_ret = s->object->set_obj_attrs(this, nullptr, &attrs, y, rgw::sal::FLAG_LOG_OP); if (op_ret < 0) { diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index 232e43b8c292..a560a4759ed9 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -5852,7 +5852,7 @@ bool RGWHandler_REST_S3Website::web_dir() const { std::unique_ptr obj = s->bucket->get_object(rgw_obj_key(subdir_name)); - obj->set_atomic(); + obj->set_atomic(true); if (obj->load_obj_state(s, s->yield) < 0) { return false; diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index 52f3b4fb2b81..18b96aadd4cc 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -976,7 +976,7 @@ int RGWPutObj_ObjStore_SWIFT::update_slo_segment_size(rgw_slo_entry& entry) { std::unique_ptr slo_seg = bucket->get_object(rgw_obj_key(obj_name)); /* no prefetch */ - slo_seg->set_atomic(); + slo_seg->set_atomic(true); bool compressed; RGWCompressionInfo cs_info; @@ -2707,7 +2707,7 @@ bool RGWSwiftWebsiteHandler::is_web_dir() const std::unique_ptr obj = s->bucket->get_object(rgw_obj_key(std::move(subdir_name))); /* First, get attrset of the object we'll try to retrieve. */ - obj->set_atomic(); + obj->set_atomic(true); obj->set_prefetch_data(); if (obj->load_obj_state(s, s->yield, false)) { @@ -2735,7 +2735,7 @@ bool RGWSwiftWebsiteHandler::is_index_present(const std::string& index) const { std::unique_ptr obj = s->bucket->get_object(rgw_obj_key(index)); - obj->set_atomic(); + obj->set_atomic(true); obj->set_prefetch_data(); if (obj->load_obj_state(s, s->yield, false)) { diff --git a/src/rgw/rgw_sal.h b/src/rgw/rgw_sal.h index 44d61f1e2801..4f6d49ac004e 100644 --- a/src/rgw/rgw_sal.h +++ b/src/rgw/rgw_sal.h @@ -1201,7 +1201,7 @@ class Object { /** Set the ACL for this object */ virtual int set_acl(const RGWAccessControlPolicy& acl) = 0; /** Mark further operations on this object as being atomic */ - virtual void set_atomic() = 0; + virtual void set_atomic(bool atomic) = 0; /** Check if this object is atomic */ virtual bool is_atomic() = 0; /** Pre-fetch data when reading */ diff --git a/src/rgw/rgw_sal_dbstore.cc b/src/rgw/rgw_sal_dbstore.cc index d5e8b73d4dc5..fae28f8438f0 100644 --- a/src/rgw/rgw_sal_dbstore.cc +++ b/src/rgw/rgw_sal_dbstore.cc @@ -559,7 +559,7 @@ namespace rgw::sal { if (r < 0) { return r; } - set_atomic(); + set_atomic(true); state.attrset[attr_name] = attr_val; return set_obj_attrs(dpp, &state.attrset, nullptr, y, flags); } @@ -569,7 +569,7 @@ namespace rgw::sal { Attrs rmattr; bufferlist bl; - set_atomic(); + set_atomic(true); rmattr[attr_name] = bl; return set_obj_attrs(dpp, nullptr, &rmattr, y, rgw::sal::FLAG_LOG_OP); } diff --git a/src/rgw/rgw_sal_filter.h b/src/rgw/rgw_sal_filter.h index 9c37fd32fe0f..a3a759b9cd3d 100644 --- a/src/rgw/rgw_sal_filter.h +++ b/src/rgw/rgw_sal_filter.h @@ -781,7 +781,7 @@ public: const DoutPrefixProvider* dpp, optional_yield y) override; virtual RGWAccessControlPolicy& get_acl(void) override; virtual int set_acl(const RGWAccessControlPolicy& acl) override { return next->set_acl(acl); } - virtual void set_atomic() override { return next->set_atomic(); } + virtual void set_atomic(bool atomic) override { return next->set_atomic(atomic); } virtual bool is_atomic() override { return next->is_atomic(); } virtual void set_prefetch_data() override { return next->set_prefetch_data(); } virtual bool is_prefetch_data() override { return next->is_prefetch_data(); } diff --git a/src/rgw/rgw_sal_store.h b/src/rgw/rgw_sal_store.h index 2bad882c52a4..45ee69617884 100644 --- a/src/rgw/rgw_sal_store.h +++ b/src/rgw/rgw_sal_store.h @@ -293,7 +293,7 @@ class StoreObject : public Object { virtual ~StoreObject() = default; - virtual void set_atomic() override { state.is_atomic = true; } + virtual void set_atomic(bool atomic) override { state.is_atomic = atomic; } virtual bool is_atomic() override { return state.is_atomic; } virtual void set_prefetch_data() override { state.prefetch_data = true; } virtual bool is_prefetch_data() override { return state.prefetch_data; }