}
map<string, bufferlist> attrs;
- ret = obj->put(bl, attrs);
+ ret = obj->put(bl, attrs, dpp());
if (ret < 0) {
cerr << "ERROR: put object returned error: " << cpp_strerror(-ret) << std::endl;
}
}
}
if (need_rewrite) {
- ret = store->rewrite_obj(bucket_info, obj);
+ ret = store->rewrite_obj(bucket_info, obj, dpp());
if (ret < 0) {
cerr << "ERROR: object rewrite returned: " << cpp_strerror(-ret) << std::endl;
return -ret;
if (!need_rewrite) {
formatter->dump_string("status", "Skipped");
} else {
- r = store->rewrite_obj(bucket_info, obj);
+ r = store->rewrite_obj(bucket_info, obj, dpp());
if (r == 0) {
formatter->dump_string("status", "Success");
} else {
RGWRados *store;
P params;
+ const DoutPrefixProvider *dpp;
class Request : public RGWAsyncRadosRequest {
RGWRados *store;
P params;
+ const DoutPrefixProvider *dpp;
protected:
int _send_request() override;
public:
Request(RGWCoroutine *caller,
RGWAioCompletionNotifier *cn,
RGWRados *store,
- const P& _params) : RGWAsyncRadosRequest(caller, cn),
+ const P& _params,
+ const DoutPrefixProvider *dpp) : RGWAsyncRadosRequest(caller, cn),
store(store),
- params(_params) {}
+ params(_params),
+ dpp(dpp) {}
} *req{nullptr};
public:
RGWSimpleWriteOnlyAsyncCR(RGWAsyncRadosProcessor *_async_rados,
RGWRados *_store,
- const P& _params) : RGWSimpleCoroutine(_store->ctx()),
+ const P& _params,
+ const DoutPrefixProvider *_dpp) : RGWSimpleCoroutine(_store->ctx()),
async_rados(_async_rados),
store(_store),
- params(_params) {}
+ params(_params),
+ dpp(_dpp) {}
~RGWSimpleWriteOnlyAsyncCR() override {
request_cleanup();
req = new Request(this,
stack->create_completion_notifier(),
store,
- params);
+ params,
+ dpp);
async_rados->queue(req);
return 0;
obj->set_user_data(*params.user_data);
}
- ret = obj->put(params.data, params.attrs);
+ ret = obj->put(params.data, params.attrs, dpp);
if (ret < 0) {
lderr(cct) << "ERROR: put object returned error: " << cpp_strerror(-ret) << dendl;
}
return new RGWFetchRemoteObjCR(sync_env->async_rados, sync_env->store, sync_env->source_zone,
bucket_info, std::nullopt,
key, dest_key, versioned_epoch,
- true, zones_trace, nullptr);
+ true, zones_trace, nullptr, sync_env->dpp);
}
RGWCoroutine *RGWArchiveDataSyncModule::remove_object(RGWDataSyncEnv *sync_env, RGWBucketInfo& bucket_info, rgw_obj_key& key,
rgw_obj obj;
RGWObjectCtx rctx;
+ const DoutPrefixProvider *dpp;
- lc_op_ctx(op_env& _env, rgw_bucket_dir_entry& _o) : cct(_env.store->ctx()), env(_env), o(_o),
+ lc_op_ctx(op_env& _env, rgw_bucket_dir_entry& _o, const DoutPrefixProvider *_dpp) : cct(_env.store->ctx()), env(_env), o(_o),
store(env.store), bucket_info(env.bucket_info), op(env.op), ol(env.ol),
- obj(env.bucket_info.bucket, o.key), rctx(env.store) {}
+ obj(env.bucket_info.bucket, o.key), rctx(env.store), dpp(_dpp) {}
};
static int remove_expired_obj(lc_op_ctx& oc, bool remove_indeed)
LCOpRule(op_env& _env) : env(_env) {}
void build();
- int process(rgw_bucket_dir_entry& o);
+ int process(rgw_bucket_dir_entry& o, const DoutPrefixProvider *dpp);
};
static int check_tags(lc_op_ctx& oc, bool *skip)
target_placement.storage_class = transition.storage_class;
int r = oc.store->transition_obj(oc.rctx, oc.bucket_info, oc.obj,
- target_placement, o.meta.mtime, o.versioned_epoch);
+ target_placement, o.meta.mtime, o.versioned_epoch, oc.dpp);
if (r < 0) {
- ldout(oc.cct, 0) << "ERROR: failed to transition obj (r=" << r << ")" << dendl;
+ ldpp_dout(oc.dpp, 0) << "ERROR: failed to transition obj (r=" << r << ")" << dendl;
return r;
}
- ldout(oc.cct, 2) << "TRANSITIONED:" << oc.bucket_info.bucket << ":" << o.key << " -> " << transition.storage_class << dendl;
+ ldpp_dout(oc.dpp, 2) << "TRANSITIONED:" << oc.bucket_info.bucket << ":" << o.key << " -> " << transition.storage_class << dendl;
return 0;
}
};
}
}
-int LCOpRule::process(rgw_bucket_dir_entry& o)
+int LCOpRule::process(rgw_bucket_dir_entry& o, const DoutPrefixProvider *dpp)
{
- lc_op_ctx ctx(env, o);
+ lc_op_ctx ctx(env, o, dpp);
unique_ptr<LCOpAction> *selected = nullptr;
real_time exp;
}
if (!cont) {
- ldout(env.store->ctx(), 20) << __func__ << "(): key=" << o.key << ": no rule match, skipping" << dendl;
+ ldpp_dout(dpp, 20) << __func__ << "(): key=" << o.key << ": no rule match, skipping" << dendl;
return 0;
}
int r = (*selected)->process(ctx);
if (r < 0) {
- ldout(ctx.cct, 0) << "ERROR: remove_expired_obj " << dendl;
+ ldpp_dout(dpp, 0) << "ERROR: remove_expired_obj " << dendl;
return r;
}
- ldout(ctx.cct, 20) << "processed:" << env.bucket_info.bucket << ":" << o.key << dendl;
+ ldpp_dout(dpp, 20) << "processed:" << env.bucket_info.bucket << ":" << o.key << dendl;
}
return 0;
rgw_bucket_dir_entry o;
for (; ol.get_obj(&o); ol.next()) {
ldpp_dout(this, 20) << __func__ << "(): key=" << o.key << dendl;
- int ret = orule.process(o);
+ int ret = orule.process(o, this);
if (ret < 0) {
ldpp_dout(this, 20) << "ERROR: orule.process() returned ret=" << ret << dendl;
}
const rgw_user& owner;
RGWObjectCtx& obj_ctx;
rgw_obj head_obj;
- const DoutPrefixProvider *dpp;
RadosWriter writer;
RGWObjManifest manifest;
RGWObjManifest::generator manifest_gen;
ChunkProcessor chunk;
StripeProcessor stripe;
+ const DoutPrefixProvider *dpp;
// implements StripeGenerator
int next(uint64_t offset, uint64_t *stripe_size) override;
owner(owner),
obj_ctx(obj_ctx), head_obj(head_obj),
writer(aio, store, bucket_info, obj_ctx, head_obj, dpp),
- dpp(dpp),
- chunk(&writer, 0), stripe(&chunk, this, 0) {
+ chunk(&writer, 0), stripe(&chunk, this, 0), dpp(dpp) {
if (ptail_placement_rule) {
tail_placement_rule = *ptail_placement_rule;
}
const std::optional<uint64_t> olh_epoch;
const std::string unique_tag;
bufferlist first_chunk; // written with the head in complete()
- const DoutPrefixProvider *dpp;
int process_first_chunk(bufferlist&& data, DataProcessor **processor) override;
public:
const DoutPrefixProvider *dpp)
: ManifestObjectProcessor(aio, store, bucket_info, ptail_placement_rule,
owner, obj_ctx, head_obj, dpp),
- olh_epoch(olh_epoch), unique_tag(unique_tag), dpp(dpp)
+ olh_epoch(olh_epoch), unique_tag(unique_tag)
{}
// prepare a trivial manifest
const std::string upload_id;
const int part_num;
const std::string part_num_str;
- const DoutPrefixProvider *dpp;
RGWMPObj mp;
// write the first chunk and wait on aio->drain() for its completion.
: ManifestObjectProcessor(aio, store, bucket_info, ptail_placement_rule,
owner, obj_ctx, head_obj, dpp),
target_obj(head_obj), upload_id(upload_id),
- part_num(part_num), part_num_str(part_num_str), dpp(dpp),
+ part_num(part_num), part_num_str(part_num_str),
mp(head_obj.key.name, upload_id)
{}
uint64_t *cur_accounted_size;
string cur_etag;
const std::string unique_tag;
- const DoutPrefixProvider *dpp;
RGWObjManifest *cur_manifest;
const rgw_user& owner, RGWObjectCtx& obj_ctx,const rgw_obj& head_obj,
const std::string& unique_tag, uint64_t position, uint64_t *cur_accounted_size, const DoutPrefixProvider *dpp)
: ManifestObjectProcessor(aio, store, bucket_info, ptail_placement_rule, owner, obj_ctx, head_obj, dpp),
- position(position), cur_size(0), cur_accounted_size(cur_accounted_size), dpp(dpp),
+ position(position), cur_size(0), cur_accounted_size(cur_accounted_size),
unique_tag(unique_tag), cur_manifest(nullptr)
{}
int prepare() override;
}
}
-int RGWRados::rewrite_obj(RGWBucketInfo& dest_bucket_info, const rgw_obj& obj)
+int RGWRados::rewrite_obj(RGWBucketInfo& dest_bucket_info, const rgw_obj& obj, const DoutPrefixProvider *dpp)
{
map<string, bufferlist> attrset;
return copy_obj_data(rctx, dest_bucket_info, dest_bucket_info.placement_rule,
read_op, obj_size - 1, obj, NULL, mtime, attrset,
- 0, real_time(), NULL);
+ 0, real_time(), NULL, dpp);
}
struct obj_time_weight {
string *petag,
void (*progress_cb)(off_t, void *),
void *progress_data,
- const DoutprefixProvider *dpp)
+ const DoutPrefixProvider *dpp)
{
int ret;
uint64_t obj_size;
// may result in data corruption silently when copying
// multipart objects acorss pools. So reject COPY operations
//on encrypted objects before it is fully functional.
- ldout(cct, 0) << "ERROR: copy op for encrypted object " << src_obj
+ ldpp_dout(dpp, 0) << "ERROR: copy op for encrypted object " << src_obj
<< " has not been implemented." << dendl;
return -ERR_NOT_IMPLEMENTED;
}
ret = get_max_chunk_size(dest_bucket_info.placement_rule, dest_obj, &max_chunk_size);
if (ret < 0) {
- ldout(cct, 0) << "ERROR: failed to get max_chunk_size() for bucket " << dest_obj.bucket << dendl;
+ ldpp_dout(dpp, 0) << "ERROR: failed to get max_chunk_size() for bucket " << dest_obj.bucket << dendl;
return ret;
}
if (astate->has_manifest) {
src_rule = &astate->manifest.get_tail_placement().placement_rule;
- ldout(cct, 20) << __func__ << "(): manifest src_rule=" << src_rule->to_str() << dendl;
+ ldpp_dout(dpp, 20) << __func__ << "(): manifest src_rule=" << src_rule->to_str() << dendl;
}
if (!src_rule || src_rule->empty()) {
}
if (!get_obj_data_pool(*src_rule, src_obj, &src_pool)) {
- ldout(cct, 0) << "ERROR: failed to locate data pool for " << src_obj << dendl;
+ ldpp_dout(dpp, 0) << "ERROR: failed to locate data pool for " << src_obj << dendl;
return -EIO;
}
if (!get_obj_data_pool(dest_placement, dest_obj, &dest_pool)) {
- ldout(cct, 0) << "ERROR: failed to locate data pool for " << dest_obj << dendl;
+ ldpp_dout(dpp, 0) << "ERROR: failed to locate data pool for " << dest_obj << dendl;
return -EIO;
}
- ldout(cct, 20) << __func__ << "(): src_rule=" << src_rule->to_str() << " src_pool=" << src_pool
+ ldpp_dout(dpp, 20) << __func__ << "(): src_rule=" << src_rule->to_str() << " src_pool=" << src_pool
<< " dest_rule=" << dest_placement.to_str() << " dest_pool=" << dest_pool << dendl;
bool copy_data = !astate->has_manifest ||
if (copy_data) { /* refcounting tail wouldn't work here, just copy the data */
attrs.erase(RGW_ATTR_TAIL_TAG);
return copy_obj_data(obj_ctx, dest_bucket_info, dest_placement, read_op, obj_size - 1, dest_obj,
- mtime, real_time(), attrs, olh_epoch, delete_at, petag);
+ mtime, real_time(), attrs, olh_epoch, delete_at, petag, dpp);
}
RGWObjManifest::obj_iterator miter = astate->manifest.obj_begin();
bool copy_itself = (dest_obj == src_obj);
RGWObjManifest *pmanifest;
- ldout(cct, 20) << "dest_obj=" << dest_obj << " src_obj=" << src_obj << " copy_itself=" << (int)copy_itself << dendl;
+ ldpp_dout(dpp, 20) << "dest_obj=" << dest_obj << " src_obj=" << src_obj << " copy_itself=" << (int)copy_itself << dendl;
RGWRados::Object dest_op_target(this, dest_bucket_info, obj_ctx, dest_obj);
RGWRados::Object::Write write_op(&dest_op_target);
int r = ref.ioctx.operate(riter->oid, &op);
if (r < 0) {
- ldout(cct, 0) << "ERROR: cleanup after error failed to drop reference on obj=" << *riter << dendl;
+ ldpp_dout(dpp, 0) << "ERROR: cleanup after error failed to drop reference on obj=" << *riter << dendl;
}
}
}
map<string, bufferlist>& attrs,
uint64_t olh_epoch,
real_time delete_at,
- string *petag)
+ string *petag,
+ const DoutPrefixProvider *dpp)
{
string tag;
append_rand_alpha(cct, tag, tag, 32);
using namespace rgw::putobj;
AtomicObjectProcessor processor(&aio, this, dest_bucket_info, &dest_placement,
dest_bucket_info.owner, obj_ctx,
- dest_obj, olh_epoch, tag);
+ dest_obj, olh_epoch, tag, dpp);
int ret = processor.prepare();
if (ret < 0)
return ret;
bufferlist bl;
ret = read_op.read(ofs, end, bl);
if (ret < 0) {
- ldout(cct, 0) << "ERROR: fail to read object data, ret = " << ret << dendl;
+ ldpp_dout(dpp, 0) << "ERROR: fail to read object data, ret = " << ret << dendl;
return ret;
}
RGWCompressionInfo cs_info;
ret = rgw_compression_info_from_attrset(attrs, compressed, cs_info);
if (ret < 0) {
- ldout(cct, 0) << "ERROR: failed to read compression info" << dendl;
+ ldpp_dout(dpp, 0) << "ERROR: failed to read compression info" << dendl;
return ret;
}
// pass original size if compressed
rgw_obj& obj,
const rgw_placement_rule& placement_rule,
const real_time& mtime,
- uint64_t olh_epoch)
+ uint64_t olh_epoch,
+ const DoutPrefixProvider *dpp)
{
map<string, bufferlist> attrs;
real_time read_mtime;
attrs,
olh_epoch,
real_time(),
- nullptr /* petag */);
+ nullptr /* petag */,
+ dpp);
if (ret < 0) {
return ret;
}
ATTRSMOD_MERGE = 2
};
- int rewrite_obj(RGWBucketInfo& dest_bucket_info, const rgw_obj& obj);
+ int rewrite_obj(RGWBucketInfo& dest_bucket_info, const rgw_obj& obj, const DoutPrefixProvider *dpp);
int stat_remote_obj(RGWObjectCtx& obj_ctx,
const rgw_user& user_id,
map<string, bufferlist>& attrs,
uint64_t olh_epoch,
ceph::real_time delete_at,
- string *petag);
+ string *petag,
+ const DoutPrefixProvider *dpp);
int transition_obj(RGWObjectCtx& obj_ctx,
RGWBucketInfo& bucket_info,
rgw_obj& obj,
const rgw_placement_rule& placement_rule,
const real_time& mtime,
- uint64_t olh_epoch);
+ uint64_t olh_epoch,
+ const DoutPrefixProvider *dpp);
int check_bucket_empty(RGWBucketInfo& bucket_info);
try {
old_config.decode(iter);
} catch (const buffer::error& e) {
- ldout(cct, 0) << __func__ << "(): decode life cycle config failed" << dendl;
+ ldpp_dout(sync_env->dpp, 0) << __func__ << "(): decode life cycle config failed" << dendl;
}
}
if (old_rule.get_prefix().empty() &&
old_rule.get_expiration().get_days() == retention_days &&
old_rule.is_enabled()) {
- ldout(sync_env->cct, 20) << "no need to set lifecycle rule on bucket, existing rule matches config" << dendl;
+ ldpp_dout(sync_env->dpp, 20) << "no need to set lifecycle rule on bucket, existing rule matches config" << dendl;
return set_cr_done();
}
}
lc_config.config.add_rule(rule);
yield call(new RGWBucketLifecycleConfigCR(sync_env->async_rados,
sync_env->store,
- lc_config));
+ lc_config,
+ sync_env->dpp));
if (retcode < 0) {
- ldout(sync_env->cct, 1) << "ERROR: failed to set lifecycle on bucket: ret=" << retcode << dendl;
+ ldpp_dout(sync_env->dpp, 1) << "ERROR: failed to set lifecycle on bucket: ret=" << retcode << dendl;
return set_cr_error(retcode);
}
get_bucket_info,
sub->get_bucket_info_result));
if (retcode < 0 && retcode != -ENOENT) {
- ldout(sync_env->cct, 1) << "ERROR: failed to geting bucket info: " << "tenant="
+ ldpp_dout(sync_env->dpp, 1) << "ERROR: failed to geting bucket info: " << "tenant="
<< get_bucket_info.tenant << " name=" << get_bucket_info.bucket_name << ": ret=" << retcode << dendl;
}
if (retcode == 0) {
int ret = sub->data_access->get_bucket(result->bucket_info, result->attrs, &sub->bucket);
if (ret < 0) {
- ldout(sync_env->cct, 1) << "ERROR: data_access.get_bucket() bucket=" << result->bucket_info.bucket << " failed, ret=" << ret << dendl;
+ ldpp_dout(sync_env->dpp, 1) << "ERROR: data_access.get_bucket() bucket=" << result->bucket_info.bucket << " failed, ret=" << ret << dendl;
return set_cr_error(ret);
}
}
sub->get_bucket_info_result->bucket_info,
sub->get_bucket_info_result->attrs));
if (retcode < 0) {
- ldout(sync_env->cct, 1) << "ERROR: failed to init lifecycle on bucket (bucket=" << sub_conf->data_bucket_name << ") ret=" << retcode << dendl;
+ ldpp_dout(sync_env->dpp, 1) << "ERROR: failed to init lifecycle on bucket (bucket=" << sub_conf->data_bucket_name << ") ret=" << retcode << dendl;
return set_cr_error(retcode);
}
create_bucket.user_info = sub->env->data_user_info;
create_bucket.bucket_name = sub_conf->data_bucket_name;
- ldout(sync_env->cct, 20) << "pubsub: bucket create: using user info: " << json_str("obj", *sub->env->data_user_info, true) << dendl;
+ ldpp_dout(sync_env->dpp, 20) << "pubsub: bucket create: using user info: " << json_str("obj", *sub->env->data_user_info, true) << dendl;
yield call(new RGWBucketCreateLocalCR(sync_env->async_rados,
sync_env->store,
- create_bucket));
+ create_bucket,
+ sync_env->dpp));
if (retcode < 0) {
- ldout(sync_env->cct, 1) << "ERROR: failed to create bucket: " << "tenant="
+ ldpp_dout(sync_env->dpp, 1) << "ERROR: failed to create bucket: " << "tenant="
<< get_bucket_info.tenant << " name=" << get_bucket_info.bucket_name << ": ret=" << retcode << dendl;
return set_cr_error(retcode);
}
}
/* failed twice on -ENOENT, unexpected */
- ldout(sync_env->cct, 1) << "ERROR: failed to create bucket " << "tenant=" << get_bucket_info.tenant
+ ldpp_dout(sync_env->dpp, 1) << "ERROR: failed to create bucket " << "tenant=" << get_bucket_info.tenant
<< " name=" << get_bucket_info.bucket_name << dendl;
return set_cr_error(-EIO);
}
yield call(new RGWObjectSimplePutCR(sync_env->async_rados,
sync_env->store,
- put_obj));
+ put_obj,
+ sync_env->dpp));
if (retcode < 0) {
- ldout(sync_env->cct, 10) << "failed to store event: " << put_obj.bucket << "/" << put_obj.key << " ret=" << retcode << dendl;
+ ldpp_dout(sync_env->dpp, 10) << "failed to store event: " << put_obj.bucket << "/" << put_obj.key << " ret=" << retcode << dendl;
return set_cr_error(retcode);
} else {
- ldout(sync_env->cct, 20) << "event stored: " << put_obj.bucket << "/" << put_obj.key << dendl;
+ ldpp_dout(sync_env->dpp, 20) << "event stored: " << put_obj.bucket << "/" << put_obj.key << dendl;
}
return set_cr_done();
env(_env), conf(env->conf) {}
int operate() override {
reenter(this) {
- ldout(sync_env->cct, 5) << ": init pubsub config zone=" << sync_env->source_zone << dendl;
+ ldpp_dout(sync_env->dpp, 1) << ": init pubsub config zone=" << sync_env->source_zone << dendl;
/* nothing to do here right now */
create_user.user = conf->user;
create_user.max_buckets = 0; /* unlimited */
create_user.display_name = "pubsub";
create_user.generate_key = false;
- yield call(new RGWUserCreateCR(sync_env->async_rados, sync_env->store, create_user));
+ yield call(new RGWUserCreateCR(sync_env->async_rados, sync_env->store, create_user, sync_env->dpp));
if (retcode < 0) {
- ldout(sync_env->store->ctx(), 1) << "ERROR: failed to create rgw user: ret=" << retcode << dendl;
+ ldpp_dout(sync_env->dpp, 1) << "ERROR: failed to create rgw user: ret=" << retcode << dendl;
return set_cr_error(retcode);
}
get_user_info.user = conf->user;
yield call(new RGWGetUserInfoCR(sync_env->async_rados, sync_env->store, get_user_info, env->data_user_info));
if (retcode < 0) {
- ldout(sync_env->store->ctx(), 1) << "ERROR: failed to create rgw user: ret=" << retcode << dendl;
+ ldpp_dout(sync_env->dpp, 1) << "ERROR: failed to create rgw user: ret=" << retcode << dendl;
return set_cr_error(retcode);
}
- ldout(sync_env->cct, 20) << "pubsub: get user info cr returned: " << json_str("obj", *env->data_user_info, true) << dendl;
+ ldpp_dout(sync_env->dpp, 20) << "pubsub: get user info cr returned: " << json_str("obj", *env->data_user_info, true) << dendl;
return set_cr_done();
}
int RGWDataAccess::Object::put(bufferlist& data,
- map<string, bufferlist>& attrs)
+ map<string, bufferlist>& attrs,
+ const DoutPrefixProvider *dpp)
{
RGWRados *store = sd->store;
CephContext *cct = store->ctx();
AtomicObjectProcessor processor(&aio, store, bucket_info,
nullptr,
owner.get_id(),
- obj_ctx, obj, olh_epoch, req_id);
+ obj_ctx, obj, olh_epoch, req_id, dpp);
int ret = processor.prepare();
if (ret < 0)
bucket(_bucket),
key(_key) {}
public:
- int put(bufferlist& data, map<string, bufferlist>& attrs); /* might modify attrs */
+ int put(bufferlist& data, map<string, bufferlist>& attrs, const DoutPrefixProvider *dpp); /* might modify attrs */
void set_mtime(const ceph::real_time& _mtime) {
mtime = _mtime;