}
static bool issue_bucket_list_op(librados::IoCtx& io_ctx,
- const string& oid, const string& start_obj, const string& filter_prefix,
+ const string& oid, const cls_rgw_obj_key& start_obj, const string& filter_prefix,
uint32_t num_entries, bool list_versions, BucketIndexAioManager *manager,
struct rgw_cls_list_ret *pdata) {
bufferlist in;
int CLSRGWIssueBucketList::issue_op(int shard_id, const string& oid)
{
- return issue_bucket_list_op(io_ctx, oid, start_obj, filter_prefix, num_entries, &manager, &result[shard_id]);
+ return issue_bucket_list_op(io_ctx, oid, start_obj, filter_prefix, num_entries, list_versions, &manager, &result[shard_id]);
}
void cls_rgw_remove_obj(librados::ObjectWriteOperation& o, list<string>& keep_attr_prefixes)
int CLSRGWIssueGetDirHeader::issue_op(int shard_id, const string& oid)
{
- return issue_bucket_list_op(io_ctx, oid, "", "", 0, &manager, &result[shard_id]);
+ cls_rgw_obj_key nokey;
+ return issue_bucket_list_op(io_ctx, oid, nokey, "", 0, false, &manager, &result[shard_id]);
}
class GetDirHeaderCompletion : public ObjectOperationCompletion {
obj.init_ns(s->bucket, tmp_obj_name, mp_ns);
// the meta object will be indexed with 0 size, we c
obj.set_in_extra_data(true);
- obj.index_hash_source = s->object_str;
+ obj.index_hash_source = s->object.name;
RGWRados::Object op_target(store, s->bucket_info, *(RGWObjectCtx *)s->obj_ctx, obj);
op_target.set_versioning_disabled(true); /* no versioning for multipart meta */
meta_obj.init_ns(s->bucket, meta_oid, mp_ns);
meta_obj.set_in_extra_data(true);
- meta_obj.index_hash_source = s->object_str;
+ meta_obj.index_hash_source = s->object.name;
ret = get_obj_attrs(store, s, meta_obj, attrs);
if (ret < 0) {
string oid = mp.get_part(obj_iter->second.num);
rgw_obj obj;
obj.init_ns(s->bucket, oid, mp_ns);
- obj.index_hash_source = s->object_str;
+ obj.index_hash_source = s->object.name;
ret = store->delete_obj(*obj_ctx, s->bucket_info, obj, 0);
if (ret < 0 && ret != -ENOENT)
return;
RGWObjManifest::obj_iterator oiter;
for (oiter = manifest.obj_begin(); oiter != manifest.obj_end(); ++oiter) {
rgw_obj loc = oiter.get_location();
- loc.index_hash_source = s->object_str;
+ loc.index_hash_source = s->object.name;
ret = store->delete_obj(*obj_ctx, s->bucket_info, loc, 0);
if (ret < 0 && ret != -ENOENT)
return;
// and also remove the metadata obj
meta_obj.init_ns(s->bucket, meta_oid, mp_ns);
meta_obj.set_in_extra_data(true);
- meta_obj.index_hash_source = s->object_str;
+ meta_obj.index_hash_source = s->object.name;
ret = store->delete_obj(*obj_ctx, s->bucket_info, meta_obj, 0);
if (ret == -ENOENT) {
ret = -ERR_NO_SUCH_BUCKET;
if (ret < 0)
return ret;
+ RGWObjectCtx obj_ctx(this);
+
// Get the bucket info
RGWBucketInfo binfo;
- ret = get_bucket_instance_info(NULL, bucket, binfo, NULL, NULL);
+ ret = get_bucket_instance_info(obj_ctx, bucket, binfo, NULL, NULL);
if (ret < 0)
return ret;
if (ret < 0)
return ret;
+ RGWObjectCtx obj_ctx(this);
+
// Get the bucket info
RGWBucketInfo binfo;
- ret = get_bucket_instance_info(NULL, bucket, binfo, NULL, NULL);
+ ret = get_bucket_instance_info(obj_ctx, bucket, binfo, NULL, NULL);
if (ret < 0)
return ret;
int RGWRados::Bucket::UpdateIndex::prepare(RGWModifyOp op)
{
- rgw_bucket& bucket = target->get_bucket();
RGWRados *store = target->get_store();
BucketShard *bs;
- int ret = target->get_bucket_shard(&bs);
+ int ret = get_bucket_shard(&bs);
+ if (ret < 0) {
ldout(store->ctx(), 5) << "failed to get BucketShard object: ret=" << ret << dendl;
return ret;
}
append_rand_alpha(store->ctx(), optag, optag, 32);
}
}
- ret = store->cls_obj_prepare_op(*bs, bucket, op, optag, obj, bilog_flags);
+ ret = store->cls_obj_prepare_op(*bs, op, optag, obj, bilog_flags);
return ret;
}
list<rgw_obj_key> *remove_objs)
{
RGWRados *store = target->get_store();
- rgw_bucket& bucket = target->get_bucket();
BucketShard *bs;
- int ret = target->get_bucket_shard(&bs);
+ int ret = get_bucket_shard(&bs);
+ if (ret < 0) {
ldout(store->ctx(), 5) << "failed to get BucketShard object: ret=" << ret << dendl;
return ret;
}
ent.owner_display_name = owner.get_display_name();
ent.content_type = content_type;
- int ret = store->cls_obj_complete_add(*bs, optag, poolid, epoch, ent, category, remove_objs, bilog_flags);
+ ret = store->cls_obj_complete_add(*bs, optag, poolid, epoch, ent, category, remove_objs, bilog_flags);
return ret;
}
{
RGWRados *store = target->get_store();
BucketShard *bs;
- int ret = target->get_bucket_shard(&bs);
+ int ret = get_bucket_shard(&bs);
+ if (ret < 0) {
ldout(store->ctx(), 5) << "failed to get BucketShard object: ret=" << ret << dendl;
return ret;
}
int RGWRados::Bucket::UpdateIndex::cancel()
{
RGWRados *store = target->get_store();
- return store->cls_obj_complete_cancel(target->get_bucket(), optag, obj, bilog_flags);
+ BucketShard *bs;
+ int ret = get_bucket_shard(&bs);
+ if (ret < 0) {
+ ldout(store->ctx(), 5) << "failed to get BucketShard object: ret=" << ret << dendl;
+ return ret;
+ }
+ return store->cls_obj_complete_cancel(*bs, optag, obj, bilog_flags);
}
int RGWRados::Object::Read::read(int64_t ofs, int64_t end, bufferlist& bl)
int RGWRados::get_bucket_stats_async(rgw_bucket& bucket, RGWGetBucketStats_CB *ctx)
{
RGWBucketInfo binfo;
- int r = get_bucket_instance_info(NULL, bucket, binfo, NULL, NULL);
+ RGWObjectCtx obj_ctx(this);
+
+ int r = get_bucket_instance_info(obj_ctx, bucket, binfo, NULL, NULL);
if (r < 0)
return r;
ObjectWriteOperation o;
cls_rgw_obj_key key(obj.get_index_key_name(), obj.get_instance());
cls_rgw_bucket_prepare_op(o, op, tag, key, obj.get_loc(), zone_public_config.log_data, bilog_flags);
- r = bs.index_ctx.operate(bs.bucket_obj, &o);
+ int r = bs.index_ctx.operate(bs.bucket_obj, &o);
return r;
}
map<string, size_t> candidates;
for (size_t i = 0; i < vcurrents.size(); ++i) {
if (vcurrents[i] != vends[i]) {
- candidates[vcurrents[i]->second.name] = i;
+ candidates[vcurrents[i]->first] = i;
}
}
while (count < num_entries && !candidates.empty()) {
// Select the next one
int pos = candidates.begin()->second;
+ const string& name = vcurrents[pos]->first;
struct rgw_bucket_dir_entry& dirent = vcurrents[pos]->second;
// fill it in with initial values; we may correct later
}
}
if (r >= 0) {
- m[e.name] = e;
+ m[name] = e;
ldout(cct, 10) << "RGWRados::cls_bucket_list: got " << e.key.name << "[" << e.key.instance << "]" << dendl;
++count;
}
candidates.erase(candidates.begin());
++vcurrents[pos];
if (vcurrents[pos] != vends[pos]) {
- candidates[vcurrents[pos]->second.name] = pos;
+ candidates[vcurrents[pos]->first] = pos;
}
}