From 938729634d2ec7f1adffb453e02b29642354fedf Mon Sep 17 00:00:00 2001 From: Jane Zhu Date: Tue, 12 Dec 2023 13:57:00 -0500 Subject: [PATCH] rgw/lc: use flag and named constants instead of booleans as argument in interface Signed-off-by: Juan Zhu (cherry picked from commit 17ca50e70421cfe263784e8d65008145221e41c3) Conflicts: src/rgw/driver/d4n/rgw_sal_d4n.cc src/rgw/driver/d4n/rgw_sal_d4n.h src/rgw/driver/posix/rgw_sal_posix.cc src/rgw/driver/posix/rgw_sal_posix.h src/rgw/driver/rados/rgw_bucket.cc src/rgw/driver/rados/rgw_putobj_processor.cc src/rgw/driver/rados/rgw_putobj_processor.h src/rgw/driver/rados/rgw_rados.cc src/rgw/driver/rados/rgw_sal_rados.cc src/rgw/driver/rados/rgw_sal_rados.h src/rgw/rgw_data_access.cc src/rgw/rgw_lc.cc src/rgw/rgw_op.cc src/rgw/rgw_sal.h src/rgw/rgw_sal_daos.cc src/rgw/rgw_sal_daos.h src/rgw/rgw_sal_dbstore.cc src/rgw/rgw_sal_dbstore.h src/rgw/rgw_sal_filter.cc src/rgw/rgw_sal_filter.h src/rgw/rgw_sal_motr.cc src/rgw/rgw_sal_motr.h --- src/rgw/driver/rados/rgw_bucket.cc | 2 +- .../driver/rados/rgw_object_expirer_core.cc | 2 +- src/rgw/driver/rados/rgw_putobj_processor.cc | 14 ++++---- src/rgw/driver/rados/rgw_putobj_processor.h | 6 ++-- src/rgw/driver/rados/rgw_rados.cc | 8 ++--- src/rgw/driver/rados/rgw_sal_rados.cc | 36 ++++++++++--------- src/rgw/driver/rados/rgw_sal_rados.h | 14 ++++---- src/rgw/driver/rados/rgw_tools.cc | 3 +- src/rgw/rgw_file.cc | 2 +- src/rgw/rgw_lc.cc | 13 +++---- src/rgw/rgw_op.cc | 16 ++++----- src/rgw/rgw_sal.h | 15 ++++---- src/rgw/rgw_sal_daos.cc | 14 ++++---- src/rgw/rgw_sal_daos.h | 12 +++---- src/rgw/rgw_sal_dbstore.cc | 14 ++++---- src/rgw/rgw_sal_dbstore.h | 12 +++---- src/rgw/rgw_sal_filter.cc | 20 +++++------ src/rgw/rgw_sal_filter.h | 10 +++--- src/rgw/rgw_sal_motr.cc | 14 ++++---- src/rgw/rgw_sal_motr.h | 12 +++---- 20 files changed, 124 insertions(+), 115 deletions(-) diff --git a/src/rgw/driver/rados/rgw_bucket.cc b/src/rgw/driver/rados/rgw_bucket.cc index 32cd1ccf95166..d2b4a6b34b2dc 100644 --- a/src/rgw/driver/rados/rgw_bucket.cc +++ b/src/rgw/driver/rados/rgw_bucket.cc @@ -158,7 +158,7 @@ int rgw_remove_object(const DoutPrefixProvider *dpp, rgw::sal::Driver* driver, r std::unique_ptr object = bucket->get_object(key); - return object->delete_object(dpp, null_yield); + return object->delete_object(dpp, null_yield, rgw::sal::FLAG_LOG_OP); } static void set_err_msg(std::string *sink, std::string msg) diff --git a/src/rgw/driver/rados/rgw_object_expirer_core.cc b/src/rgw/driver/rados/rgw_object_expirer_core.cc index ec1bf3fb6dc99..d6beeeb06610b 100644 --- a/src/rgw/driver/rados/rgw_object_expirer_core.cc +++ b/src/rgw/driver/rados/rgw_object_expirer_core.cc @@ -219,7 +219,7 @@ int RGWObjectExpirer::garbage_single_object(const DoutPrefixProvider *dpp, objex std::unique_ptr obj = bucket->get_object(key); obj->set_atomic(); - ret = obj->delete_object(dpp, null_yield); + ret = obj->delete_object(dpp, null_yield, rgw::sal::FLAG_LOG_OP); return ret; } diff --git a/src/rgw/driver/rados/rgw_putobj_processor.cc b/src/rgw/driver/rados/rgw_putobj_processor.cc index 7fe8917e6e705..1721d9bf4bdea 100644 --- a/src/rgw/driver/rados/rgw_putobj_processor.cc +++ b/src/rgw/driver/rados/rgw_putobj_processor.cc @@ -340,7 +340,7 @@ int AtomicObjectProcessor::complete(size_t accounted_size, const std::string *user_data, rgw_zone_set *zones_trace, bool *pcanceled, optional_yield y, - bool log_op) + uint32_t flags) { int r = writer.drain(); if (r < 0) { @@ -377,7 +377,8 @@ int AtomicObjectProcessor::complete(size_t accounted_size, read_cloudtier_info_from_attrs(attrs, obj_op.meta.category, manifest); - r = obj_op.write_meta(dpp, actual_size, accounted_size, attrs, y, log_op); + r = obj_op.write_meta(dpp, actual_size, accounted_size, attrs, y, + flags & rgw::sal::FLAG_LOG_OP); if (r < 0) { if (r == -ETIMEDOUT) { // The head object write may eventually succeed, clear the set of objects for deletion. if it @@ -482,7 +483,7 @@ int MultipartObjectProcessor::complete(size_t accounted_size, const std::string *user_data, rgw_zone_set *zones_trace, bool *pcanceled, optional_yield y, - bool log_op) + uint32_t flags) { int r = writer.drain(); if (r < 0) { @@ -506,7 +507,8 @@ int MultipartObjectProcessor::complete(size_t accounted_size, obj_op.meta.zones_trace = zones_trace; obj_op.meta.modify_tail = true; - r = obj_op.write_meta(dpp, actual_size, accounted_size, attrs, y, log_op); + r = obj_op.write_meta(dpp, actual_size, accounted_size, attrs, y, + flags & rgw::sal::FLAG_LOG_OP); if (r < 0) return r; @@ -686,7 +688,7 @@ int AppendObjectProcessor::complete(size_t accounted_size, const string &etag, c ceph::real_time set_mtime, rgw::sal::Attrs& attrs, ceph::real_time delete_at, const char *if_match, const char *if_nomatch, const string *user_data, rgw_zone_set *zones_trace, bool *pcanceled, - optional_yield y, bool log_op) + optional_yield y, uint32_t flags) { int r = writer.drain(); if (r < 0) @@ -744,7 +746,7 @@ int AppendObjectProcessor::complete(size_t accounted_size, const string &etag, c } r = obj_op.write_meta(dpp, actual_size + cur_size, accounted_size + *cur_accounted_size, - attrs, y, log_op); + attrs, y, flags & rgw::sal::FLAG_LOG_OP); if (r < 0) { return r; } diff --git a/src/rgw/driver/rados/rgw_putobj_processor.h b/src/rgw/driver/rados/rgw_putobj_processor.h index b3defa85e055a..d52bcc5431b86 100644 --- a/src/rgw/driver/rados/rgw_putobj_processor.h +++ b/src/rgw/driver/rados/rgw_putobj_processor.h @@ -192,7 +192,7 @@ class AtomicObjectProcessor : public ManifestObjectProcessor { const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op = true) override; + uint32_t flags) override; }; @@ -240,7 +240,7 @@ class MultipartObjectProcessor : public ManifestObjectProcessor { const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op = true) override; + uint32_t flags) override; }; @@ -277,7 +277,7 @@ class MultipartObjectProcessor : public ManifestObjectProcessor { const char *if_match, const char *if_nomatch, const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op = true) override; + uint32_t flags) override; }; } // namespace putobj diff --git a/src/rgw/driver/rados/rgw_rados.cc b/src/rgw/driver/rados/rgw_rados.cc index a8543cb5d2d75..3f09cbc871a21 100644 --- a/src/rgw/driver/rados/rgw_rados.cc +++ b/src/rgw/driver/rados/rgw_rados.cc @@ -4201,7 +4201,7 @@ int RGWRados::fetch_remote_obj(RGWObjectCtx& obj_ctx, bool canceled = false; ret = processor.complete(accounted_size, etag, mtime, set_mtime, attrs, delete_at, nullptr, nullptr, nullptr, - zones_trace, &canceled, null_yield); + zones_trace, &canceled, null_yield, rgw::sal::FLAG_LOG_OP); if (ret < 0) { goto set_err_state; } @@ -4722,7 +4722,8 @@ int RGWRados::copy_obj_data(RGWObjectCtx& obj_ctx, } return processor.complete(accounted_size, etag, mtime, set_mtime, attrs, delete_at, - nullptr, nullptr, nullptr, nullptr, nullptr, y, log_op); + nullptr, nullptr, nullptr, nullptr, nullptr, y, + log_op ? rgw::sal::FLAG_LOG_OP : 0); } int RGWRados::transition_obj(RGWObjectCtx& obj_ctx, @@ -5566,7 +5567,7 @@ int RGWRados::delete_obj(const DoutPrefixProvider *dpp, del_op.params.expiration_time = expiration_time; del_op.params.zones_trace = zones_trace; - return del_op.delete_obj(null_yield, dpp, log_op); + return del_op.delete_obj(null_yield, dpp, log_op ? rgw::sal::FLAG_LOG_OP : 0); } int RGWRados::delete_raw_obj(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj) @@ -7335,7 +7336,6 @@ int RGWRados::bucket_index_link_olh(const DoutPrefixProvider *dpp, RGWBucketInfo cls_rgw_bucket_link_olh(op, key, olh_state.olh_tag, delete_marker, op_tag, meta, olh_epoch, unmod_since, high_precision_time, - svc.zone->need_to_log_data(), zones_trace); log_data_change, zones_trace); return rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, &op, null_yield); }); diff --git a/src/rgw/driver/rados/rgw_sal_rados.cc b/src/rgw/driver/rados/rgw_sal_rados.cc index 2c369604a6a31..723d1ee96177c 100644 --- a/src/rgw/driver/rados/rgw_sal_rados.cc +++ b/src/rgw/driver/rados/rgw_sal_rados.cc @@ -1002,7 +1002,7 @@ int RadosBucket::abort_multiparts(const DoutPrefixProvider* dpp, if (!uploads.empty()) { for (const auto& upload : uploads) { - ret = upload->abort(dpp, cct, true); + ret = upload->abort(dpp, cct); if (ret < 0) { // we're doing a best-effort; if something cannot be found, // log it and keep moving forward @@ -1973,9 +1973,10 @@ int RadosObject::transition(Bucket* bucket, uint64_t olh_epoch, const DoutPrefixProvider* dpp, optional_yield y, - bool log_op) + uint32_t flags) { - return store->getRados()->transition_obj(*rados_ctx, bucket->get_info(), get_obj(), placement_rule, mtime, olh_epoch, dpp, y, log_op); + return store->getRados()->transition_obj(*rados_ctx, bucket->get_info(), get_obj(), placement_rule, + mtime, olh_epoch, dpp, y, flags & FLAG_LOG_OP); } int RadosObject::transition_to_cloud(Bucket* bucket, @@ -2254,7 +2255,7 @@ RadosObject::RadosDeleteOp::RadosDeleteOp(RadosObject *_source) : parent_op(&op_target) { } -int RadosObject::RadosDeleteOp::delete_obj(const DoutPrefixProvider* dpp, optional_yield y, bool log_op) +int RadosObject::RadosDeleteOp::delete_obj(const DoutPrefixProvider* dpp, optional_yield y, uint32_t flags) { parent_op.params.bucket_owner = params.bucket_owner.get_id(); parent_op.params.versioning_status = params.versioning_status; @@ -2271,7 +2272,7 @@ int RadosObject::RadosDeleteOp::delete_obj(const DoutPrefixProvider* dpp, option parent_op.params.abortmp = params.abortmp; parent_op.params.parts_accounted_size = params.parts_accounted_size; - int ret = parent_op.delete_obj(y, dpp, log_op); + int ret = parent_op.delete_obj(y, dpp, flags & FLAG_LOG_OP); if (ret < 0) return ret; @@ -2283,15 +2284,16 @@ int RadosObject::RadosDeleteOp::delete_obj(const DoutPrefixProvider* dpp, option int RadosObject::delete_object(const DoutPrefixProvider* dpp, optional_yield y, - bool prevent_versioning) + uint32_t flags) { RGWRados::Object del_target(store->getRados(), bucket->get_info(), *rados_ctx, get_obj()); RGWRados::Object::Delete del_op(&del_target); del_op.params.bucket_owner = bucket->get_info().owner; - del_op.params.versioning_status = prevent_versioning ? 0 : bucket->get_info().versioning_status(); + del_op.params.versioning_status = (flags & FLAG_PREVENT_VERSIONING) + ? 0 : bucket->get_info().versioning_status(); - return del_op.delete_obj(y, dpp); + return del_op.delete_obj(y, dpp, flags & FLAG_LOG_OP); } int RadosObject::delete_obj_aio(const DoutPrefixProvider* dpp, RGWObjState* astate, @@ -2432,7 +2434,7 @@ int RadosMultipartUpload::cleanup_part_history(const DoutPrefixProvider* dpp, } -int RadosMultipartUpload::abort(const DoutPrefixProvider *dpp, CephContext *cct, bool log_op) +int RadosMultipartUpload::abort(const DoutPrefixProvider *dpp, CephContext *cct) { std::unique_ptr meta_obj = get_meta_obj(); meta_obj->set_in_extra_data(true); @@ -2460,7 +2462,7 @@ int RadosMultipartUpload::abort(const DoutPrefixProvider *dpp, CephContext *cct, std::unique_ptr obj = bucket->get_object( rgw_obj_key(obj_part->oid, std::string(), RGW_OBJ_NS_MULTIPART)); obj->set_hash_source(mp_obj.get_key()); - ret = obj->delete_object(dpp, null_yield, log_op); + ret = obj->delete_object(dpp, null_yield, 0); if (ret < 0 && ret != -ENOENT) return ret; } else { @@ -2510,7 +2512,7 @@ int RadosMultipartUpload::abort(const DoutPrefixProvider *dpp, CephContext *cct, del_op->params.parts_accounted_size = parts_accounted_size; // and also remove the metadata obj - ret = del_op->delete_obj(dpp, null_yield, log_op); + ret = del_op->delete_obj(dpp, null_yield, 0); if (ret < 0) { ldpp_dout(dpp, 20) << __func__ << ": del_op.delete_obj returned " << ret << dendl; @@ -3122,10 +3124,10 @@ int RadosAtomicWriter::complete(size_t accounted_size, const std::string& etag, const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) + uint32_t flags) { return processor.complete(accounted_size, etag, mtime, set_mtime, attrs, delete_at, - if_match, if_nomatch, user_data, zones_trace, canceled, y, log_op); + if_match, if_nomatch, user_data, zones_trace, canceled, y, flags); } int RadosAppendWriter::prepare(optional_yield y) @@ -3146,10 +3148,10 @@ int RadosAppendWriter::complete(size_t accounted_size, const std::string& etag, const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) + uint32_t flags) { return processor.complete(accounted_size, etag, mtime, set_mtime, attrs, delete_at, - if_match, if_nomatch, user_data, zones_trace, canceled, y, log_op); + if_match, if_nomatch, user_data, zones_trace, canceled, y, flags); } int RadosMultipartWriter::prepare(optional_yield y) @@ -3170,10 +3172,10 @@ int RadosMultipartWriter::complete(size_t accounted_size, const std::string& eta const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) + uint32_t flags) { return processor.complete(accounted_size, etag, mtime, set_mtime, attrs, delete_at, - if_match, if_nomatch, user_data, zones_trace, canceled, y, log_op); + if_match, if_nomatch, user_data, zones_trace, canceled, y, flags); } const std::string& RadosZoneGroup::get_endpoint() const diff --git a/src/rgw/driver/rados/rgw_sal_rados.h b/src/rgw/driver/rados/rgw_sal_rados.h index 5d83bb0432b22..299be16e64996 100644 --- a/src/rgw/driver/rados/rgw_sal_rados.h +++ b/src/rgw/driver/rados/rgw_sal_rados.h @@ -370,7 +370,7 @@ class RadosObject : public StoreObject { public: RadosDeleteOp(RadosObject* _source); - virtual int delete_obj(const DoutPrefixProvider* dpp, optional_yield y, bool log_op) override; + virtual int delete_obj(const DoutPrefixProvider* dpp, optional_yield y, uint32_t flags) override; }; RadosObject(RadosStore *_st, const rgw_obj_key& _k) @@ -402,7 +402,7 @@ class RadosObject : public StoreObject { rados_ctx->invalidate(get_obj()); } virtual int delete_object(const DoutPrefixProvider* dpp, - optional_yield y, bool prevent_versioning) override; + optional_yield y, uint32_t flags) override; virtual int delete_obj_aio(const DoutPrefixProvider* dpp, RGWObjState* astate, Completions* aio, bool keep_index_consistent, optional_yield y) override; virtual int copy_object(User* user, @@ -454,7 +454,7 @@ class RadosObject : public StoreObject { uint64_t olh_epoch, const DoutPrefixProvider* dpp, optional_yield y, - bool log_op) override; + uint32_t flags) override; virtual int transition_to_cloud(Bucket* bucket, rgw::sal::PlacementTier* tier, rgw_bucket_dir_entry& o, @@ -680,7 +680,7 @@ public: int num_parts, int marker, int* next_marker, bool* truncated, bool assume_unsorted = false) override; - virtual int abort(const DoutPrefixProvider* dpp, CephContext* cct, bool log_op) override; + virtual int abort(const DoutPrefixProvider* dpp, CephContext* cct) override; virtual int complete(const DoutPrefixProvider* dpp, optional_yield y, CephContext* cct, std::map& part_etags, @@ -824,7 +824,7 @@ public: const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) override; + uint32_t flags) override; }; class RadosAppendWriter : public StoreWriter { @@ -872,7 +872,7 @@ public: const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) override; + uint32_t flags) override; }; class RadosMultipartWriter : public StoreWriter { @@ -918,7 +918,7 @@ public: const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) override; + uint32_t flags) override; }; class RadosLuaManager : public StoreLuaManager { diff --git a/src/rgw/driver/rados/rgw_tools.cc b/src/rgw/driver/rados/rgw_tools.cc index 66651da5cc8ca..bc58c71ea56ef 100644 --- a/src/rgw/driver/rados/rgw_tools.cc +++ b/src/rgw/driver/rados/rgw_tools.cc @@ -422,7 +422,8 @@ int RGWDataAccess::Object::put(bufferlist& data, attrs, delete_at, nullptr, nullptr, puser_data, - nullptr, nullptr, y); + nullptr, nullptr, y, + rgw::sal::FLAG_LOG_OP); } void RGWDataAccess::Object::set_policy(const RGWAccessControlPolicy& policy) diff --git a/src/rgw/rgw_file.cc b/src/rgw/rgw_file.cc index 1eff7a7d44722..4d2df63c66207 100644 --- a/src/rgw/rgw_file.cc +++ b/src/rgw/rgw_file.cc @@ -2012,7 +2012,7 @@ namespace rgw { op_ret = processor->complete(state->obj_size, etag, &mtime, real_time(), attrs, (delete_at ? *delete_at : real_time()), if_match, if_nomatch, nullptr, nullptr, nullptr, - state->yield, true); + state->yield, rgw::sal::FLAG_LOG_OP); if (op_ret != 0) { /* revert attr updates */ rgw_fh->set_mtime(omtime); diff --git a/src/rgw/rgw_lc.cc b/src/rgw/rgw_lc.cc index 8350debd851d9..a1b0ca7b3b644 100644 --- a/src/rgw/rgw_lc.cc +++ b/src/rgw/rgw_lc.cc @@ -602,8 +602,9 @@ static int remove_expired_obj( return ret; } - bool log_op = !remove_indeed || !zonegroup_lc_check(dpp, oc.driver->get_zone()); - ret = del_op->delete_obj(dpp, null_yield, log_op); + uint32_t flags = (!remove_indeed || !zonegroup_lc_check(dpp, oc.driver->get_zone())) + ? rgw::sal::FLAG_LOG_OP : 0; + ret = del_op->delete_obj(dpp, null_yield, flags); if (ret < 0) { ldpp_dout(dpp, 1) << "ERROR: publishing notification failed, with error: " << ret << dendl; @@ -868,8 +869,7 @@ int RGWLC::handle_multipart_expiration(rgw::sal::Bucket* target, rgw_obj_key key(obj.key); std::unique_ptr mpu = target->get_multipart_upload(key.name); - bool log_op = !zonegroup_lc_check(wk->get_lc(), driver->get_zone()); - int ret = mpu->abort(this, cct, log_op); + int ret = mpu->abort(this, cct); if (ret == 0) { if (perfcounter) { perfcounter->inc(l_rgw_lc_abort_mpu, 1); @@ -1379,9 +1379,10 @@ public: return -EINVAL; } - bool log_op = !zonegroup_lc_check(oc.dpp, oc.driver->get_zone()); + uint32_t flags = !zonegroup_lc_check(oc.dpp, oc.driver->get_zone()) + ? rgw::sal::FLAG_LOG_OP : 0; int r = oc.obj->transition(oc.bucket, target_placement, o.meta.mtime, - o.versioned_epoch, oc.dpp, null_yield, log_op); + o.versioned_epoch, oc.dpp, null_yield, flags); if (r < 0) { ldpp_dout(oc.dpp, 0) << "ERROR: failed to transition obj " << oc.bucket << ":" << o.key diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index ecfa18e10c7b8..4d38f32e611b8 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -4361,7 +4361,7 @@ void RGWPutObj::execute(optional_yield y) op_ret = processor->complete(s->obj_size, etag, &mtime, real_time(), attrs, (delete_at ? *delete_at : real_time()), if_match, if_nomatch, (user_data.empty() ? nullptr : &user_data), nullptr, nullptr, - s->yield, true); + s->yield, rgw::sal::FLAG_LOG_OP); tracepoint(rgw_op, processor_complete_exit, s->req_id.c_str()); /* produce torrent */ @@ -4639,7 +4639,7 @@ void RGWPostObj::execute(optional_yield y) op_ret = processor->complete(s->obj_size, etag, nullptr, real_time(), attrs, (delete_at ? *delete_at : real_time()), nullptr, nullptr, nullptr, nullptr, nullptr, - s->yield, true); + s->yield, rgw::sal::FLAG_LOG_OP); if (op_ret < 0) { return; } @@ -5202,7 +5202,7 @@ void RGWDeleteObj::execute(optional_yield y) del_op->params.olh_epoch = epoch; del_op->params.marker_version_id = version_id; - op_ret = del_op->delete_obj(this, y, true); + op_ret = del_op->delete_obj(this, y, rgw::sal::FLAG_LOG_OP); if (op_ret >= 0) { delete_marker = del_op->result.delete_marker; version_id = del_op->result.version_id; @@ -6572,7 +6572,7 @@ void RGWCompleteMultipart::execute(optional_yield y) // remove the upload meta object ; the meta object is not versioned // when the bucket is, as that would add an unneeded delete marker - int r = meta_obj->delete_object(this, y, true /* prevent versioning */); + int r = meta_obj->delete_object(this, y, rgw::sal::FLAG_PREVENT_VERSIONING | rgw::sal::FLAG_LOG_OP); if (r >= 0) { /* serializer's exclusive lock is released */ serializer->clear_locked(); @@ -6733,7 +6733,7 @@ void RGWAbortMultipart::execute(optional_yield y) } multipart_trace = tracing::rgw::tracer.add_span(name(), trace_ctx); - op_ret = upload->abort(this, s->cct, true); + op_ret = upload->abort(this, s->cct); } int RGWListMultipart::verify_permission(optional_yield y) @@ -7099,7 +7099,7 @@ void RGWDeleteMultiObj::handle_individual_object(const rgw_obj_key& o, optional_ del_op->params.bucket_owner = s->bucket_owner; del_op->params.marker_version_id = version_id; - op_ret = del_op->delete_obj(this, y, true); + op_ret = del_op->delete_obj(this, y, rgw::sal::FLAG_LOG_OP); if (op_ret == -ENOENT) { op_ret = 0; } @@ -7275,7 +7275,7 @@ bool RGWBulkDelete::Deleter::delete_single(const acct_path_t& path, optional_yie del_op->params.obj_owner = bowner; del_op->params.bucket_owner = bucket_owner; - ret = del_op->delete_obj(dpp, y, true); + ret = del_op->delete_obj(dpp, y, rgw::sal::FLAG_LOG_OP); if (ret < 0) { goto delop_fail; } @@ -7765,7 +7765,7 @@ int RGWBulkUploadOp::handle_file(const std::string_view path, op_ret = processor->complete(size, etag, nullptr, ceph::real_time(), attrs, ceph::real_time() /* delete_at */, nullptr, nullptr, nullptr, nullptr, nullptr, - s->yield, true); + s->yield, rgw::sal::FLAG_LOG_OP); if (op_ret < 0) { ldpp_dout(this, 20) << "processor::complete returned op_ret=" << op_ret << dendl; } diff --git a/src/rgw/rgw_sal.h b/src/rgw/rgw_sal.h index fba422e618f79..50fe30c6bd815 100644 --- a/src/rgw/rgw_sal.h +++ b/src/rgw/rgw_sal.h @@ -210,6 +210,9 @@ enum AttrsMod { ATTRSMOD_MERGE = 2 }; +static constexpr uint32_t FLAG_LOG_OP = 0x0001; +static constexpr uint32_t FLAG_PREVENT_VERSIONING = 0x0002; + // a simple streaming data processing abstraction /** * @brief A simple streaming data processing abstraction @@ -244,7 +247,7 @@ class ObjectProcessor : public DataProcessor { const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) = 0; + uint32_t flags) = 0; }; /** Base class for AIO completions */ @@ -948,7 +951,7 @@ class Object { virtual ~DeleteOp() = default; /** Delete the object */ - virtual int delete_obj(const DoutPrefixProvider* dpp, optional_yield y, bool log_op) = 0; + virtual int delete_obj(const DoutPrefixProvider* dpp, optional_yield y, uint32_t flags) = 0; }; Object() {} @@ -957,7 +960,7 @@ class Object { /** Shortcut synchronous delete call for common deletes */ virtual int delete_object(const DoutPrefixProvider* dpp, optional_yield y, - bool prevent_versioning = false) = 0; + uint32_t flags) = 0; /** Asynchronous delete call */ virtual int delete_obj_aio(const DoutPrefixProvider* dpp, RGWObjState* astate, Completions* aio, bool keep_index_consistent, optional_yield y) = 0; @@ -1027,7 +1030,7 @@ class Object { uint64_t olh_epoch, const DoutPrefixProvider* dpp, optional_yield y, - bool log_op) = 0; + uint32_t flags) = 0; /** Move an object to the cloud */ virtual int transition_to_cloud(Bucket* bucket, rgw::sal::PlacementTier* tier, @@ -1209,7 +1212,7 @@ public: int* next_marker, bool* truncated, bool assume_unsorted = false) = 0; /** Abort this upload */ - virtual int abort(const DoutPrefixProvider* dpp, CephContext* cct, bool log_op) = 0; + virtual int abort(const DoutPrefixProvider* dpp, CephContext* cct) = 0; /** Complete this upload, making it available as a normal object */ virtual int complete(const DoutPrefixProvider* dpp, optional_yield y, CephContext* cct, @@ -1439,7 +1442,7 @@ public: const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) = 0; + uint32_t flags) = 0; }; diff --git a/src/rgw/rgw_sal_daos.cc b/src/rgw/rgw_sal_daos.cc index bdd1638080c12..2647e18823a13 100644 --- a/src/rgw/rgw_sal_daos.cc +++ b/src/rgw/rgw_sal_daos.cc @@ -1053,7 +1053,7 @@ int DaosObject::transition(Bucket* bucket, const rgw_placement_rule& placement_rule, const real_time& mtime, uint64_t olh_epoch, const DoutPrefixProvider* dpp, optional_yield y, - bool log_op) { + uint32_t flags) { return DAOS_NOT_IMPLEMENTED_LOG(dpp); } @@ -1203,7 +1203,7 @@ DaosObject::DaosDeleteOp::DaosDeleteOp(DaosObject* _source) : source(_source) {} // 3. Handle empty directories // 4. Fail when file doesn't exist int DaosObject::DaosDeleteOp::delete_obj(const DoutPrefixProvider* dpp, - optional_yield y, bool log_op) { + optional_yield y, uint32_t flags) { ldpp_dout(dpp, 20) << "DaosDeleteOp::delete_obj " << source->get_key().get_oid() << " from " << source->get_bucket()->get_name() << dendl; @@ -1232,13 +1232,13 @@ int DaosObject::DaosDeleteOp::delete_obj(const DoutPrefixProvider* dpp, } int DaosObject::delete_object(const DoutPrefixProvider* dpp, optional_yield y, - bool prevent_versioning) { + uint32_t flags) { ldpp_dout(dpp, 20) << "DEBUG: delete_object" << dendl; DaosObject::DaosDeleteOp del_op(this); del_op.params.bucket_owner = bucket->get_info().owner; del_op.params.versioning_status = bucket->get_info().versioning_status(); - return del_op.delete_obj(dpp, y); + return del_op.delete_obj(dpp, y, flags); } int DaosObject::delete_obj_aio(const DoutPrefixProvider* dpp, @@ -1549,7 +1549,7 @@ int DaosAtomicWriter::complete( ceph::real_time set_mtime, std::map& attrs, ceph::real_time delete_at, const char* if_match, const char* if_nomatch, const std::string* user_data, rgw_zone_set* zones_trace, bool* canceled, - optional_yield y, bool log_op) { + optional_yield y, uint32_t flags) { ldpp_dout(dpp, 20) << "DEBUG: complete" << dendl; bufferlist bl; rgw_bucket_dir_entry ent; @@ -1606,7 +1606,7 @@ int DaosAtomicWriter::complete( } int DaosMultipartUpload::abort(const DoutPrefixProvider* dpp, - CephContext* cct, optional_yield y, bool log_op) { + CephContext* cct) { // Remove upload from bucket multipart index ldpp_dout(dpp, 20) << "DEBUG: abort" << dendl; return ds3_upload_remove(bucket->get_name().c_str(), get_upload_id().c_str(), @@ -2073,7 +2073,7 @@ int DaosMultipartWriter::complete( ceph::real_time set_mtime, std::map& attrs, ceph::real_time delete_at, const char* if_match, const char* if_nomatch, const std::string* user_data, rgw_zone_set* zones_trace, bool* canceled, - optional_yield y, bool log_op) { + optional_yield y, uint32_t flags) { ldpp_dout(dpp, 20) << "DaosMultipartWriter::complete(): enter part=" << part_num_str << dendl; diff --git a/src/rgw/rgw_sal_daos.h b/src/rgw/rgw_sal_daos.h index 3500d9f47cd1c..af3063a6073d4 100644 --- a/src/rgw/rgw_sal_daos.h +++ b/src/rgw/rgw_sal_daos.h @@ -589,7 +589,7 @@ class DaosObject : public StoreObject { DaosDeleteOp(DaosObject* _source); virtual int delete_obj(const DoutPrefixProvider* dpp, - optional_yield y, bool log_op) override; + optional_yield y, uint32_t flags) override; }; ds3_obj_t* ds3o = nullptr; @@ -606,7 +606,7 @@ class DaosObject : public StoreObject { virtual ~DaosObject(); virtual int delete_object(const DoutPrefixProvider* dpp, optional_yield y, - bool prevent_versioning = false) override; + uint32_t flags) override; virtual int delete_obj_aio(const DoutPrefixProvider* dpp, RGWObjState* astate, Completions* aio, bool keep_index_consistent, optional_yield y) override; @@ -653,7 +653,7 @@ class DaosObject : public StoreObject { const real_time& mtime, uint64_t olh_epoch, const DoutPrefixProvider* dpp, optional_yield y, - bool log_op) override; + uint32_t flags) override; virtual int transition_to_cloud(Bucket* bucket, rgw::sal::PlacementTier* tier, rgw_bucket_dir_entry& o, std::set& cloud_targets, @@ -765,7 +765,7 @@ class DaosAtomicWriter : public StoreWriter { const char* if_nomatch, const std::string* user_data, rgw_zone_set* zones_trace, bool* canceled, optional_yield y, - bool log_op) override; + uint32_t flags) override; }; class DaosMultipartWriter : public StoreWriter { @@ -811,7 +811,7 @@ class DaosMultipartWriter : public StoreWriter { const char* if_nomatch, const std::string* user_data, rgw_zone_set* zones_trace, bool* canceled, optional_yield y, - bool log_op) override; + uint32_t flags) override; const std::string& get_bucket_name(); }; @@ -867,7 +867,7 @@ class DaosMultipartUpload : public StoreMultipartUpload { int num_parts, int marker, int* next_marker, bool* truncated, bool assume_unsorted = false) override; - virtual int abort(const DoutPrefixProvider* dpp, CephContext* cct, optional_yield y, bool log_op) override; + virtual int abort(const DoutPrefixProvider* dpp, CephContext* cct) override; virtual int complete(const DoutPrefixProvider* dpp, optional_yield y, CephContext* cct, std::map& part_etags, std::list& remove_objs, diff --git a/src/rgw/rgw_sal_dbstore.cc b/src/rgw/rgw_sal_dbstore.cc index 5748979c15ae2..a6eca697538f2 100644 --- a/src/rgw/rgw_sal_dbstore.cc +++ b/src/rgw/rgw_sal_dbstore.cc @@ -735,7 +735,7 @@ namespace rgw::sal { uint64_t olh_epoch, const DoutPrefixProvider* dpp, optional_yield y, - bool log_op) + uint32_t flags) { DB::Object op_target(store->getDB(), get_bucket()->get_info(), get_obj()); @@ -816,7 +816,7 @@ namespace rgw::sal { parent_op(&op_target) { } - int DBObject::DBDeleteOp::delete_obj(const DoutPrefixProvider* dpp, optional_yield y, bool log_op) + int DBObject::DBDeleteOp::delete_obj(const DoutPrefixProvider* dpp, optional_yield y, uint32_t flags) { parent_op.params.bucket_owner = params.bucket_owner.get_id(); parent_op.params.versioning_status = params.versioning_status; @@ -843,7 +843,7 @@ namespace rgw::sal { return ret; } - int DBObject::delete_object(const DoutPrefixProvider* dpp, optional_yield y, bool prevent_versioning) + int DBObject::delete_object(const DoutPrefixProvider* dpp, optional_yield y, uint32_t flags) { DB::Object del_target(store->getDB(), bucket->get_info(), get_obj()); DB::Object::Delete del_op(&del_target); @@ -910,7 +910,7 @@ namespace rgw::sal { return 0; } - int DBMultipartUpload::abort(const DoutPrefixProvider *dpp, CephContext *cct, bool log_op) + int DBMultipartUpload::abort(const DoutPrefixProvider *dpp, CephContext *cct) { std::unique_ptr meta_obj = get_meta_obj(); meta_obj->set_in_extra_data(true); @@ -924,7 +924,7 @@ namespace rgw::sal { // Since the data objects are associated with meta obj till // MultipartUpload::Complete() is done, removing the metadata obj // should remove all the uploads so far. - ret = del_op->delete_obj(dpp, null_yield, log_op); + ret = del_op->delete_obj(dpp, null_yield, 0); if (ret < 0) { ldpp_dout(dpp, 20) << __func__ << ": del_op.delete_obj returned " << ret << dendl; @@ -1352,7 +1352,7 @@ namespace rgw::sal { const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) + uint32_t flags) { int ret = 0; /* XXX: same as AtomicWriter..consolidate code */ @@ -1511,7 +1511,7 @@ namespace rgw::sal { const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) + uint32_t flags) { parent_op.meta.mtime = mtime; parent_op.meta.delete_at = delete_at; diff --git a/src/rgw/rgw_sal_dbstore.h b/src/rgw/rgw_sal_dbstore.h index 1595b1532310a..2d65a7f3fee11 100644 --- a/src/rgw/rgw_sal_dbstore.h +++ b/src/rgw/rgw_sal_dbstore.h @@ -505,7 +505,7 @@ protected: int num_parts, int marker, int* next_marker, bool* truncated, bool assume_unsorted = false) override; - virtual int abort(const DoutPrefixProvider* dpp, CephContext* cct, bool log_op) override; + virtual int abort(const DoutPrefixProvider* dpp, CephContext* cct) override; virtual int complete(const DoutPrefixProvider* dpp, optional_yield y, CephContext* cct, std::map& part_etags, @@ -567,7 +567,7 @@ protected: public: DBDeleteOp(DBObject* _source); - virtual int delete_obj(const DoutPrefixProvider* dpp, optional_yield y, bool log_op) override; + virtual int delete_obj(const DoutPrefixProvider* dpp, optional_yield y, uint32_t flags) override; }; DBObject() = default; @@ -586,7 +586,7 @@ protected: virtual int delete_object(const DoutPrefixProvider* dpp, optional_yield y, - bool prevent_versioning = false) override; + uint32_t flags) override; virtual int delete_obj_aio(const DoutPrefixProvider* dpp, RGWObjState* astate, Completions* aio, bool keep_index_consistent, optional_yield y) override; virtual int copy_object(User* user, @@ -625,7 +625,7 @@ protected: uint64_t olh_epoch, const DoutPrefixProvider* dpp, optional_yield y, - bool log_op) override; + uint32_t flags) override; virtual bool placement_rules_match(rgw_placement_rule& r1, rgw_placement_rule& r2) override; virtual int dump_obj_layout(const DoutPrefixProvider *dpp, optional_yield y, Formatter* f) override; @@ -707,7 +707,7 @@ protected: const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) override; + uint32_t flags) override; }; class DBMultipartWriter : public StoreWriter { @@ -756,7 +756,7 @@ public: const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) override; + uint32_t flags) override; }; class DBStore : public StoreDriver { diff --git a/src/rgw/rgw_sal_filter.cc b/src/rgw/rgw_sal_filter.cc index 287e2a1a5a617..8cf9db1111207 100644 --- a/src/rgw/rgw_sal_filter.cc +++ b/src/rgw/rgw_sal_filter.cc @@ -852,9 +852,9 @@ int FilterBucket::abort_multiparts(const DoutPrefixProvider* dpp, CephContext* c int FilterObject::delete_object(const DoutPrefixProvider* dpp, optional_yield y, - bool prevent_versioning) + uint32_t flags) { - return next->delete_object(dpp, y, prevent_versioning); + return next->delete_object(dpp, y, flags); } int FilterObject::delete_obj_aio(const DoutPrefixProvider* dpp, RGWObjState* astate, @@ -961,10 +961,10 @@ int FilterObject::transition(Bucket* bucket, uint64_t olh_epoch, const DoutPrefixProvider* dpp, optional_yield y, - bool log_op) + uint32_t flags) { return next->transition(nextBucket(bucket), placement_rule, mtime, olh_epoch, - dpp, y, log_op); + dpp, y, flags); } int FilterObject::transition_to_cloud(Bucket* bucket, @@ -1092,11 +1092,11 @@ int FilterObject::FilterReadOp::iterate(const DoutPrefixProvider* dpp, int64_t o } int FilterObject::FilterDeleteOp::delete_obj(const DoutPrefixProvider* dpp, - optional_yield y, bool log_op) + optional_yield y, uint32_t flags) { /* Copy params into next */ next->params = params; - int ret = next->delete_obj(dpp, y, log_op); + int ret = next->delete_obj(dpp, y, flags); /* Copy result back */ result = next->result; return ret; @@ -1137,9 +1137,9 @@ int FilterMultipartUpload::list_parts(const DoutPrefixProvider *dpp, CephContext return 0; } -int FilterMultipartUpload::abort(const DoutPrefixProvider *dpp, CephContext *cct, bool log_op) +int FilterMultipartUpload::abort(const DoutPrefixProvider *dpp, CephContext *cct) { - return next->abort(dpp, cct, log_op); + return next->abort(dpp, cct); } int FilterMultipartUpload::complete(const DoutPrefixProvider *dpp, @@ -1315,11 +1315,11 @@ int FilterWriter::complete(size_t accounted_size, const std::string& etag, const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) + uint32_t flags) { return next->complete(accounted_size, etag, mtime, set_mtime, attrs, delete_at, if_match, if_nomatch, user_data, zones_trace, - canceled, y, log_op); + canceled, y, flags); } int FilterLuaManager::get_script(const DoutPrefixProvider* dpp, optional_yield y, diff --git a/src/rgw/rgw_sal_filter.h b/src/rgw/rgw_sal_filter.h index 9336084a4e07f..fdcc9c6f1c5c7 100644 --- a/src/rgw/rgw_sal_filter.h +++ b/src/rgw/rgw_sal_filter.h @@ -575,7 +575,7 @@ public: FilterDeleteOp(std::unique_ptr _next) : next(std::move(_next)) {} virtual ~FilterDeleteOp() = default; - virtual int delete_obj(const DoutPrefixProvider* dpp, optional_yield y, bool log_op) override; + virtual int delete_obj(const DoutPrefixProvider* dpp, optional_yield y, uint32_t flags) override; }; FilterObject(std::unique_ptr _next) : next(std::move(_next)) {} @@ -589,7 +589,7 @@ public: virtual int delete_object(const DoutPrefixProvider* dpp, optional_yield y, - bool prevent_versioning = false) override; + uint32_t flags) override; virtual int delete_obj_aio(const DoutPrefixProvider* dpp, RGWObjState* astate, Completions* aio, bool keep_index_consistent, optional_yield y) override; @@ -640,7 +640,7 @@ public: uint64_t olh_epoch, const DoutPrefixProvider* dpp, optional_yield y, - bool log_op) override; + uint32_t flags) override; virtual int transition_to_cloud(Bucket* bucket, rgw::sal::PlacementTier* tier, rgw_bucket_dir_entry& o, @@ -756,7 +756,7 @@ public: int num_parts, int marker, int* next_marker, bool* truncated, bool assume_unsorted = false) override; - virtual int abort(const DoutPrefixProvider* dpp, CephContext* cct, bool log_op) override; + virtual int abort(const DoutPrefixProvider* dpp, CephContext* cct) override; virtual int complete(const DoutPrefixProvider* dpp, optional_yield y, CephContext* cct, std::map& part_etags, @@ -901,7 +901,7 @@ public: const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) override; + uint32_t flags) override; }; class FilterLuaManager : public LuaManager { diff --git a/src/rgw/rgw_sal_motr.cc b/src/rgw/rgw_sal_motr.cc index 379ec2016c5cc..a7a205e8e80e1 100644 --- a/src/rgw/rgw_sal_motr.cc +++ b/src/rgw/rgw_sal_motr.cc @@ -1337,7 +1337,7 @@ int MotrObject::transition(Bucket* bucket, uint64_t olh_epoch, const DoutPrefixProvider* dpp, optional_yield y, - bool log_op) + uint32_t flags) { return 0; } @@ -1499,7 +1499,7 @@ MotrObject::MotrDeleteOp::MotrDeleteOp(MotrObject *_source) : // Delete::delete_obj() in rgw_rados.cc shows how rados backend process the // params. // 2. Delete an object when its versioning is turned on. -int MotrObject::MotrDeleteOp::delete_obj(const DoutPrefixProvider* dpp, optional_yield y, bool log_op) +int MotrObject::MotrDeleteOp::delete_obj(const DoutPrefixProvider* dpp, optional_yield y, uint32_t flags) { ldpp_dout(dpp, 20) << "delete " << source->get_key().get_oid() << " from " << source->get_bucket()->get_name() << dendl; @@ -1543,13 +1543,13 @@ int MotrObject::MotrDeleteOp::delete_obj(const DoutPrefixProvider* dpp, optional return 0; } -int MotrObject::delete_object(const DoutPrefixProvider* dpp, optional_yield y, bool prevent_versioning) +int MotrObject::delete_object(const DoutPrefixProvider* dpp, optional_yield y, uint32_t flags) { MotrObject::MotrDeleteOp del_op(this); del_op.params.bucket_owner = bucket->get_info().owner; del_op.params.versioning_status = bucket->get_info().versioning_status(); - return del_op.delete_obj(dpp, y); + return del_op.delete_obj(dpp, y, flags); } int MotrObject::delete_obj_aio(const DoutPrefixProvider* dpp, RGWObjState* astate, @@ -2376,7 +2376,7 @@ int MotrAtomicWriter::complete(size_t accounted_size, const std::string& etag, const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) + uint32_t flags) { int rc = 0; @@ -2515,7 +2515,7 @@ int MotrMultipartUpload::delete_parts(const DoutPrefixProvider *dpp) return store->delete_motr_idx_by_name(obj_part_iname); } -int MotrMultipartUpload::abort(const DoutPrefixProvider *dpp, CephContext *cct, bool log_op) +int MotrMultipartUpload::abort(const DoutPrefixProvider *dpp, CephContext *cct) { int rc; // Check if multipart upload exists @@ -3034,7 +3034,7 @@ int MotrMultipartWriter::complete(size_t accounted_size, const std::string& etag const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) + uint32_t flags) { // Should the dir entry(object metadata) be updated? For example // mtime. diff --git a/src/rgw/rgw_sal_motr.h b/src/rgw/rgw_sal_motr.h index b92b724839a8e..c09c95ede0bca 100644 --- a/src/rgw/rgw_sal_motr.h +++ b/src/rgw/rgw_sal_motr.h @@ -660,7 +660,7 @@ class MotrObject : public StoreObject { public: MotrDeleteOp(MotrObject* _source); - virtual int delete_obj(const DoutPrefixProvider* dpp, optional_yield y, bool log_op) override; + virtual int delete_obj(const DoutPrefixProvider* dpp, optional_yield y, uint32_t flags) override; }; MotrObject() = default; @@ -676,7 +676,7 @@ class MotrObject : public StoreObject { virtual int delete_object(const DoutPrefixProvider* dpp, optional_yield y, - bool prevent_versioning = false) override; + uint32_t flags) override; virtual int delete_obj_aio(const DoutPrefixProvider* dpp, RGWObjState* astate, Completions* aio, bool keep_index_consistent, optional_yield y) override; virtual int copy_object(User* user, @@ -713,7 +713,7 @@ class MotrObject : public StoreObject { uint64_t olh_epoch, const DoutPrefixProvider* dpp, optional_yield y, - bool log_op) override; + uint32_t flags) override; virtual bool placement_rules_match(rgw_placement_rule& r1, rgw_placement_rule& r2) override; virtual int dump_obj_layout(const DoutPrefixProvider *dpp, optional_yield y, Formatter* f) override; @@ -821,7 +821,7 @@ class MotrAtomicWriter : public StoreWriter { const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) override; + uint32_t flags) override; unsigned populate_bvec(unsigned len, bufferlist::iterator &bi); void cleanup(); @@ -869,7 +869,7 @@ public: const std::string *user_data, rgw_zone_set *zones_trace, bool *canceled, optional_yield y, - bool log_op) override; + uint32_t flags) override; }; // The implementation of multipart upload in POC roughly follows the @@ -944,7 +944,7 @@ public: int num_parts, int marker, int* next_marker, bool* truncated, bool assume_unsorted = false) override; - virtual int abort(const DoutPrefixProvider* dpp, CephContext* cct, bool log_op) override; + virtual int abort(const DoutPrefixProvider* dpp, CephContext* cct) override; virtual int complete(const DoutPrefixProvider* dpp, optional_yield y, CephContext* cct, std::map& part_etags, -- 2.39.5