radosgw-admin: implement reshard execute command

Signed-off-by: Orit Wasserman <owasserm@redhat.com>
This commit is contained in:
Orit Wasserman 2017-04-13 12:47:33 +03:00 committed by Yehuda Sadeh
parent 3858171490
commit 11e7cb1eb4

View File

@ -2434,7 +2434,6 @@ int create_new_bucket_instance(RGWRados *store,
RGWBucketInfo& new_bucket_info)
{
new_bucket_info = bucket_info;
store->create_bucket_id(&new_bucket_info.bucket.bucket_id);
new_bucket_info.bucket.oid.clear();
@ -2494,7 +2493,7 @@ int reshard_bucket(RGWRados *store,
cout << "total entries:";
}
int num_source_shards = (bucket_info.num_shards > 0 ? bucket_info.num_shards : 1);
int num_source_shards = (bucket_info.num_shards > 0 ? bucket_info.num_shards : 1);
string marker;
for (int i = 0; i < num_source_shards; ++i) {
bool is_truncated = true;
@ -5861,7 +5860,7 @@ next:
return ret;
}
RGWBucketInfo new_bucket_info;
RGWBucketInfo new_bucket_info(bucket_info);
ret = create_new_bucket_instance(store, num_shards, bucket_info, attrs,
new_bucket_info);
if (ret < 0) {
@ -5952,32 +5951,62 @@ next:
cerr << "ERROR: bucket not specified" << std::endl;
return EINVAL;
}
cls_rgw_reshard_entry entry;
//entry.tenant = tenant;
entry.bucket_name = bucket_name;
//entry.bucket_id = bucket_id;
int ret = reshard.get(entry);
if (ret < 0) {
cerr << "Error in getting bucket " << bucket_name << ": " << cpp_strerror(-ret) << std::endl;
return ret;
}
rgw_bucket bucket;
RGWBucketInfo bucket_info;
map<string, bufferlist> attrs;
ret = init_bucket(tenant, entry.bucket_name, bucket_id, bucket_info, bucket, &attrs);
ret = init_bucket(tenant, bucket_name, bucket_id, bucket_info, bucket, &attrs);
if (ret < 0) {
cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
return -ret;
}
RGWBucketInfo new_bucket_info;
ret = reshard_bucket(store, formatter, entry.new_num_shards, bucket, bucket_info,new_bucket_info,
cls_rgw_reshard_entry entry;
entry.tenant = tenant;
entry.bucket_name = bucket_name;
entry.bucket_id = bucket_info.bucket.bucket_id;
int ret = reshard.get(entry);
if (ret < 0) {
cerr << "Error in getting entry for bucket " << bucket_name << ": " << cpp_strerror(-ret) << std::endl;
return ret;
}
RGWBucketInfo new_bucket_info(bucket_info);
ret = create_new_bucket_instance(store, entry.new_num_shards, bucket_info, attrs,
new_bucket_info);
if (ret < 0) {
return ret;
}
entry.new_instance_id = entry.bucket_name + ":" + new_bucket_info.bucket.bucket_id;
ret = reshard.add(entry);
if (ret < 0) {
cerr << "Error in updateing entry bucket " << bucket_name << ": " << cpp_strerror(-ret) << std::endl;
return ret;
}
ret = reshard.set_bucket_resharding(bucket_info.bucket.oid, entry);
if (ret < 0) {
cerr << "Error in setting resharding flag for bucket " << bucket_name << ": " << cpp_strerror(-ret)
<< std::endl;
return ret;
}
ret = reshard_bucket(store, formatter, entry.new_num_shards, bucket, bucket_info, new_bucket_info,
max_entries, bucket_op, verbose);
if (ret < 0) {
return ret;
}
ret = reshard.clear_bucket_resharding(new_bucket_info.bucket.oid,
entry);
if (ret < 0) {
cerr << "Error in clearing resharding flag for bucket " << bucket_name << ": " << cpp_strerror(-ret)
<< std::endl;
return ret;
}
ret =reshard.remove(entry);
if (ret < 0) {
cerr << "Error removing bucket " << bucket_name << " for resharding queue: " << cpp_strerror(-ret) <<