std::unique_ptr<rgw::sal::Object> 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)
std::unique_ptr<rgw::sal::Object> 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;
}
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) {
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
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) {
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;
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)
}
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;
}
const std::string *user_data,
rgw_zone_set *zones_trace, bool *canceled,
optional_yield y,
- bool log_op = true) override;
+ uint32_t flags) override;
};
const std::string *user_data,
rgw_zone_set *zones_trace, bool *canceled,
optional_yield y,
- bool log_op = true) override;
+ uint32_t flags) override;
};
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
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;
}
}
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,
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)
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);
});
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
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,
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;
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;
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,
}
-int RadosMultipartUpload::abort(const DoutPrefixProvider *dpp, CephContext *cct, bool log_op)
+int RadosMultipartUpload::abort(const DoutPrefixProvider *dpp, CephContext *cct)
{
std::unique_ptr<rgw::sal::Object> meta_obj = get_meta_obj();
meta_obj->set_in_extra_data(true);
std::unique_ptr<rgw::sal::Object> 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 {
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;
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)
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)
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
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)
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,
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,
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<int, std::string>& part_etags,
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 {
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 {
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 {
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)
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);
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;
rgw_obj_key key(obj.key);
std::unique_ptr<rgw::sal::MultipartUpload> 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);
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
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 */
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;
}
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;
// 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();
}
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)
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;
}
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;
}
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;
}
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
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 */
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() {}
/** 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;
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,
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,
const std::string *user_data,
rgw_zone_set *zones_trace, bool *canceled,
optional_yield y,
- bool log_op) = 0;
+ uint32_t flags) = 0;
};
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);
}
// 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;
}
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,
ceph::real_time set_mtime, std::map<std::string, bufferlist>& 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;
}
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(),
ceph::real_time set_mtime, std::map<std::string, bufferlist>& 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;
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;
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;
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<std::string>& cloud_targets,
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 {
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();
};
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<int, std::string>& part_etags,
std::list<rgw_obj_index_key>& remove_objs,
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());
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;
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);
return 0;
}
- int DBMultipartUpload::abort(const DoutPrefixProvider *dpp, CephContext *cct, bool log_op)
+ int DBMultipartUpload::abort(const DoutPrefixProvider *dpp, CephContext *cct)
{
std::unique_ptr<rgw::sal::Object> meta_obj = get_meta_obj();
meta_obj->set_in_extra_data(true);
// 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;
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 */
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;
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<int, std::string>& part_etags,
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;
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,
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;
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 {
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 {
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,
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,
}
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;
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,
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,
FilterDeleteOp(std::unique_ptr<DeleteOp> _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<Object> _next) : next(std::move(_next)) {}
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;
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,
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<int, std::string>& part_etags,
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 {
uint64_t olh_epoch,
const DoutPrefixProvider* dpp,
optional_yield y,
- bool log_op)
+ uint32_t flags)
{
return 0;
}
// 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;
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,
const std::string *user_data,
rgw_zone_set *zones_trace, bool *canceled,
optional_yield y,
- bool log_op)
+ uint32_t flags)
{
int rc = 0;
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
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.
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;
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,
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;
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();
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
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<int, std::string>& part_etags,