return 0;
}
+int create_new_bucket_instance(RGWRados *store,
+ int new_num_shards,
+ const RGWBucketInfo& bucket_info,
+ map<string, bufferlist>& attrs,
+ RGWBucketInfo& new_bucket_info)
+{
+
+ store->create_bucket_id(&new_bucket_info.bucket.bucket_id);
+ new_bucket_info.bucket.oid.clear();
+
+ new_bucket_info.num_shards = new_num_shards;
+ new_bucket_info.objv_tracker.clear();
+
+ int ret = store->init_bucket_index(new_bucket_info, new_bucket_info.num_shards);
+ if (ret < 0) {
+ cerr << "ERROR: failed to init new bucket indexes: " << cpp_strerror(-ret) << std::endl;
+ return -ret;
+ }
+
+ ret = store->put_bucket_instance_info(new_bucket_info, true, real_time(), &attrs);
+ if (ret < 0) {
+ cerr << "ERROR: failed to store new bucket instance info: " << cpp_strerror(-ret) << std::endl;
+ return -ret;
+ }
+
+ return 0;
+}
+
+
#ifdef BUILDING_FOR_EMBEDDED
extern "C" int cephd_rgw_admin(int argc, const char **argv)
#else
return ret;
}
- ret = reshard_bucket(store, formatter, entry.new_num_shards, bucket, bucket_info, new_bucket_info,
- max_entries, bucket_op, verbose);
+ ret = reshard.reshard_bucket(formatter, entry.new_num_shards, bucket, bucket_info, new_bucket_info,
+ max_entries, bucket_op, verbose);
+ formatter->flush(cout);
if (ret < 0) {
return ret;
}
return r;
}
-
rgw_zone_set zones_trace;
if (_zones_trace) {
zones_trace = *_zones_trace;
else {
zones_trace.insert(get_zone().id);
- /* handle on going bucket resharding */
- BucketIndexLockGuard guard(this, bucket_info.bucket.bucket_id, bucket_info.bucket.oid,
- reshard_pool_ctx);
- r = reshard->block_while_resharding(bucket_info.bucket.oid, guard);
- if (r < 0) {
- return r;
- }
-
BucketShard bs(this);
cls_rgw_obj_key key(obj_instance.key.get_index_key_name(), obj_instance.key.instance);
#include "include/rados/librados.hpp"
#include "cls/rgw/cls_rgw_types.h"
#include "cls/lock/cls_lock_client.h"
+#include "rgw_bucket.h"
class CephContext;
class RGWRados;
int list(string& marker, uint32_t max, list<cls_rgw_reshard_entry>& entries, bool& is_truncated);
int clear_bucket_resharding(const string& bucket_instance_oid, cls_rgw_reshard_entry& entry);
int block_while_resharding(RGWRados::BucketShard *bs, string *new_bucket_id);
+
+ int reshard_bucket(Formatter *formatter,
+ int num_shards,
+ rgw_bucket& bucket,
+ RGWBucketInfo& bucket_info,
+ RGWBucketInfo& new_bucket_info,
+ int max_entries,
+ RGWBucketAdminOpState& bucket_op,
+ bool verbose = false);
+
/* reshard thread */
int process_single_shard(const std::string& shard);
int inspect_all_shards();