static int set_target_layout(rgw::sal::RadosStore *store,
int new_num_shards,
RGWBucketInfo& bucket_info,
- map<string, bufferlist>& attrs,
const DoutPrefixProvider *dpp)
{
assert(!bucket_info.layout.target_index);
bucket_info.layout.target_index.emplace();
bucket_info.layout.target_index->layout.normal.num_shards = new_num_shards;
+
+ //increment generation number
+ bucket_info.layout.target_index->gen = bucket_info.layout.current_index.gen;
+ bucket_info.layout.target_index->gen++;
bucket_info.layout.resharding = rgw::BucketReshardState::InProgress;
- int ret = static_cast<rgw::sal::RadosStore*>(store)->getRados()->put_bucket_instance_info(bucket_info, true, real_time(), &attrs, dpp);
+ int ret = static_cast<rgw::sal::RadosStore*>(store)->getRados()->put_bucket_instance_info(bucket_info, true, real_time(), nullptr, dpp);
if (ret < 0) {
cerr << "ERROR: failed to store updated bucket instance info: " << cpp_strerror(-ret) << std::endl;
return ret;
}
+ ret = store->svc()->bi->init_index(dpp, bucket_info, *(bucket_info.layout.target_index));
+ if (ret < 0) {
+ return ret;
+ }
+
return 0;
}
int RGWBucketReshard::set_target_layout(int new_num_shards, const DoutPrefixProvider *dpp)
{
- return ::set_target_layout(store, new_num_shards, bucket_info, bucket_attrs, dpp);
+ return ::set_target_layout(store, new_num_shards, bucket_info, dpp);
}
int RGWBucketReshard::cancel(const DoutPrefixProvider *dpp)
const DoutPrefixProvider *dpp;
rgw::sal::RadosStore* store;
RGWBucketInfo& bucket_info;
- std::map<string, bufferlist> bucket_attrs;
bool in_progress{false};
int set_status(rgw::BucketReshardState s, const DoutPrefixProvider *dpp) {
bucket_info.layout.resharding = s;
- int ret = store->getRados()->put_bucket_instance_info(bucket_info, false, real_time(), &bucket_attrs, dpp);
+ int ret = store->getRados()->put_bucket_instance_info(bucket_info, false, real_time(), nullptr, dpp);
if (ret < 0) {
ldpp_dout(dpp, 0) << "ERROR: failed to write bucket info, ret=" << ret << dendl;
return ret;
public:
BucketInfoReshardUpdate(const DoutPrefixProvider *_dpp,
- rgw::sal::RadosStore* _store,
- RGWBucketInfo& _bucket_info,
- map<string, bufferlist>& _bucket_attrs) :
+ rgw::sal::RadosStore *_store,
+ RGWBucketInfo& _bucket_info) :
dpp(_dpp),
store(_store),
- bucket_info(_bucket_info),
- bucket_attrs(_bucket_attrs)
+ bucket_info(_bucket_info)
{}
~BucketInfoReshardUpdate() {
// NB: destructor cleans up sharding state if reshard does not
// complete successfully
- BucketInfoReshardUpdate bucket_info_updater(dpp, store, bucket_info, bucket_attrs);
-
+ BucketInfoReshardUpdate bucket_info_updater(dpp, store, bucket_info);
int ret = bucket_info_updater.start();
if (ret < 0) {
return ret;
}
- //increment generation number
- bucket_info.layout.target_index->gen = bucket_info.layout.current_index.gen;
- bucket_info.layout.target_index->gen++;
-
int num_target_shards = bucket_info.layout.target_index->layout.normal.num_shards;
BucketReshardManager target_shards_mgr(dpp, store, bucket_info, num_target_shards);
bucket_info.layout.current_index = *bucket_info.layout.target_index;
bucket_info.layout.target_index = std::nullopt; // target_layout doesn't need to exist after reshard
bucket_info.layout.resharding = rgw::BucketReshardState::None;
- ret = store->getRados()->put_bucket_instance_info(bucket_info, false, real_time(), &bucket_attrs, dpp);
+ ret = store->getRados()->put_bucket_instance_info(bucket_info, false, real_time(), nullptr, dpp);
if (ret < 0) {
ldpp_dout(dpp, -1) << "ERROR: failed writing bucket instance info: " << dendl;
return ret;
}
- ret = store->svc()->bi->init_index(dpp, bucket_info, bucket_info.layout.current_index);
- if (ret < 0) {
- return ret;
- }
-
return 0;
// NB: some error clean-up is done by ~BucketInfoReshardUpdate
} // RGWBucketReshard::do_reshard
// restore old index if reshard fails
bucket_info.layout.current_index = prev_index;
- ret = store->getRados()->put_bucket_instance_info(bucket_info, false, real_time(), &bucket_attrs, dpp);
+ ret = store->getRados()->put_bucket_instance_info(bucket_info, false, real_time(), nullptr, dpp);
if (ret < 0) {
lderr(store->ctx()) << "ERROR: failed writing bucket instance info: " << dendl;
return ret;