]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: optimize metadata caching in BulkUpload of Swift API.
authorRadoslaw Zarzynski <rzarzynski@mirantis.com>
Tue, 29 Nov 2016 10:43:02 +0000 (11:43 +0100)
committerRadoslaw Zarzynski <rzarzynski@mirantis.com>
Sun, 2 Apr 2017 16:35:22 +0000 (18:35 +0200)
Signed-off-by: Radoslaw Zarzynski <rzarzynski@mirantis.com>
src/rgw/rgw_op.cc
src/rgw/rgw_op.h

index f906689cfaa942d5d2c4bd8ab2f9bf9d4efa3c09..7d7b019e0ab02ea5627f493bc3a4214fd9934458 100644 (file)
@@ -5605,8 +5605,7 @@ int RGWBulkUploadOp::handle_dir(const boost::string_ref path)
    * specific request */
   RGWBucketInfo binfo;
   std::map<std::string, ceph::bufferlist> battrs;
-  RGWObjectCtx obj_ctx(store); // = *static_cast<RGWObjectCtx *>(s->obj_ctx);
-  op_ret = store->get_bucket_info(obj_ctx, s->bucket_tenant, bucket_name,
+  op_ret = store->get_bucket_info(*dir_ctx, s->bucket_tenant, bucket_name,
                                   binfo, NULL, &battrs);
   if (op_ret < 0 && op_ret != -ENOENT) {
     return op_ret;
index df865926454c71c62f0c0d8da357f8ddb44288eb..2ab94c363df6eb629b0324966dc06a8c26d91a5a 100644 (file)
@@ -387,6 +387,8 @@ inline ostream& operator<<(ostream& out, const RGWBulkDelete::acct_path_t &o) {
 
 
 class RGWBulkUploadOp : public RGWOp {
+  boost::optional<RGWObjectCtx> dir_ctx;
+
 protected:
   class StreamGetter;
   class DecoratedStreamGetter;
@@ -407,7 +409,15 @@ protected:
 
   int handle_dir_verify_permission();
   int handle_dir(boost::string_ref path);
+
 public:
+  void init(RGWRados* const store,
+            struct req_state* const s,
+            RGWHandler* const h) override {
+    RGWOp::init(store, s, h);
+    dir_ctx.emplace(store);
+  }
+
   int verify_permission() override;
   void pre_exec() override;
   void execute() override;