return 0;
}
-int rgw_bucket_set_attrs(RGWRados *store, RGWBucketInfo& bucket_info,
- map<string, bufferlist>& attrs,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y)
-{
- rgw_bucket& bucket = bucket_info.bucket;
-
- if (!bucket_info.has_instance_obj) {
- /* an old bucket object, need to convert it */
- RGWSysObjectCtx obj_ctx = store->svc.sysobj->init_obj_ctx();
- int ret = convert_old_bucket_info(store, obj_ctx, bucket.tenant, bucket.name);
- if (ret < 0) {
- ldout(store->ctx(), 0) << "ERROR: failed converting old bucket info: " << ret << dendl;
- return ret;
- }
- }
-
- bufferlist bl;
-
- return store->svc.bucket->store_bucket_instance_info(bucket_info, false, attrs, objv_tracker, real_time(), y);
-}
-
static void dump_mulipart_index_results(list<rgw_obj_index_key>& objs_to_unlink,
Formatter *f)
{
}
if (!user_id.empty()) {
- int r = rgw_get_user_info_by_uid(store, user_id, user_info);
+ int r = store->ctl.user->get_info_by_uid(user_id, &user_info);
if (r < 0)
return r;
bool truncated = true;
formatter->open_array_section("buckets");
- ret = store->svc.meta->get_mgr()->list_keys_init("bucket", &handle);
+ ret = store->ctl.meta.mgr->list_keys_init("bucket", &handle);
while (ret == 0 && truncated) {
std::list<std::string> buckets;
const int max_keys = 1000;
- ret = store->svc.meta->get_mgr()->list_keys_next(handle, max_keys, buckets,
+ ret = store->ctl.meta.mgr->list_keys_next(handle, max_keys, buckets,
&truncated);
for (auto& bucket_name : buckets) {
if (show_stats)
Formatter *formatter = flusher.get_formatter();
static constexpr auto default_max_keys = 1000;
- int ret = store->svc.meta->get_mgr()->list_keys_init("bucket.instance", marker, &handle);
+ int ret = store->ctl.meta.mgr->list_keys_init("bucket.instance", marker, &handle);
if (ret < 0) {
cerr << "ERROR: can't get key: " << cpp_strerror(-ret) << std::endl;
return ret;
do {
list<std::string> keys;
- ret = store->svc.meta->get_mgr()->list_keys_next(handle, default_max_keys, keys, &truncated);
+ ret = store->ctl.meta.mgr->list_keys_next(handle, default_max_keys, keys, &truncated);
if (ret < 0 && ret != -ENOENT) {
cerr << "ERROR: lists_keys_next(): " << cpp_strerror(-ret) << std::endl;
return ret;
int ret = purge_bucket_instance(store, binfo);
if (ret == 0){
auto md_key = "bucket.instance:" + binfo.bucket.get_key();
- ret = store->svc.meta->get_mgr()->remove(md_key);
+ ret = store->ctl.meta.mgr->remove(md_key);
}
formatter->open_object_section("delete_status");
formatter->dump_string("bucket_instance", binfo.bucket.get_key());
public:
RGW_MB_Handler_Module_Bucket(RGWSI_Zone *_zone_svc) : zone_svc(_zone_svc) {}
- void get_pool_and_oid(const string& key, rgw_pool& pool, string& oid) override {
- oid = key;
- pool = zone_svc->get_zone_params().domain_root;
+ void get_pool_and_oid(const string& key, rgw_pool *pool, string *oid) override {
+ *oid = key;
+ *pool = zone_svc->get_zone_params().domain_root;
}
};
RGWBucketMetadataHandler(RGWSI_Bucket *bucket_svc) {
svc.bucket = bucket_svc;
- be_handler = svc.user->get_ep_be_handler();
+ be_handler = svc.bucket->get_ep_be_handler();
}
RGWSI_MetaBackend_Handler *get_be_handler() {
string get_type() override { return "bucket"; }
- int init_module() override {
- be_module.reset(new RGW_MB_Handler_Module_Bucket(store->svc.zone));
- return 0;
- }
-
RGWMetadataObject *get_meta_obj(JSONObj *jo, const obj_version& objv, const ceph::real_time& mtime) override {
RGWBucketEntryPoint be;
try {
- decode_json_obj(be, obj);
+ decode_json_obj(be, jo);
} catch (JSONDecoder::err& e) {
return nullptr;
}
if (ret < 0)
return ret;
- RGWBucketEntryMetadataObject *mdo = new RGWBucketEntryMetadataObject(be, ot.read_version, mtime, attrs);
+ RGWBucketEntryMetadataObject *mdo = new RGWBucketEntryMetadataObject(be, ot.read_version, mtime, std::move(attrs));
*obj = mdo;
real_time orig_mtime;
- int ret = svc.bucket->read_bucket_entrypoint_info(op->ctx(), entry, be, &objv_tracker, &orig_mtime, nullptr, y);
+ int ret = svc.bucket->read_bucket_entrypoint_info(op->ctx(), entry, &be, &objv_tracker, &orig_mtime, nullptr, y);
if (ret < 0)
return ret;
*/
ret = rgw_unlink_bucket(store, be.owner, tenant_name, bucket_name, false);
if (ret < 0) {
- lderr(store->ctx()) << "could not unlink bucket=" << entry << " owner=" << be.owner << dendl;
+ lderr(svc.bucket->ctx()) << "could not unlink bucket=" << entry << " owner=" << be.owner << dendl;
}
- ret = svc.bucket->remove_bucket_entrypoint_info(op->ctx(), entry, objv_tracker, orig_mtime);
+ ret = svc.bucket->remove_bucket_entrypoint_info(op->ctx(), entry, objv_tracker);
if (ret < 0) {
- lderr(store->ctx()) << "could not delete bucket=" << entry << dendl;
+ lderr(svc.bucket->ctx()) << "could not delete bucket=" << entry << dendl;
}
/* idempotent */
return 0;
}
};
-class RGWMetadataHandlerPut_Bucket : public RGWMetadataHanderPut_SObj
+class RGWMetadataHandlerPut_Bucket : public RGWMetadataHandlerPut_SObj
{
RGWBucketMetadataHandler *handler;
RGWBucketEntryMetadataObject *obj;
public:
RGWMetadataHandlerPut_Bucket(RGWBucketMetadataHandler *_handler,
- RGWSI_MetaBackend::Context *ctx, string& entry,
+ RGWSI_MetaBackend_Handler::Op *op, string& entry,
RGWMetadataObject *_obj, RGWObjVersionTracker& objv_tracker,
- RGWMDLogSyncType type) : RGWMetadataHanderPut_SObj(ctx, entry, obj, objv_tracker, type),
+ RGWMDLogSyncType type) : RGWMetadataHandlerPut_SObj(handler, op, entry, obj, objv_tracker, type),
handler(_handler) {
obj = static_cast<RGWBucketEntryMetadataObject *>(_obj);
}
~RGWMetadataHandlerPut_Bucket() {}
void encode_obj(bufferlist *bl) override {
- ceph::encode(obj->get_be(), *bl);
+ obj->get_ep().encode(*bl);
}
int put_checked(RGWMetadataObject *_old_obj) override;
RGWObjVersionTracker& objv_tracker,
RGWMDLogSyncType type)
{
- RGWMetadataHandlerPut_Bucket op(this, op->ctx(), entry, obj, objv_tracker, type);
- return do_put(&op);
+ RGWMetadataHandlerPut_Bucket put_op(this, op, entry, obj, objv_tracker, type);
+ return do_put_operate(&put_op);
}
int RGWMetadataHandlerPut_Bucket::put_checked(RGWMetadataObject *_old_obj)
{
RGWBucketEntryMetadataObject *old_obj = static_cast<RGWBucketEntryMetadataObject *>(_old_obj);
- obj->set_pattrs(old_obj->get_attrs());
+ obj->set_pattrs(&old_obj->get_attrs());
- auto& be = obj->get_be();
+ auto& be = obj->get_ep();
auto mtime = obj->get_mtime();
auto pattrs = obj->get_pattrs();
- return handler->svc.bucket->store_bucket_entrypoint_info(ctx, entry,
+ return handler->svc.bucket->store_bucket_entrypoint_info(op->ctx(), entry,
be,
false,
mtime,
int RGWMetadataHandlerPut_Bucket::put_post()
{
- auto& be = obj->get_be();
+ auto& be = obj->get_ep();
+
+ int ret;
/* link bucket */
if (be.linked) {
class RGWArchiveBucketMetadataHandler : public RGWBucketMetadataHandler {
public:
- int do_remove(RGWS_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker,
+ int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker,
optional_yield y) override {
+ auto cct = svc.bucket->ctx();
+
ldout(cct, 5) << "SKIP: bucket removal is not allowed on archive zone: bucket:" << entry << " ... proceeding to rename" << dendl;
string tenant_name, bucket_name;
RGWBucketEntryPoint be;
map<string, bufferlist> attrs;
- int ret = svc.bucket->read_bucket_entrypoint_info(op->ctx(), entry, be, &objv_tracker, &mtime, &attrs, y);
+ int ret = svc.bucket->read_bucket_entrypoint_info(op->ctx(), entry, &be, &objv_tracker, &mtime, &attrs, y);
if (ret < 0) {
return ret;
}
ceph::real_time orig_mtime;
RGWBucketInfo old_bi;
- ret = svc.bucket->read_bucket_instance_info(op->ctx(), bi_meta_key, old_bi, &orig_mtime, &attrs_m, y);
+ ret = svc.bucket->read_bucket_instance_info(op->ctx(), bi_meta_name, &old_bi, &orig_mtime, &attrs_m, y);
if (ret < 0) {
return ret;
}
archive_meta_info ami;
- if (!ami.from_attrs(store->ctx(), attrs_m)) {
+ if (!ami.from_attrs(svc.bucket->ctx(), attrs_m)) {
ami.orig_bucket = old_bi.bucket;
ami.store_in_attrs(attrs_m);
}
new_be.bucket.name = new_bucket_name;
- ret = svc.bucket->store_bucket_instance_info(op->ctx(), new_bi, false, orig_mtime, &attrs_m, y);
+ ret = svc.bucket->store_bucket_instance_info(op->ctx(), bi_meta_name, new_bi, false, orig_mtime, &attrs_m, y);
if (ret < 0) {
- ldout(store->ctx(), 0) << "ERROR: failed to put new bucket instance info for bucket=" << new_bi.bucket << " ret=" << ret << dendl;
+ ldout(cct, 0) << "ERROR: failed to put new bucket instance info for bucket=" << new_bi.bucket << " ret=" << ret << dendl;
return ret;
}
/* store a new entrypoint */
RGWObjVersionTracker ot;
- ot.generate_new_write_ver(store->ctx());
+ ot.generate_new_write_ver(cct);
- ret = svc.bucket->store_bucket_entrypoint_info(op->ctx(), new_be.bucket, new_be, true, mtime, &attrs, nullptr, y);
+ ret = svc.bucket->store_bucket_entrypoint_info(op->ctx(), RGWSI_Bucket::get_entrypoint_meta_key(new_be.bucket),
+ new_be, true, mtime, &attrs, nullptr, y);
if (ret < 0) {
- ldout(store->ctx(), 0) << "ERROR: failed to put new bucket entrypoint for bucket=" << new_be.bucket << " ret=" << ret << dendl;
+ ldout(cct, 0) << "ERROR: failed to put new bucket entrypoint for bucket=" << new_be.bucket << " ret=" << ret << dendl;
return ret;
}
ret = rgw_link_bucket(store, new_be.owner, new_be.bucket, new_be.creation_time, false, y);
if (ret < 0) {
- ldout(store->ctx(), 0) << "ERROR: failed to link new bucket for bucket=" << new_be.bucket << " ret=" << ret << dendl;
+ ldout(cct, 0) << "ERROR: failed to link new bucket for bucket=" << new_be.bucket << " ret=" << ret << dendl;
return ret;
}
ret = rgw_unlink_bucket(store, be.owner, tenant_name, bucket_name, false, y);
if (ret < 0) {
- lderr(store->ctx()) << "could not unlink bucket=" << entry << " owner=" << be.owner << dendl;
+ lderr(cct) << "could not unlink bucket=" << entry << " owner=" << be.owner << dendl;
}
// if (ret == -ECANCELED) it means that there was a race here, and someone
&objv_tracker,
y);
if (ret < 0) {
- ldout(store->ctx(), 0) << "ERROR: failed to put new bucket entrypoint for bucket=" << new_be.bucket << " ret=" << ret << dendl;
+ ldout(cct, 0) << "ERROR: failed to put new bucket entrypoint for bucket=" << new_be.bucket << " ret=" << ret << dendl;
return ret;
}
ret = svc.bucket->remove_bucket_instance_info(op->ctx(), bi_meta_name, nullptr, y);
if (ret < 0) {
- lderr(store->ctx()) << "could not delete bucket=" << entry << dendl;
+ lderr(cct) << "could not delete bucket=" << entry << dendl;
}
}
return RGWBucketMetadataHandler::do_put(op, entry, objv_tracker,
- mtime, obj, y, sync_type);
+ obj->get_mtime(), obj, y, sync_type);
}
};
const ceph::real_time& mtime,
optional_yield y) {
#warning mtime?
- return svc.bucket->remove_bucket_instance_info(ctx, entry, objv_tracker, y);
+ return svc.bucket->remove_bucket_instance_info(op->ctx(), entry, objv_tracker, y);
}
RGWBucketInstanceMetadataHandler(RGWSI_Bucket *bucket_svc) {
svc.bucket = bucket_svc;
- be_handler = svc.user->get_bi_be_handler();
+ be_handler = svc.bucket->get_bi_be_handler();
}
RGWSI_MetaBackend_Handler *get_be_handler() {
return 0;
}
- int do_put(RGWSI_MetaBackend::Context *ctx, string& entry,
+ int do_put(RGWSI_MetaBackend_Handler::Op *op, string& entry,
RGWMetadataObject *_obj, RGWObjVersionTracker& objv_tracker,
- RGWMetadataObject *_old_obj) override;
+ RGWMDLogSyncType sync_type) override;
struct list_keys_info {
RGWRados *store;
RGWListRawObjsCtx ctx;
};
- int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker) override {
+ int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker,
+ optioanl_yield y) override {
RGWBucketCompleteInfo bci;
- int ret = read_bucket_instance_entry(ctx, entry, bci, nullptr, null_yield);
+ int ret = read_bucket_instance_entry(op, entry, &bci, nullptr, y);
if (ret < 0 && ret != -ENOENT)
return ret;
- return svc.bucket->remove_bucket_instance_info(ctx, entry, &bci->info.objv_tracker);
+ return svc.bucket->remove_bucket_instance_info(op->ctx(), entry, &bci.info.objv_tracker);
}
- int list_keys_init(RGWRados *store, const string& marker, void **phandle) override {
+ int list_keys_init(const string& marker, void **phandle) override {
auto info = std::make_unique<list_keys_info>();
info->store = store;
}
};
-class RGWMetadataHandlerPut_BucketInstance : public RGWMetadataHanderPut_SObj
+class RGWMetadataHandlerPut_BucketInstance : public RGWMetadataHandlerPut_SObj
{
+ CephContext *cct;
RGWBucketInstanceMetadataHandler *handler;
RGWBucketInstanceMetadataObject *obj;
public:
- RGWMetadataHandlerPut_BucketInstance(RGWBucketInstanceMetadataHandler *_handler,
- RGWSI_MetaBackend::Context *ctx, string& entry,
+ RGWMetadataHandlerPut_BucketInstance(CephContext *cct,
+ RGWBucketInstanceMetadataHandler *_handler,
+ RGWSI_MetaBackend_Handler::Op *ctx, string& entry,
RGWMetadataObject *_obj, RGWObjVersionTracker& objv_tracker,
- RGWMDLogSyncType type) : RGWMetadataHanderPut_SObj(ctx, entry, obj, objv_tracker, type),
+ RGWMDLogSyncType type) : RGWMetadataHandlerPut_SObj(_handler, op, entry, obj, objv_tracker, type),
handler(_handler) {
obj = static_cast<RGWBucketInstanceMetadataObject *>(_obj);
}
void encode_obj(bufferlist *bl) override {
- ceph::encode(obj->get_bucket_info(), *bl);
+ obj->get_bucket_info().encode(*bl);
}
int put_pre() override;
int put_post() override;
};
-int RGWBucketInstanceMetadatHandler::do_put(RGWSI_MetaBackend::Context *ctx, string& entry,
+int RGWBucketInstanceMetadataHandler::do_put(RGWSI_MetaBackend::Context *ctx, string& entry,
RGWMetadataObject *obj,
RGWObjVersionTracker& objv_tracker,
optional_yield y,
- RGWMDLogSyncType type) override
+ RGWMDLogSyncType type)
{
- RGWMetadataHandlerPut_BucketInstance put_op(this, ctx, entry, obj,
+ RGWMetadataHandlerPut_BucketInstance put_op(svc.bucket->ctx(), this, ctx, entry, obj,
objv_tracker, y, type);
- return do_put(&op);
+ return do_put_operate(&op);
}
int RGWMetadataHandlerPut_BucketInstance::put_pre()
{
+ int ret;
+
RGWBucketCompleteInfo& bci = obj->get_bci();
RGWBucketInstanceMetadataObject *old_obj = static_cast<RGWBucketInstanceMetadataObject *>(_old_obj);
bool exists = (!!old_obj);
- if (!exists || old_bci->info.bucket.bucket_id != bci->info.bucket.bucket_id) {
+ if (!exists || old_bci->info.bucket.bucket_id != bci.info.bucket.bucket_id) {
/* a new bucket, we need to select a new bucket placement for it */
auto key(entry);
rgw_bucket_instance_oid_to_key(key);
if (!bci.info.datasync_flag_enabled()) {
ret = store->stop_bi_log_entries(bci.info, -1);
if (ret < 0) {
- lderr(store->ctx()) << "ERROR: failed writing bilog" << dendl;
+ lderr(cct) << "ERROR: failed writing bilog" << dendl;
return ret;
}
} else {
ret = store->resync_bi_log_entries(bci.info, -1);
if (ret < 0) {
- lderr(store->ctx()) << "ERROR: failed writing bilog" << dendl;
+ lderr(cct) << "ERROR: failed writing bilog" << dendl;
return ret;
}
}
for (int i = 0; i < shards_num; ++i, ++shard_id) {
ret = store->data_log->add_entry(bci.info.bucket, shard_id);
if (ret < 0) {
- lderr(store->ctx()) << "ERROR: failed writing data log" << dendl;
+ lderr(cct) << "ERROR: failed writing data log" << dendl;
return ret;
}
}
{
objv_tracker = bci.info.objv_tracker;
- ret = store->init_bucket_index(bci.info, bci.info.num_shards);
+ int ret = store->init_bucket_index(bci.info, bci.info.num_shards);
if (ret < 0)
return ret;
class RGWArchiveBucketInstanceMetadataHandler : public RGWBucketInstanceMetadataHandler {
public:
- int do_remove(RGWSI_MetaBackend::Context *ctx, string& entry, RGWObjVersionTracker& objv_tracker) override {
- ldout(cct, 0) << "SKIP: bucket instance removal is not allowed on archive zone: bucket.instance:" << entry << dendl;
+ int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker) override {
+ ldout(svc.bucket->ctx(), 0) << "SKIP: bucket instance removal is not allowed on archive zone: bucket.instance:" << entry << dendl;
return 0;
}
};
bi_be_handler = bmi_handler->get_be_handler();
}
-int RGWSI_Bucket::read_bucket_entrypoint_info(const rgw_bucket& bucket,
+int RGWBucketCtl::read_bucket_entrypoint_info(const rgw_bucket& bucket,
RGWBucketEntryPoint *info,
- RGWSI_Bucket::Bucket::GetParams& params)
+ ceph::optional_ref_default<RGWBucketCtl::Bucket::GetParams> _params)
{
+ auto& params = *_params;
return bucket_be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
return svc.bucket->read_bucket_entrypoint_info(op->ctx(),
RGWSI_Bucket::get_entrypoint_meta_key(bucket),
});
}
-int RGWSI_Bucket::store_bucket_entrypoint_info(const rgw_bucket& bucket,
+int RGWBucketCtl::store_bucket_entrypoint_info(const rgw_bucket& bucket,
RGWBucketEntryPoint& info,
- RGWSI_Bucket::Bucket::PutParams& params)
+ ceph::optional_ref_default<RGWBucketCtl::Bucket::PutParams> _params)
{
+ auto& params = *_params;
return bucket_be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
return svc.bucket->store_bucket_entrypoint_info(op->ctx(),
- bucket,
+ RGWSI_Bucket::get_entrypoint_meta_key(bucket),
+ info,
params.exclusive,
params.mtime,
params.attrs,
});
}
-int RGWSI_Bucket::remove_bucket_entrypoint_info(const rgw_bucket& bucket,
- RGWSI_Bucket::Bucket::RemoveParams& params)
+int RGWBucketCtl::remove_bucket_entrypoint_info(const rgw_bucket& bucket,
+ ceph::optional_ref_default<RGWBucketCtl::Bucket::RemoveParams> _params)
{
+ auto& params = *_params;
return bucket_be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
return svc.bucket->remove_bucket_entrypoint_info(op->ctx(),
- bucket,
+ RGWSI_Bucket::get_entrypoint_meta_key(bucket),
params.objv_tracker);
});
}
-int RGWSI_Bucket::read_bucket_instance_info(const rgw_bucket& bucket,
+int RGWBucketCtl::read_bucket_instance_info(const rgw_bucket& bucket,
RGWBucketInfo *info,
- RGWSI_Bucket::BucketInstance::GetParams& params)
+ ceph::optional_ref_default<RGWBucketCtl::BucketInstance::GetParams> _params)
{
+ auto& params = *_params;
int ret = bi_be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
return svc.bucket->read_bucket_instance_info(op->ctx(),
RGWSI_Bucket::get_bi_meta_key(bucket),
}
if (params.objv_tracker) {
- *params.objv_tracker = info.objv_tracker;
+ *params.objv_tracker = info->objv_tracker;
}
return 0;
}
-int RGWSI_Bucket::store_bucket_instance_info(const rgw_bucket& bucket,
+int RGWBucketCtl::store_bucket_instance_info(const rgw_bucket& bucket,
RGWBucketInfo& info,
- RGWSI_Bucket::Bucket::PutParams& params)
+ ceph::optional_ref_default<RGWBucketCtl::BucketInstance::PutParams> _params)
{
+ auto& params = *_params;
if (params.objv_tracker) {
info.objv_tracker = *params.objv_tracker;
}
});
}
-int RGWSI_Bucket::remove_bucket_instance_info(const rgw_bucket& bucket,
+int RGWBucketCtl::remove_bucket_instance_info(const rgw_bucket& bucket,
RGWBucketInfo& info,
- RGWSI_Bucket::Bucket::RemoveParams& params)
+ ceph::optional_ref_default<RGWBucketCtl::BucketInstance::RemoveParams> _params)
{
+ auto& params = *_params;
if (params.objv_tracker) {
info.objv_tracker = *params.objv_tracker;
}
return bi_be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
return svc.bucket->remove_bucket_instance_info(op->ctx(),
- RGWSI_Bucket::get_bi_meta_key(bucket),
+ RGWBucketCtl::get_bi_meta_key(bucket),
&info.objv_tracker));
});
}
+int RGWBucketCtl::set_bucket_instance_attrs(RGWBucketInfo& bucket_info,
+ map<string, bufferlist>& attrs,
+ RGWObjVersionTracker *objv_tracker)
+{
+ rgw_bucket& bucket = bucket_info.bucket;
+
+ if (!bucket_info.has_instance_obj) {
+ /* an old bucket object, need to convert it */
+ RGWSysObjectCtx obj_ctx = store->svc.sysobj->init_obj_ctx();
+ int ret = convert_old_bucket_info(store, obj_ctx, bucket.tenant, bucket.name);
+ if (ret < 0) {
+ ldout(store->ctx(), 0) << "ERROR: failed converting old bucket info: " << ret << dendl;
+ return ret;
+ }
+ }
+
+ return store_bucket_instance_info(bucket,
+ bucket_info,
+ PutParams().set_attrs(&attrs)
+ .set_objv_tracker(objv_tracker));
+}
+
RGWMetadataHandler *RGWBucketMetaHandlerAllocator::alloc() {
return new RGWBucketMetadataHandler;