]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: moved reshard_bucket into RGWReshard
authorOrit Wasserman <owasserm@redhat.com>
Sun, 14 May 2017 08:03:22 +0000 (11:03 +0300)
committerYehuda Sadeh <yehuda@redhat.com>
Mon, 5 Jun 2017 20:17:49 +0000 (13:17 -0700)
Signed-off-by: Orit Wasserman <owasserm@redhat.com>
src/rgw/rgw_admin.cc
src/rgw/rgw_rados.cc
src/rgw/rgw_reshard.h

index ab14c950a414e6459c98fc682533eea2db3979ee..b0d3380d86dc36e186ba29ed891b2124d4e02eed 100644 (file)
@@ -2264,6 +2264,35 @@ int check_reshard_bucket_params(RGWRados *store,
   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
@@ -5707,8 +5736,9 @@ next:
       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;
     }
index c49c3391bd1f6836894e9df2e73a9b8d57a185e9..f6d11f239e902bc51d06372c5400bd7cad60ddbd 100644 (file)
@@ -10809,7 +10809,6 @@ int RGWRados::bucket_index_link_olh(const RGWBucketInfo& bucket_info, RGWObjStat
     return r;
   }
 
-
   rgw_zone_set zones_trace;
   if (_zones_trace) {
     zones_trace = *_zones_trace;
@@ -10817,14 +10816,6 @@ int RGWRados::bucket_index_link_olh(const RGWBucketInfo& bucket_info, RGWObjStat
   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);
index 3c146f6fe74eaa6932a87ce855010d0a77acda98..bb13753fc2e272f231c5091f4a8682adf73aa22d 100644 (file)
@@ -8,6 +8,7 @@
 #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;
@@ -106,6 +107,16 @@ protected:
     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();