]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: fixes following rebase
authorYehuda Sadeh <yehuda@redhat.com>
Sun, 14 Jul 2019 19:42:19 +0000 (12:42 -0700)
committerCasey Bodley <cbodley@redhat.com>
Mon, 29 Jul 2019 19:20:50 +0000 (15:20 -0400)
Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
42 files changed:
src/rgw/rgw_admin.cc
src/rgw/rgw_aio.cc
src/rgw/rgw_bucket.cc
src/rgw/rgw_bucket.h
src/rgw/rgw_cr_tools.cc
src/rgw/rgw_data_sync.cc
src/rgw/rgw_lc.cc
src/rgw/rgw_metadata.cc
src/rgw/rgw_metadata.h
src/rgw/rgw_op.cc
src/rgw/rgw_otp.cc
src/rgw/rgw_otp.h
src/rgw/rgw_putobj_processor.cc
src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h
src/rgw/rgw_reshard.cc
src/rgw/rgw_rest.cc
src/rgw/rgw_rest_metadata.cc
src/rgw/rgw_rest_swift.cc
src/rgw/rgw_rest_user_policy.cc
src/rgw/rgw_sync.cc
src/rgw/rgw_tools.cc
src/rgw/rgw_tools.h
src/rgw/rgw_trim_datalog.cc
src/rgw/rgw_user.cc
src/rgw/rgw_user.h
src/rgw/services/svc_bi.h
src/rgw/services/svc_bi_rados.cc
src/rgw/services/svc_bi_rados.h
src/rgw/services/svc_bilog_rados.cc
src/rgw/services/svc_bucket.h
src/rgw/services/svc_bucket_sobj.cc
src/rgw/services/svc_bucket_sobj.h
src/rgw/services/svc_meta_be.cc
src/rgw/services/svc_meta_be.h
src/rgw/services/svc_otp.cc
src/rgw/services/svc_otp.h
src/rgw/services/svc_rados.cc
src/rgw/services/svc_rados.h
src/rgw/services/svc_tier_rados.h
src/rgw/services/svc_user_rados.cc
src/tools/ceph-dencoder/rgw_types.h

index 084dd78c1bccb9e1743775dad642b472951fe72f..d75b375914c76c0be5a0de42e709bf8f0c9419e1 100644 (file)
@@ -6809,7 +6809,7 @@ next:
   }
 
   if (opt_cmd == OPT_METADATA_GET) {
-    int ret = store->ctl.meta.mgr->get(metadata_key, formatter);
+    int ret = store->ctl.meta.mgr->get(metadata_key, formatter, null_yield);
     if (ret < 0) {
       cerr << "ERROR: can't get key: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -6825,7 +6825,7 @@ next:
       cerr << "ERROR: failed to read input: " << cpp_strerror(-ret) << std::endl;
       return -ret;
     }
-    ret = store->ctl.meta.mgr->put(metadata_key, bl, RGWMDLogSyncType::APPLY_ALWAYS);
+    ret = store->ctl.meta.mgr->put(metadata_key, bl, null_yield, RGWMDLogSyncType::APPLY_ALWAYS);
     if (ret < 0) {
       cerr << "ERROR: can't put key: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -6833,7 +6833,7 @@ next:
   }
 
   if (opt_cmd == OPT_METADATA_RM) {
-    int ret = store->ctl.meta.mgr->remove(metadata_key);
+    int ret = store->ctl.meta.mgr->remove(metadata_key, null_yield);
     if (ret < 0) {
       cerr << "ERROR: can't remove key: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -7740,6 +7740,7 @@ next:
 
     int ret = store->ctl.meta.mgr->mutate(RGWSI_MetaBackend_OTP::get_meta_key(user_id),
                                          mtime, &objv_tracker,
+                                         null_yield,
                                          MDLOG_STATUS_WRITE,
                                          [&] {
       return store->svc.cls->mfa.create_mfa(user_id, config, &objv_tracker, mtime, null_yield);
@@ -7775,6 +7776,7 @@ next:
 
     int ret = store->ctl.meta.mgr->mutate(RGWSI_MetaBackend_OTP::get_meta_key(user_id),
                                          mtime, &objv_tracker,
+                                         null_yield,
                                          MDLOG_STATUS_WRITE,
                                          [&] {
       return store->svc.cls->mfa.remove_mfa(user_id, totp_serial, &objv_tracker, mtime, null_yield);
@@ -7918,6 +7920,7 @@ next:
 
     ret = store->ctl.meta.mgr->mutate(RGWSI_MetaBackend_OTP::get_meta_key(user_id),
                                      mtime, &objv_tracker,
+                                     null_yield,
                                      MDLOG_STATUS_WRITE,
                                      [&] {
       return store->svc.cls->mfa.create_mfa(user_id, config, &objv_tracker, mtime, null_yield);
index c42d8051e1d761ef823bbb2130cf61339b2c8dc2..92fd6e84605f5a2f3dcca905d5c1a3644bcf8f07 100644 (file)
@@ -89,7 +89,7 @@ Aio::OpFunc aio_abstract(Op&& op, boost::asio::io_context& context,
       auto ex = get_associated_executor(init.completion_handler);
 
       auto& ref = r.obj.get_ref();
-      librados::async_operate(context, ref.ioctx, ref.obj.oid, &op, 0,
+      librados::async_operate(context, ref.pool.ioctx(), ref.obj.oid, &op, 0,
                               bind_executor(ex, Handler{aio, r}));
     };
 }
index 48f4d1b22e3cacfe339f29525e8c0efb0fda3ff7..898d922b1dd5edb760c988ff914afe922b59c379 100644 (file)
@@ -290,7 +290,8 @@ void check_bad_user_bucket_mapping(RGWRados *store, const rgw_user& user_id,
         if (fix) {
           cout << "fixing" << std::endl;
           r = store->ctl.bucket->link_bucket(user_id, actual_bucket,
-                                             bucket_info.creation_time);
+                                             bucket_info.creation_time,
+                                            null_yield);
           if (r < 0) {
             cerr << "failed to fix bucket: " << cpp_strerror(-r) << std::endl;
           }
@@ -392,7 +393,7 @@ int rgw_remove_bucket(RGWRados *store, rgw_bucket& bucket, bool delete_children,
     return ret;
   }
 
-  ret = store->ctl.bucket->unlink_bucket(info.owner, bucket, false);
+  ret = store->ctl.bucket->unlink_bucket(info.owner, bucket, null_yield, false);
   if (ret < 0) {
     lderr(store->ctx()) << "ERROR: unable to remove user bucket information" << dendl;
   }
@@ -557,7 +558,7 @@ int rgw_remove_bucket_bypass_gc(RGWRados *store, rgw_bucket& bucket,
     return ret;
   }
 
-  ret = store->ctl.bucket->unlink_bucket(info.owner, bucket, false);
+  ret = store->ctl.bucket->unlink_bucket(info.owner, bucket, null_yield, false);
   if (ret < 0) {
     lderr(store->ctx()) << "ERROR: unable to remove user bucket information" << dendl;
   }
@@ -609,7 +610,7 @@ int RGWBucket::init(RGWRados *storage, RGWBucketAdminOpState& op_state)
   return 0;
 }
 
-int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg)
+int RGWBucket::link(RGWBucketAdminOpState& op_state, optional_yield y, std::string *err_msg)
 {
   if (!op_state.is_user_op()) {
     set_err_msg(err_msg, "empty user id");
@@ -640,9 +641,9 @@ int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg)
 
   auto bucket_ctl = store->ctl.bucket;
 
-  int r = bucket_ctl->read_bucket_instance_info(bucket, &bucket_info, null_yield, RGWBucketCtl::BucketInstance::GetParams()
+  int r = bucket_ctl->read_bucket_instance_info(bucket, &bucket_info, y, RGWBucketCtl::BucketInstance::GetParams()
                                                                                   .set_attrs(&attrs)
-                                                                                  .set_objv_tracker(&objv_tracker),
+                                                                                  .set_objv_tracker(&objv_tracker)
                                                                                   .set_bectx_params(&obj_ctx));
   if (r < 0) {
     return r;
@@ -662,7 +663,7 @@ int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg)
       return -EIO;
     }
 
-    r = store->ctl.bucket->unlink_bucket(owner.get_id(), bucket, false);
+    r = store->ctl.bucket->unlink_bucket(owner.get_id(), bucket, y, false);
     if (r < 0) {
       set_err_msg(err_msg, "could not unlink policy from user " + owner.get_id().to_str());
       return r;
@@ -679,9 +680,10 @@ int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg)
     // ...and encode the acl
     policy.encode(attrs[RGW_ATTR_ACL]);
 
-    r = bucket_ctl->store_bucket_instance_info(bucket, bucket_info, RGWBucketCtl::BucketInstance::PutParams()
-                                                                    .set_attrs(&attrs)
-                                                                    .set_objv_tracker(&objv_tracker));
+    r = bucket_ctl->store_bucket_instance_info(bucket, bucket_info, y,
+                                              RGWBucketCtl::BucketInstance::PutParams()
+                                                 .set_attrs(&attrs)
+                                                 .set_objv_tracker(&objv_tracker));
     if (r < 0) {
       return r;
     }
@@ -691,7 +693,7 @@ int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg)
     RGWBucketEntryPoint be;
     map<string, bufferlist> be_attrs;
     RGWObjVersionTracker be_ot;
-    r = bucket_ctl->read_bucket_entrypoint_info(bucket, &be, null_yield, RGWBucketCtl::Bucket::GetParams()
+    r = bucket_ctl->read_bucket_entrypoint_info(bucket, &be, y, RGWBucketCtl::Bucket::GetParams()
                                                                          .set_objv_tracker(&be_ot)
                                                                          .set_attrs(&be_attrs));
     if (r < 0) {
@@ -701,7 +703,7 @@ int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg)
     be.owner = bucket_info.owner;
     be_attrs[RGW_ATTR_ACL] = attrs[RGW_ATTR_ACL];
 
-    r = bucket_ctl->store_bucket_entrypoint_info(bucket, be, null_yield, RGWBucketCtl::Bucket::PutParams()
+    r = bucket_ctl->store_bucket_entrypoint_info(bucket, be, y, RGWBucketCtl::Bucket::PutParams()
                                                                          .set_objv_tracker(&be_ot)
                                                                          .set_attrs(&be_attrs));
     if (r < 0) {
@@ -711,7 +713,8 @@ int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg)
     /* link to user */
     r = store->ctl.bucket->link_bucket(user_info.user_id,
                                        bucket_info.bucket,
-                                       ceph::real_time());
+                                       ceph::real_time(),
+                                      y);
     if (r < 0) {
       return r;
     }
@@ -720,7 +723,7 @@ int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg)
   return 0;
 }
 
-int RGWBucket::unlink(RGWBucketAdminOpState& op_state, std::string *err_msg)
+int RGWBucket::unlink(RGWBucketAdminOpState& op_state, optional_yield y, std::string *err_msg)
 {
   rgw_bucket bucket = op_state.get_bucket();
 
@@ -729,7 +732,7 @@ int RGWBucket::unlink(RGWBucketAdminOpState& op_state, std::string *err_msg)
     return -EINVAL;
   }
 
-  int r = store->ctl.bucket->unlink_bucket(user_info.user_id, bucket);
+  int r = store->ctl.bucket->unlink_bucket(user_info.user_id, bucket, y);
   if (r < 0) {
     set_err_msg(err_msg, "error unlinking bucket" + cpp_strerror(-r));
   }
@@ -1144,7 +1147,7 @@ int RGWBucketAdminOp::unlink(RGWRados *store, RGWBucketAdminOpState& op_state)
   if (ret < 0)
     return ret;
 
-  return bucket.unlink(op_state);
+  return bucket.unlink(op_state, null_yield);
 }
 
 int RGWBucketAdminOp::link(RGWRados *store, RGWBucketAdminOpState& op_state, string *err)
@@ -1155,7 +1158,7 @@ int RGWBucketAdminOp::link(RGWRados *store, RGWBucketAdminOpState& op_state, str
   if (ret < 0)
     return ret;
 
-  return bucket.link(op_state, err);
+  return bucket.link(op_state, null_yield, err);
 
 }
 
@@ -1688,7 +1691,7 @@ int RGWBucketAdminOp::clear_stale_instances(RGWRados *store,
                        int ret = purge_bucket_instance(store, binfo);
                        if (ret == 0){
                          auto md_key = "bucket.instance:" + binfo.bucket.get_key();
-                         ret = store->ctl.meta.mgr->remove(md_key);
+                         ret = store->ctl.meta.mgr->remove(md_key, null_yield);
                        }
                        formatter->open_object_section("delete_status");
                        formatter->dump_string("bucket_instance", binfo.bucket.get_key());
@@ -1754,7 +1757,7 @@ int RGWBucketAdminOp::fix_lc_shards(RGWRados *store,
     process_single_lc_entry(store, formatter, user_id.tenant, bucket_name);
     formatter->flush(cout);
   } else {
-    int ret = store->meta_mgr->list_keys_init("bucket", marker, &handle);
+    int ret = store->ctl.meta.mgr->list_keys_init("bucket", marker, &handle);
     if (ret < 0) {
       std::cerr << "ERROR: can't get key: " << cpp_strerror(-ret) << std::endl;
       return ret;
@@ -1763,13 +1766,13 @@ int RGWBucketAdminOp::fix_lc_shards(RGWRados *store,
     {
       formatter->open_array_section("lc_fix_status");
       auto sg = make_scope_guard([&store, &handle, &formatter](){
-                                   store->meta_mgr->list_keys_complete(handle);
+                                   store->ctl.meta.mgr->list_keys_complete(handle);
                                    formatter->close_section(); // lc_fix_status
                                    formatter->flush(cout);
                                  });
       do {
         list<std::string> keys;
-        ret = store->meta_mgr->list_keys_next(handle, default_max_keys, keys, &truncated);
+        ret = store->ctl.meta.mgr->list_keys_next(handle, default_max_keys, keys, &truncated);
         if (ret < 0 && ret != -ENOENT) {
           std::cerr << "ERROR: lists_keys_next(): " << cpp_strerror(-ret) << std::endl;
           return ret;
@@ -2417,12 +2420,12 @@ public:
      * it immediately and don't want to invalidate our cached objv_version or the bucket obj removal
      * will incorrectly fail.
      */
-    ret = ctl.bucket->unlink_bucket(be.owner, be.bucket, false);
+    ret = ctl.bucket->unlink_bucket(be.owner, be.bucket, y, false);
     if (ret < 0) {
       lderr(svc.bucket->ctx()) << "could not unlink bucket=" << entry << " owner=" << be.owner << dendl;
     }
 
-    ret = svc.bucket->remove_bucket_entrypoint_info(ctx, entry, &objv_tracker);
+    ret = svc.bucket->remove_bucket_entrypoint_info(ctx, entry, &objv_tracker, y);
     if (ret < 0) {
       lderr(svc.bucket->ctx()) << "could not delete bucket=" << entry << dendl;
     }
@@ -2451,7 +2454,8 @@ public:
   RGWMetadataHandlerPut_Bucket(RGWBucketMetadataHandler *_handler,
                                RGWSI_MetaBackend_Handler::Op *op, string& entry,
                                RGWMetadataObject *_obj, RGWObjVersionTracker& objv_tracker,
-                               RGWMDLogSyncType type) : RGWMetadataHandlerPut_SObj(_handler, op, entry, obj, objv_tracker, type),
+                              optional_yield y,
+                               RGWMDLogSyncType type) : RGWMetadataHandlerPut_SObj(_handler, op, entry, obj, objv_tracker, y, type),
                                                         bhandler(_handler) {
     obj = static_cast<RGWBucketEntryMetadataObject *>(_obj);
   }
@@ -2468,9 +2472,10 @@ public:
 int RGWBucketMetadataHandler::do_put(RGWSI_MetaBackend_Handler::Op *op, string& entry,
                                      RGWMetadataObject *obj,
                                      RGWObjVersionTracker& objv_tracker,
+                                    optional_yield y,
                                      RGWMDLogSyncType type)
 {
-  RGWMetadataHandlerPut_Bucket put_op(this, op, entry, obj, objv_tracker, type);
+  RGWMetadataHandlerPut_Bucket put_op(this, op, entry, obj, objv_tracker, y, type);
   return do_put_operate(&put_op);
 }
 
@@ -2493,7 +2498,8 @@ int RGWMetadataHandlerPut_Bucket::put_checked()
                                                            false,
                                                            mtime,
                                                            pattrs,
-                                                           &objv_tracker);
+                                                           &objv_tracker,
+                                                          y);
 }
 
 int RGWMetadataHandlerPut_Bucket::put_post()
@@ -2504,9 +2510,9 @@ int RGWMetadataHandlerPut_Bucket::put_post()
 
   /* link bucket */
   if (be.linked) {
-    ret = bhandler->ctl.bucket->link_bucket(be.owner, be.bucket, be.creation_time, false);
+    ret = bhandler->ctl.bucket->link_bucket(be.owner, be.bucket, be.creation_time, y, false);
   } else {
-    ret = bhandler->ctl.bucket->unlink_bucket(be.owner, be.bucket, false);
+    ret = bhandler->ctl.bucket->unlink_bucket(be.owner, be.bucket, y, false);
   }
 
   return ret;
@@ -2670,7 +2676,7 @@ public:
 
     /* link new bucket */
 
-    ret = ctl.bucket->link_bucket(new_be.owner, new_be.bucket, new_be.creation_time, false, y);
+    ret = ctl.bucket->link_bucket(new_be.owner, new_be.bucket, new_be.creation_time, y, false);
     if (ret < 0) {
       ldout(cct, 0) << "ERROR: failed to link new bucket for bucket=" << new_be.bucket << " ret=" << ret << dendl;
       return ret;
@@ -2678,7 +2684,7 @@ public:
 
     /* clean up old stuff */
 
-    ret = ctl.bucket->unlink_bucket(be.owner, entry_bucket, false, y);
+    ret = ctl.bucket->unlink_bucket(be.owner, entry_bucket, y, false);
     if (ret < 0) {
         lderr(cct) << "could not unlink bucket=" << entry << " owner=" << be.owner << dendl;
     }
@@ -2716,7 +2722,7 @@ public:
     if (entry.find("-deleted-") != string::npos) {
       RGWObjVersionTracker ot;
       RGWMetadataObject *robj;
-      int ret = do_get(op, entry, &robj);
+      int ret = do_get(op, entry, &robj, y);
       if (ret != -ENOENT) {
         if (ret < 0) {
           return ret;
@@ -2802,6 +2808,7 @@ public:
 
   int do_put(RGWSI_MetaBackend_Handler::Op *op, string& entry,
              RGWMetadataObject *_obj, RGWObjVersionTracker& objv_tracker,
+            optional_yield y,
              RGWMDLogSyncType sync_type) override;
 
   int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker,
@@ -2814,7 +2821,7 @@ public:
     if (ret < 0 && ret != -ENOENT)
       return ret;
 
-    return svc.bucket->remove_bucket_instance_info(ctx, entry, &bci.info.objv_tracker);
+    return svc.bucket->remove_bucket_instance_info(ctx, entry, &bci.info.objv_tracker, y);
   }
 
   int call(std::function<int(RGWSI_Bucket_BI_Ctx& ctx)> f) {
@@ -2840,7 +2847,8 @@ public:
                                        RGWBucketInstanceMetadataHandler *_handler,
                                        RGWSI_MetaBackend_Handler::Op *_op, string& entry,
                                        RGWMetadataObject *_obj, RGWObjVersionTracker& objv_tracker,
-                                       RGWMDLogSyncType type) : RGWMetadataHandlerPut_SObj(_handler, _op, entry, obj, objv_tracker, type),
+                                      optional_yield y,
+                                       RGWMDLogSyncType type) : RGWMetadataHandlerPut_SObj(_handler, _op, entry, obj, objv_tracker, y, type),
                                                                 bihandler(_handler) {
     obj = static_cast<RGWBucketInstanceMetadataObject *>(_obj);
 
@@ -2929,7 +2937,8 @@ int RGWMetadataHandlerPut_BucketInstance::put_checked()
                                                          orig_info,
                                                          false,
                                                          mtime,
-                                                         pattrs);
+                                                         pattrs,
+                                                        y);
 }
 
 int RGWMetadataHandlerPut_BucketInstance::put_post()
@@ -2949,7 +2958,7 @@ class RGWArchiveBucketInstanceMetadataHandler : public RGWBucketInstanceMetadata
 public:
   RGWArchiveBucketInstanceMetadataHandler() {}
 
-  int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker) override {
+  int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker, optional_yield y) override {
     ldout(cct, 0) << "SKIP: bucket instance removal is not allowed on archive zone: bucket.instance:" << entry << dendl;
     return 0;
   }
@@ -3000,9 +3009,9 @@ int RGWBucketCtl::read_bucket_entrypoint_info(const rgw_bucket& bucket,
                                                    params.objv_tracker,
                                                    params.mtime,
                                                    params.attrs,
+                                                  y,
                                                    params.cache_info,
-                                                   params.refresh_version,
-                                                   y);
+                                                   params.refresh_version);
   });
 }
 
@@ -3032,7 +3041,8 @@ int RGWBucketCtl::remove_bucket_entrypoint_info(const rgw_bucket& bucket,
   return bm_handler->call([&](RGWSI_Bucket_EP_Ctx& ctx) {
     return svc.bucket->remove_bucket_entrypoint_info(ctx,
                                                      RGWSI_Bucket::get_entrypoint_meta_key(bucket),
-                                                     params.objv_tracker);
+                                                     params.objv_tracker,
+                                                    y);
   });
 }
 
@@ -3048,9 +3058,9 @@ int RGWBucketCtl::read_bucket_instance_info(const rgw_bucket& bucket,
                                                  info,
                                                  params.mtime,
                                                  params.attrs,
+                                                y,
                                                  params.cache_info,
-                                                 params.refresh_version,
-                                                 y);
+                                                 params.refresh_version);
   });
 
   if (ret < 0) {
@@ -3078,7 +3088,7 @@ int RGWBucketCtl::read_bucket_info(const rgw_bucket& bucket,
   if (b->bucket_id.empty()) {
     ep.emplace();
 
-    int r = read_bucket_entrypoint_info(*b, &(*ep), RGWBucketCtl::Bucket::GetParams()
+    int r = read_bucket_entrypoint_info(*b, &(*ep), y, RGWBucketCtl::Bucket::GetParams()
                                                     .set_bectx_params(params.bectx_params)
                                                     .set_objv_tracker(ep_objv_tracker));
     if (r < 0) {
@@ -3094,9 +3104,9 @@ int RGWBucketCtl::read_bucket_info(const rgw_bucket& bucket,
                                                  info,
                                                  params.mtime,
                                                  params.attrs,
+                                                y,
                                                  params.cache_info,
-                                                 params.refresh_version,
-                                                 y);
+                                                 params.refresh_version);
   });
 
   if (ret < 0) {
@@ -3137,7 +3147,7 @@ int RGWBucketCtl::store_bucket_instance_info(const rgw_bucket& bucket,
                                             ceph::optional_ref_default<RGWBucketCtl::BucketInstance::PutParams> _params)
 {
   return bmi_handler->call([&](RGWSI_Bucket_BI_Ctx& ctx) {
-    return do_store_bucket_instance_info(ctx, bucket, info, _params, y);
+    return do_store_bucket_instance_info(ctx, bucket, info, y, _params);
   });
 }
 
@@ -3165,7 +3175,8 @@ int RGWBucketCtl::do_store_linked_bucket_info(RGWSI_Bucket_X_Ctx& ctx,
                                               bool exclusive, real_time mtime,
                                               obj_version *pep_objv,
                                               map<string, bufferlist> *pattrs,
-                                              bool create_entry_point)
+                                              bool create_entry_point,
+                                             optional_yield y)
 {
   bool create_head = !info.has_instance_obj || create_entry_point;
 
@@ -3174,7 +3185,8 @@ int RGWBucketCtl::do_store_linked_bucket_info(RGWSI_Bucket_X_Ctx& ctx,
                                                    info,
                                                    orig_info,
                                                    exclusive,
-                                                   mtime, pattrs);
+                                                   mtime, pattrs,
+                                                  y);
   if (ret < 0) {
     return ret;
   }
@@ -3202,7 +3214,8 @@ int RGWBucketCtl::do_store_linked_bucket_info(RGWSI_Bucket_X_Ctx& ctx,
                                                  exclusive,
                                                  mtime,
                                                  pattrs,
-                                                 &ot);
+                                                 &ot,
+                                                y);
   if (ret < 0)
     return ret;
 
@@ -3278,10 +3291,11 @@ int RGWBucketCtl::set_bucket_instance_attrs(RGWBucketInfo& bucket_info,
 int RGWBucketCtl::link_bucket(const rgw_user& user_id,
                               const rgw_bucket& bucket,
                               ceph::real_time creation_time,
+                             optional_yield y,
                               bool update_entrypoint)
 {
   return bm_handler->call([&](RGWSI_Bucket_EP_Ctx& ctx) {
-    return do_link_bucket(ctx, user_id, bucket, creation_time, update_entrypoint);
+    return do_link_bucket(ctx, user_id, bucket, creation_time, y, update_entrypoint);
   });
 }
 
@@ -3289,6 +3303,7 @@ int RGWBucketCtl::do_link_bucket(RGWSI_Bucket_EP_Ctx& ctx,
                                  const rgw_user& user_id,
                                  const rgw_bucket& bucket,
                                  ceph::real_time creation_time,
+                                optional_yield y,
                                  bool update_entrypoint)
 {
   int ret;
@@ -3305,7 +3320,8 @@ int RGWBucketCtl::do_link_bucket(RGWSI_Bucket_EP_Ctx& ctx,
     ret = svc.bucket->read_bucket_entrypoint_info(ctx,
                                                   meta_key,
                                                   &ep, &ot,
-                                                  nullptr, &attrs);
+                                                  nullptr, &attrs,
+                                                 y);
     if (ret < 0 && ret != -ENOENT) {
       ldout(cct, 0) << "ERROR: store->get_bucket_entrypoint_info() returned: "
                     << cpp_strerror(-ret) << dendl;
@@ -3325,13 +3341,13 @@ int RGWBucketCtl::do_link_bucket(RGWSI_Bucket_EP_Ctx& ctx,
   ep.linked = true;
   ep.owner = user_id;
   ep.bucket = bucket;
-  ret = svc.bucket->store_bucket_entrypoint_info(ctx, meta_key, ep, false, real_time(), &attrs, &ot);
+  ret = svc.bucket->store_bucket_entrypoint_info(ctx, meta_key, ep, false, real_time(), &attrs, &ot, y);
   if (ret < 0)
     goto done_err;
 
   return 0;
 done_err:
-  int r = do_unlink_bucket(ctx, user_id, bucket, true);
+  int r = do_unlink_bucket(ctx, user_id, bucket, y, true);
   if (r < 0) {
     ldout(cct, 0) << "ERROR: failed unlinking bucket on error cleanup: "
                            << cpp_strerror(-r) << dendl;
@@ -3339,16 +3355,17 @@ done_err:
   return ret;
 }
 
-int RGWBucketCtl::unlink_bucket(const rgw_user& user_id, const rgw_bucket& bucket, bool update_entrypoint)
+int RGWBucketCtl::unlink_bucket(const rgw_user& user_id, const rgw_bucket& bucket, optional_yield y, bool update_entrypoint)
 {
   return bm_handler->call([&](RGWSI_Bucket_EP_Ctx& ctx) {
-    return do_unlink_bucket(ctx, user_id, bucket, update_entrypoint);
+    return do_unlink_bucket(ctx, user_id, bucket, y, update_entrypoint);
   });
 }
 
 int RGWBucketCtl::do_unlink_bucket(RGWSI_Bucket_EP_Ctx& ctx,
                                    const rgw_user& user_id,
                                    const rgw_bucket& bucket,
+                                  optional_yield y,
                                    bool update_entrypoint)
 {
   int ret = ctl.user->remove_bucket(user_id, bucket);
@@ -3364,7 +3381,7 @@ int RGWBucketCtl::do_unlink_bucket(RGWSI_Bucket_EP_Ctx& ctx,
   RGWObjVersionTracker ot;
   map<string, bufferlist> attrs;
   string meta_key = RGWSI_Bucket::get_entrypoint_meta_key(bucket);
-  ret = svc.bucket->read_bucket_entrypoint_info(ctx, meta_key, &ep, &ot, nullptr, &attrs);
+  ret = svc.bucket->read_bucket_entrypoint_info(ctx, meta_key, &ep, &ot, nullptr, &attrs, y);
   if (ret == -ENOENT)
     return 0;
   if (ret < 0)
@@ -3379,7 +3396,7 @@ int RGWBucketCtl::do_unlink_bucket(RGWSI_Bucket_EP_Ctx& ctx,
   }
 
   ep.linked = false;
-  return svc.bucket->store_bucket_entrypoint_info(ctx, meta_key, ep, false, real_time(), &attrs, &ot);
+  return svc.bucket->store_bucket_entrypoint_info(ctx, meta_key, ep, false, real_time(), &attrs, &ot, y);
 }
 
 int RGWBucketCtl::read_bucket_stats(const rgw_bucket& bucket,
@@ -3402,7 +3419,7 @@ int RGWBucketCtl::read_buckets_stats(map<string, RGWBucketEnt>& m,
 int RGWBucketCtl::sync_user_stats(const rgw_user& user_id, const RGWBucketInfo& bucket_info)
 {
   RGWBucketEnt ent;
-  int r = svc.bi->read_stats(bucket_info, &ent);
+  int r = svc.bi->read_stats(bucket_info, &ent, null_yield);
   if (r < 0) {
     ldout(cct, 20) << __func__ << "(): failed to read bucket stats (r=" << r << ")" << dendl;
     return r;
index 748ed236c4aa548042e5cd382f72b4c3a8c250bc..8b8444b6f11aca13f7189eebb4b46596505a6514 100644 (file)
@@ -339,8 +339,8 @@ public:
           std::string *err_msg = NULL);
 
   int remove(RGWBucketAdminOpState& op_state, optional_yield y, bool bypass_gc = false, bool keep_index_consistent = true, std::string *err_msg = NULL);
-  int link(RGWBucketAdminOpState& op_state, std::string *err_msg = NULL);
-  int unlink(RGWBucketAdminOpState& op_state, std::string *err_msg = NULL);
+  int link(RGWBucketAdminOpState& op_state, optional_yield y, std::string *err_msg = NULL);
+  int unlink(RGWBucketAdminOpState& op_state, optional_yield y, std::string *err_msg = NULL);
   int set_quota(RGWBucketAdminOpState& op_state, std::string *err_msg = NULL);
 
   int remove_object(RGWBucketAdminOpState& op_state, std::string *err_msg = NULL);
@@ -777,8 +777,8 @@ public:
                                  optional_yield y,
                                  ceph::optional_ref_default<RGWBucketCtl::BucketInstance::PutParams> params = std::nullopt);
   int remove_bucket_instance_info(const rgw_bucket& bucket,
-                                  optional_yield y,
                                   RGWBucketInfo& info,
+                                  optional_yield y,
                                   ceph::optional_ref_default<RGWBucketCtl::BucketInstance::RemoveParams> params = std::nullopt);
 
   /*
@@ -790,7 +790,8 @@ public:
   int read_bucket_info(const rgw_bucket& bucket,
                        RGWBucketInfo *info,
                        optional_yield y,
-                       ceph::optional_ref_default<RGWBucketCtl::BucketInstance::GetParams> _params = std::nullopt);
+                       ceph::optional_ref_default<RGWBucketCtl::BucketInstance::GetParams> _params = std::nullopt,
+                      RGWObjVersionTracker *ep_objv_tracker = nullptr);
 
 
   int set_bucket_instance_attrs(RGWBucketInfo& bucket_info,
@@ -802,10 +803,12 @@ public:
   int link_bucket(const rgw_user& user_id,
                   const rgw_bucket& bucket,
                   ceph::real_time creation_time,
+                 optional_yield y,
                   bool update_entrypoint = true);
 
   int unlink_bucket(const rgw_user& user_id,
                     const rgw_bucket& bucket,
+                   optional_yield y,
                     bool update_entrypoint = true);
 
   int read_buckets_stats(map<string, RGWBucketEnt>& m,
@@ -835,17 +838,20 @@ private:
                                   bool exclusive, real_time mtime,
                                   obj_version *pep_objv,
                                   map<string, bufferlist> *pattrs,
-                                  bool create_entry_point);
+                                  bool create_entry_point,
+                                 optional_yield);
 
   int do_link_bucket(RGWSI_Bucket_EP_Ctx& ctx,
                      const rgw_user& user,
                      const rgw_bucket& bucket,
                      ceph::real_time creation_time,
+                    optional_yield y,
                      bool update_entrypoint);
 
   int do_unlink_bucket(RGWSI_Bucket_EP_Ctx& ctx,
                        const rgw_user& user_id,
                        const rgw_bucket& bucket,
+                      optional_yield y,
                        bool update_entrypoint);
 
 };
index 90c8f6c25587e281e9dafd75ec1f317ecc250b9e..dc1abd813bb6b1e064082c6bfbbefcf7c1cf240a 100644 (file)
@@ -209,10 +209,10 @@ int RGWBucketCreateLocalCR::Request::_send_request()
     bucket = info.bucket;
   }
 
-  ret = store->ctl.bucket->link_bucket(user, bucket, info.creation_time, false);
+  ret = store->ctl.bucket->link_bucket(user, bucket, info.creation_time, null_yield, false);
   if (ret && !existed && ret != -EEXIST) {
     /* if it exists (or previously existed), don't remove it! */
-    int r = store->ctl.bucket->unlink_bucket(user, bucket);
+    int r = store->ctl.bucket->unlink_bucket(user, bucket, null_yield);
     if (r < 0) {
       ldout(cct, 0) << "WARNING: failed to unlink bucket: ret=" << r << dendl;
     }
index b75451d8c8167f00299250a71901e73d44859d7f..dda12a87dd1b2be30c2384fece6877a3157a7a76 100644 (file)
@@ -829,10 +829,10 @@ public:
               char buf[16];
               snprintf(buf, sizeof(buf), ":%d", i);
               s = key + buf;
-              yield entries_index->append(s, store->svc.data_log_rados->get_log_shard_id(meta_info.data.get_bucket_info().bucket, i));
+              yield entries_index->append(s, store->svc.datalog_rados->get_log_shard_id(meta_info.data.get_bucket_info().bucket, i));
             }
           } else {
-            yield entries_index->append(key, store->svc.data_log_rados->get_log_shard_id(meta_info.data.get_bucket_info().bucket, -1));
+            yield entries_index->append(key, store->svc.datalog_rados->get_log_shard_id(meta_info.data.get_bucket_info().bucket, -1));
           }
         }
         truncated = result.truncated;
index a4493704072e8df1e3d6079c0b2b86b01f388892..388fc836512f5e2776f8e1a8f7ac7715416636ef 100644 (file)
@@ -28,6 +28,7 @@
 #include "fmt/format.h"
 
 #include "services/svc_sys_obj.h"
+#include "services/svc_zone.h"
 #include "services/svc_tier_rados.h"
 
 #define dout_context g_ceph_context
@@ -1434,7 +1435,8 @@ int RGWLC::set_bucket_config(RGWBucketInfo& bucket_info,
   attrs[RGW_ATTR_LC] = std::move(lc_bl);
 
   int ret = store->ctl.bucket->set_bucket_instance_attrs(bucket_info, attrs,
-                                                        &bucket_info.objv_tracker);
+                                                        &bucket_info.objv_tracker,
+                                                        null_yield);
   if (ret < 0)
     return ret;
 
@@ -1455,7 +1457,8 @@ int RGWLC::remove_bucket_config(RGWBucketInfo& bucket_info,
   map<string, bufferlist> attrs = bucket_attrs;
   attrs.erase(RGW_ATTR_LC);
   int ret = store->ctl.bucket->set_bucket_instance_attrs(bucket_info, attrs,
-                                                        &bucket_info.objv_tracker);
+                                                        &bucket_info.objv_tracker,
+                                                        null_yield);
 
   rgw_bucket& bucket = bucket_info.bucket;
 
index 6cf5b44a06b5a727872027fc22b524f2b1fc3a54..c9395a26c51a774bd990a19c664b6e78c5934598 100644 (file)
@@ -320,21 +320,14 @@ public:
     return -ENOTSUP;
   }
 
-  int remove(string& entry, RGWObjVersionTracker& objv_tracker optional_yield y, override {
-    return -ENOTSUP;
-  }
-
-  int mutate(const string& entry,
-             const ceph::real_time& mtime,
-             RGWObjVersionTracker *objv_tracker,
-             RGWMDLogStatus op_type,
-             std::function<int()> f) {
+  int remove(string& entry, RGWObjVersionTracker& objv_tracker, optional_yield y) override {
     return -ENOTSUP;
   }
 
   int mutate(const string& entry,
              const ceph::real_time& mtime,
              RGWObjVersionTracker *objv_tracker,
+             optional_yield y,
              RGWMDLogStatus op_type,
              std::function<int()> f) {
     return -ENOTSUP;
@@ -411,7 +404,8 @@ RGWMetadataHandler_GenericMetaBE::Put::Put(RGWMetadataHandler_GenericMetaBE *_ha
 
 RGWMetadataHandlerPut_SObj::RGWMetadataHandlerPut_SObj(RGWMetadataHandler_GenericMetaBE *handler, RGWSI_MetaBackend_Handler::Op *op,
                                                        string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker,
-                                                       RGWMDLogSyncType type) : Put(handler, op, entry, obj, objv_tracker, type) {
+                                                      optional_yield y,
+                                                       RGWMDLogSyncType type) : Put(handler, op, entry, obj, objv_tracker, y, type) {
 }
 
 RGWMetadataHandlerPut_SObj::~RGWMetadataHandlerPut_SObj() {
@@ -486,21 +480,21 @@ int RGWMetadataHandler_GenericMetaBE::do_put_operate(Put *put_op)
   return 0;
 }
 
-int RGWMetadataHandler_GenericMetaBE::get(string& entry, RGWMetadataObject **obj)
+int RGWMetadataHandler_GenericMetaBE::get(string& entry, RGWMetadataObject **obj, optional_yield y)
 {
   return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
     return do_get(op, entry, obj, y);
   });
 }
 
-int RGWMetadataHandler_GenericMetaBE::put(string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, RGWMDLogSyncType type)
+int RGWMetadataHandler_GenericMetaBE::put(string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, optional_yield y, RGWMDLogSyncType type)
 {
   return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
     return do_put(op, entry, obj, objv_tracker, y, type);
   });
 }
 
-int RGWMetadataHandler_GenericMetaBE::remove(string& entry, RGWObjVersionTracker& objv_tracker)
+int RGWMetadataHandler_GenericMetaBE::remove(string& entry, RGWObjVersionTracker& objv_tracker, optional_yield y)
 {
   return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
     return do_remove(op, entry, objv_tracker, y);
@@ -510,6 +504,7 @@ int RGWMetadataHandler_GenericMetaBE::remove(string& entry, RGWObjVersionTracker
 int RGWMetadataHandler_GenericMetaBE::mutate(const string& entry,
                                              const ceph::real_time& mtime,
                                              RGWObjVersionTracker *objv_tracker,
+                                             optional_yield y,
                                              RGWMDLogStatus op_type,
                                              std::function<int()> f)
 {
@@ -518,21 +513,7 @@ int RGWMetadataHandler_GenericMetaBE::mutate(const string& entry,
     return op->mutate(entry,
                       params,
                       objv_tracker,
-                      f);
-  });
-}
-
-int RGWMetadataHandler_GenericMetaBE::mutate(const string& entry,
-                                             const ceph::real_time& mtime,
-                                             RGWObjVersionTracker *objv_tracker,
-                                             RGWMDLogStatus op_type,
-                                             std::function<int()> f)
-{
-  return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
-    RGWSI_MetaBackend::MutateParams params(mtime, op_type);
-    return op->mutate(entry,
-                      params,
-                      objv_tracker,
+                     y,
                       f);
   });
 }
@@ -648,7 +629,7 @@ int RGWMetadataManager::find_handler(const string& metadata_key, RGWMetadataHand
 
 }
 
-int RGWMetadataManager::get(string& metadata_key, Formatter *f)
+int RGWMetadataManager::get(string& metadata_key, Formatter *f, optional_yield y)
 {
   RGWMetadataHandler *handler;
   string entry;
@@ -659,7 +640,7 @@ int RGWMetadataManager::get(string& metadata_key, Formatter *f)
 
   RGWMetadataObject *obj;
 
-  ret = handler->get(entry, &obj);
+  ret = handler->get(entry, &obj, y);
   if (ret < 0) {
     return ret;
   }
@@ -681,6 +662,7 @@ int RGWMetadataManager::get(string& metadata_key, Formatter *f)
 }
 
 int RGWMetadataManager::put(string& metadata_key, bufferlist& bl,
+                           optional_yield y,
                             RGWMDLogSyncType sync_type,
                             obj_version *existing_version)
 {
@@ -721,7 +703,7 @@ int RGWMetadataManager::put(string& metadata_key, bufferlist& bl,
     return -EINVAL;
   }
 
-  ret = handler->put(entry, obj, objv_tracker, sync_type);
+  ret = handler->put(entry, obj, objv_tracker, y, sync_type);
   if (existing_version) {
     *existing_version = objv_tracker.read_version;
   }
@@ -731,7 +713,7 @@ int RGWMetadataManager::put(string& metadata_key, bufferlist& bl,
   return ret;
 }
 
-int RGWMetadataManager::remove(string& metadata_key)
+int RGWMetadataManager::remove(string& metadata_key, optional_yield y)
 {
   RGWMetadataHandler *handler;
   string entry;
@@ -742,7 +724,7 @@ int RGWMetadataManager::remove(string& metadata_key)
   }
 
   RGWMetadataObject *obj;
-  ret = handler->get(entry, &obj);
+  ret = handler->get(entry, &obj, y);
   if (ret < 0) {
     return ret;
   }
@@ -750,12 +732,13 @@ int RGWMetadataManager::remove(string& metadata_key)
   objv_tracker.read_version = obj->get_version();
   delete obj;
 
-  return handler->remove(entry, objv_tracker);
+  return handler->remove(entry, objv_tracker, y);
 }
 
 int RGWMetadataManager::mutate(const string& metadata_key,
                                const ceph::real_time& mtime,
                                RGWObjVersionTracker *objv_tracker,
+                              optional_yield y,
                                RGWMDLogStatus op_type,
                                std::function<int()> f)
 {
@@ -767,7 +750,7 @@ int RGWMetadataManager::mutate(const string& metadata_key,
     return ret;
   }
 
-  return handler->mutate(entry, mtime, objv_tracker, op_type, f);
+  return handler->mutate(entry, mtime, objv_tracker, y, op_type, f);
 }
 
 int RGWMetadataManager::get_shard_id(const string& section, const string& entry, int *shard_id)
index aca64f6afe25c85cdd8a82b3d2a96fd9a42a6ff4..194074d5daa37e3be148832f8a7dc8ebcc3b173e 100644 (file)
@@ -68,13 +68,14 @@ public:
 
   virtual RGWMetadataObject *get_meta_obj(JSONObj *jo, const obj_version& objv, const ceph::real_time& mtime) = 0;
 
-  virtual int get(string& entry, RGWMetadataObject **obj) = 0;
-  virtual int put(string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, RGWMDLogSyncType type) = 0;
-  virtual int remove(string& entry, RGWObjVersionTracker& objv_tracker) = 0;
+  virtual int get(string& entry, RGWMetadataObject **obj, optional_yield) = 0;
+  virtual int put(string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, optional_yield, RGWMDLogSyncType type) = 0;
+  virtual int remove(string& entry, RGWObjVersionTracker& objv_tracker, optional_yield) = 0;
 
   virtual int mutate(const string& entry,
                     const ceph::real_time& mtime,
                     RGWObjVersionTracker *objv_tracker,
+                     optional_yield y,
                     RGWMDLogStatus op_type,
                     std::function<int()> f) = 0;
 
@@ -102,11 +103,11 @@ public:
 protected:
   RGWSI_MetaBackend_Handler *be_handler;
 
-  virtual int do_get(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject **obj) = 0;
+  virtual int do_get(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject **obj, optional_yield y) = 0;
   virtual int do_put(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject *obj,
-                     RGWObjVersionTracker& objv_tracker, RGWMDLogSyncType type) = 0;
+                     RGWObjVersionTracker& objv_tracker, optional_yield y, RGWMDLogSyncType type) = 0;
   virtual int do_put_operate(Put *put_op);
-  virtual int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker) = 0;
+  virtual int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker, optional_yield y) = 0;
 
 public:
   RGWMetadataHandler_GenericMetaBE() {}
@@ -156,13 +157,14 @@ public:
     }
   };
 
-  int get(string& entry, RGWMetadataObject **obj) override;
-  int put(string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, RGWMDLogSyncType type) override;
-  int remove(string& entry, RGWObjVersionTracker& objv_tracker) override;
+  int get(string& entry, RGWMetadataObject **obj, optional_yield) override;
+  int put(string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, optional_yield, RGWMDLogSyncType type) override;
+  int remove(string& entry, RGWObjVersionTracker& objv_tracker, optional_yield) override;
 
   int mutate(const string& entry,
             const ceph::real_time& mtime,
             RGWObjVersionTracker *objv_tracker,
+             optional_yield y,
             RGWMDLogStatus op_type,
             std::function<int()> f) override;
 
@@ -233,12 +235,7 @@ public:
   int mutate(const string& metadata_key,
             const ceph::real_time& mtime,
             RGWObjVersionTracker *objv_tracker,
-            RGWMDLogStatus op_type,
-            std::function<int()> f);
-
-  int mutate(const string& metadata_key,
-            const ceph::real_time& mtime,
-            RGWObjVersionTracker *objv_tracker,
+             optional_yield y,
             RGWMDLogStatus op_type,
             std::function<int()> f);
 
@@ -268,6 +265,7 @@ protected:
 public:
   RGWMetadataHandlerPut_SObj(RGWMetadataHandler_GenericMetaBE *handler, RGWSI_MetaBackend_Handler::Op *op,
                              string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker,
+                            optional_yield y,
                              RGWMDLogSyncType type);
   ~RGWMetadataHandlerPut_SObj();
 
index 53167ca2ccd17219298544b4a8e0497478ed67c2..8ccc7392c5ae09999a95e8e5c9dff4148b855774 100644 (file)
@@ -695,7 +695,7 @@ int rgw_build_bucket_policies(RGWRados* store, struct req_state* s)
   /* handle user ACL only for those APIs which support it */
   if (s->user_acl) {
     map<string, bufferlist> uattrs;
-    ret = store->ctl.user->get_attrs_by_uid(acct_acl_user.uid, &uattrs);
+    ret = store->ctl.user->get_attrs_by_uid(acct_acl_user.uid, &uattrs, s->yield);
     if (!ret) {
       ret = get_user_policy_from_attr(s->cct, store, uattrs, *s->user_acl);
     }
@@ -721,7 +721,7 @@ int rgw_build_bucket_policies(RGWRados* store, struct req_state* s)
   if (! s->user->user_id.empty() && s->auth.identity->get_identity_type() != TYPE_ROLE) {
     try {
       map<string, bufferlist> uattrs;
-      if (ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &uattrs); ! ret) {
+      if (ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &uattrs, s->yield); ! ret) {
         if (s->iam_user_policies.empty()) {
           s->iam_user_policies = get_iam_user_policy_from_attr(s->cct, store, uattrs, s->user->user_id.tenant);
         } else {
@@ -1199,7 +1199,7 @@ void RGWPutBucketTags::execute() {
   op_ret = retry_raced_bucket_write(store, s, [this] {
     map<string, bufferlist> attrs = s->bucket_attrs;
     attrs[RGW_ATTR_TAGS] = tags_bl;
-    return rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker);
+    return store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs, &s->bucket_info.objv_tracker, s->yield);
   });
 
 }
@@ -1228,7 +1228,7 @@ void RGWDeleteBucketTags::execute()
   op_ret = retry_raced_bucket_write(store, s, [this] {
     map<string, bufferlist> attrs = s->bucket_attrs;
     attrs.erase(RGW_ATTR_TAGS);
-    op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker);
+    op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs, &s->bucket_info.objv_tracker, s->yield);
     if (op_ret < 0) {
       ldpp_dout(this, 0) << "RGWDeleteBucketTags() failed to remove RGW_ATTR_TAGS on bucket="
                         << s->bucket.name
@@ -2300,7 +2300,7 @@ void RGWListBuckets::execute()
   }
 
   if (supports_account_metadata()) {
-    op_ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &attrs);
+    op_ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &attrs, s->yield);
     if (op_ret < 0) {
       goto send_end;
     }
@@ -3258,10 +3258,10 @@ void RGWCreateBucket::execute()
   }
 
   op_ret = store->ctl.bucket->link_bucket(s->user->user_id, s->bucket,
-                                          info.creation_time, false);
+                                          info.creation_time, s->yield, false);
   if (op_ret && !existed && op_ret != -EEXIST) {
     /* if it exists (or previously existed), don't remove it! */
-    op_ret = store->ctl.bucket->unlink_bucket(s->user->user_id, s->bucket);
+    op_ret = store->ctl.bucket->unlink_bucket(s->user->user_id, s->bucket, s->yield);
     if (op_ret < 0) {
       ldpp_dout(this, 0) << "WARNING: failed to unlink bucket: ret=" << op_ret
                       << dendl;
@@ -3318,7 +3318,8 @@ void RGWCreateBucket::execute()
 
       /* This will also set the quota on the bucket. */
       op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs,
-                                                           &s->bucket_info.objv_tracker);
+                                                           &s->bucket_info.objv_tracker,
+                                                           s->yield);
     } while (op_ret == -ECANCELED && tries++ < 20);
 
     /* Restore the proper return code. */
@@ -3430,7 +3431,7 @@ void RGWDeleteBucket::execute()
 
   if (op_ret == 0) {
     op_ret = store->ctl.bucket->unlink_bucket(s->bucket_info.owner,
-                                              s->bucket, false);
+                                              s->bucket, s->yield, false);
     if (op_ret < 0) {
       ldpp_dout(this, 0) << "WARNING: failed to unlink bucket: ret=" << op_ret
                       << dendl;
@@ -4325,6 +4326,7 @@ int RGWPutMetadataAccount::init_processing()
   }
 
   op_ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &orig_attrs,
+                                            s->yield,
                                              &acct_op_tracker);
   if (op_ret < 0) {
     return op_ret;
@@ -4497,7 +4499,8 @@ void RGWPutMetadataBucket::execute()
        * to this fact, the new quota settings can be serialized with
        * the same call. */
       op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs,
-                                                           &s->bucket_info.objv_tracker);
+                                                           &s->bucket_info.objv_tracker,
+                                                           s->yield);
       return op_ret;
     });
 }
@@ -5365,7 +5368,8 @@ void RGWPutACLs::execute()
     attrs = s->bucket_attrs;
     attrs[RGW_ATTR_ACL] = bl;
     op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs,
-                                                         &s->bucket_info.objv_tracker);
+                                                         &s->bucket_info.objv_tracker,
+                                                         s->yield);
   }
   if (op_ret == -ECANCELED) {
     op_ret = 0; /* lost a race, but it's ok because acls are immutable */
@@ -5479,7 +5483,8 @@ void RGWDeleteLC::execute()
   map<string, bufferlist> attrs = s->bucket_attrs;
   attrs.erase(RGW_ATTR_LC);
   op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs,
-                                                       &s->bucket_info.objv_tracker);
+                                                       &s->bucket_info.objv_tracker,
+                                                       s->yield);
   if (op_ret < 0) {
     ldpp_dout(this, 0) << "RGWLC::RGWDeleteLC() failed to set attrs on bucket="
         << s->bucket.name << " returned err=" << op_ret << dendl;
@@ -5536,7 +5541,8 @@ void RGWPutCORS::execute()
       map<string, bufferlist> attrs = s->bucket_attrs;
       attrs[RGW_ATTR_CORS] = cors_bl;
       return store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs,
-                                                         &s->bucket_info.objv_tracker);
+                                                         &s->bucket_info.objv_tracker,
+                                                         s->yield);
     });
 }
 
@@ -5571,7 +5577,8 @@ void RGWDeleteCORS::execute()
       map<string, bufferlist> attrs = s->bucket_attrs;
       attrs.erase(RGW_ATTR_CORS);
       op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs,
-                                                           &s->bucket_info.objv_tracker);
+                                                           &s->bucket_info.objv_tracker,
+                                                           s->yield);
       if (op_ret < 0) {
        ldpp_dout(this, 0) << "RGWLC::RGWDeleteCORS() failed to set attrs on bucket=" << s->bucket.name
                         << " returned err=" << op_ret << dendl;
@@ -6517,7 +6524,7 @@ bool RGWBulkDelete::Deleter::delete_single(const acct_path_t& path)
   } else {
     ret = store->delete_bucket(binfo, ot, s->yield);
     if (0 == ret) {
-      ret = store->ctl.bucket->unlink_bucket(binfo.owner, binfo.bucket, false);
+      ret = store->ctl.bucket->unlink_bucket(binfo.owner, binfo.bucket, s->yield, false);
       if (ret < 0) {
         ldpp_dout(s, 0) << "WARNING: failed to unlink bucket: ret=" << ret << dendl;
       }
@@ -6889,10 +6896,11 @@ int RGWBulkUploadOp::handle_dir(const boost::string_ref path)
   }
 
   op_ret = store->ctl.bucket->link_bucket(s->user->user_id, bucket,
-                                          out_info.creation_time, false);
+                                          out_info.creation_time,
+                                         s->yield, false);
   if (op_ret && !existed && op_ret != -EEXIST) {
     /* if it exists (or previously existed), don't remove it! */
-    op_ret = store->ctl.bucket->unlink_bucket(s->user->user_id, bucket);
+    op_ret = store->ctl.bucket->unlink_bucket(s->user->user_id, bucket, s->yield);
     if (op_ret < 0) {
       ldpp_dout(this, 0) << "WARNING: failed to unlink bucket: ret=" << op_ret << dendl;
     }
@@ -7277,7 +7285,8 @@ void RGWSetAttrs::execute()
       s->bucket_attrs[iter.first] = std::move(iter.second);
     }
     op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs,
-                                                         &s->bucket_info.objv_tracker);
+                                                         &s->bucket_info.objv_tracker,
+                                                         s->yield);
   }
 }
 
@@ -7499,7 +7508,8 @@ void RGWPutBucketPolicy::execute()
        attrs[RGW_ATTR_IAM_POLICY].clear();
        attrs[RGW_ATTR_IAM_POLICY].append(p.text);
        op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs,
-                                                             &s->bucket_info.objv_tracker);
+                                                             &s->bucket_info.objv_tracker,
+                                                             s->yield);
        return op_ret;
       });
   } catch (rgw::IAM::PolicyParseException& e) {
@@ -7574,7 +7584,8 @@ void RGWDeleteBucketPolicy::execute()
       auto attrs = s->bucket_attrs;
       attrs.erase(RGW_ATTR_IAM_POLICY);
       op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs,
-                                                           &s->bucket_info.objv_tracker);
+                                                           &s->bucket_info.objv_tracker,
+                                                           s->yield);
       return op_ret;
     });
 }
index 1478ae170501ae0f6cea6ec5ec1fdb25b404075a..33c6de8e7c5dbe198de03fb72a2f2df5863e69d7 100644 (file)
@@ -91,7 +91,7 @@ class RGWOTPMetadataHandler : public RGWOTPMetadataHandlerBase {
     return new RGWOTPMetadataObject(std::move(devices), objv, mtime);
   }
 
-  int do_get(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject **obj) override {
+  int do_get(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject **obj, optional_yield y) override {
     RGWObjVersionTracker objv_tracker;
 
     std::unique_ptr<RGWOTPMetadataObject> mdo(new RGWOTPMetadataObject);
@@ -103,7 +103,8 @@ class RGWOTPMetadataHandler : public RGWOTPMetadataHandlerBase {
                                 entry,
                                 &mdo->get_devs(),
                                 &mdo->get_mtime(),
-                                &objv_tracker);
+                                &objv_tracker,
+                                y);
     if (ret < 0) {
       return ret;
     }
@@ -117,6 +118,7 @@ class RGWOTPMetadataHandler : public RGWOTPMetadataHandlerBase {
 
   int do_put(RGWSI_MetaBackend_Handler::Op *op, string& entry,
              RGWMetadataObject *_obj, RGWObjVersionTracker& objv_tracker,
+             optional_yield y,
              RGWMDLogSyncType type) override {
     RGWOTPMetadataObject *obj = static_cast<RGWOTPMetadataObject *>(_obj);
 
@@ -126,7 +128,8 @@ class RGWOTPMetadataHandler : public RGWOTPMetadataHandlerBase {
                                  entry,
                                  obj->devices,
                                  obj->mtime,
-                                 &objv_tracker);
+                                 &objv_tracker,
+                                 y);
     if (ret < 0) {
       return ret;
     }
@@ -134,14 +137,16 @@ class RGWOTPMetadataHandler : public RGWOTPMetadataHandlerBase {
     return STATUS_APPLIED;
   }
 
-  int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker) override {
+  int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker,
+                optional_yield y) override {
     RGWSI_MBOTP_RemoveParams params;
 
     RGWSI_OTP_BE_Ctx be_ctx(op->ctx());
 
     return svc.otp->remove_all(be_ctx,
                                entry,
-                               &objv_tracker);
+                               &objv_tracker,
+                               y);
   }
 
 public:
@@ -167,30 +172,33 @@ void RGWOTPCtl::init(RGWOTPMetadataHandler *_meta_handler)
 
 int RGWOTPCtl::read_all(const rgw_user& uid,
                         RGWOTPInfo *info,
+                        optional_yield y,
                         ceph::optional_ref_default<RGWOTPCtl::GetParams> _params)
 {
   auto& params = *_params;
   info->uid = uid;
   return meta_handler->call([&](RGWSI_OTP_BE_Ctx& ctx) {
-    return svc.otp->read_all(ctx, uid, &info->devices, params.mtime, params.objv_tracker);
+    return svc.otp->read_all(ctx, uid, &info->devices, params.mtime, params.objv_tracker, y);
   });
 }
 
 int RGWOTPCtl::store_all(const RGWOTPInfo& info,
+                         optional_yield y,
                          ceph::optional_ref_default<RGWOTPCtl::PutParams> _params)
 {
   auto& params = *_params;
   return meta_handler->call([&](RGWSI_OTP_BE_Ctx& ctx) {
-    return svc.otp->store_all(ctx, info.uid, info.devices, params.mtime, params.objv_tracker);
+    return svc.otp->store_all(ctx, info.uid, info.devices, params.mtime, params.objv_tracker, y);
   });
 }
 
 int RGWOTPCtl::remove_all(const rgw_user& uid,
-                         ceph::optional_ref_default<RGWOTPCtl::RemoveParams> _params)
+                          optional_yield y,
+                          ceph::optional_ref_default<RGWOTPCtl::RemoveParams> _params)
 {
   auto& params = *_params;
   return meta_handler->call([&](RGWSI_OTP_BE_Ctx& ctx) {
-    return svc.otp->remove_all(ctx, uid, params.objv_tracker);
+    return svc.otp->remove_all(ctx, uid, params.objv_tracker, y);
   });
 }
 
index 6f2e9d8f7c008b508e86158c7fcf1aae93bfae16..7678070aff401f70bf7c462d71100f611ba16ae6 100644 (file)
@@ -94,9 +94,9 @@ public:
     }
   };
 
-  int read_all(const rgw_user& uid, RGWOTPInfo *info, ceph::optional_ref_default<GetParams> params);
-  int store_all(const RGWOTPInfo& info, ceph::optional_ref_default<PutParams> params);
-  int remove_all(const rgw_user& user, ceph::optional_ref_default<RemoveParams> params);
+  int read_all(const rgw_user& uid, RGWOTPInfo *info, optional_yield y, ceph::optional_ref_default<GetParams> params);
+  int store_all(const RGWOTPInfo& info, optional_yield y, ceph::optional_ref_default<PutParams> params);
+  int remove_all(const rgw_user& user, optional_yield y, ceph::optional_ref_default<RemoveParams> params);
 };
 
 #endif
index e7e09430823e27dc6d6e421013cebcad16b6f9a7..58afda85d9f5903176608d3fb3803429b786c0c8 100644 (file)
@@ -561,7 +561,7 @@ int AppendObjectProcessor::prepare(optional_yield y)
       size_t pos = s.find("-");
       cur_etag = s.substr(0, pos);
     }
-    cur_manifest = &astate->manifest;
+    cur_manifest = &(*astate->manifest);
     manifest.set_prefix(cur_manifest->get_prefix());
   }
   manifest.set_multipart_part_rule(store->ctx()->_conf->rgw_obj_stripe_size, cur_part_num);
index 2efc833af5f2cc4063fea9c3daf49e6d67ab3a5a..0426cbcc72bdc438dec98d58558e3318bd7af62e 100644 (file)
@@ -2215,8 +2215,8 @@ int RGWRados::get_obj_head_ref(const RGWBucketInfo& bucket_info, const rgw_obj&
 
   ref->pool = svc.rados->pool(pool);
 
-  int r = ref->pool.open(RGWSI_RADOS::Pool::OpenParams()
-                         .set_mostly_omap(false);
+  int r = ref->pool.open(RGWSI_RADOS::OpenParams()
+                         .set_mostly_omap(false));
   if (r < 0) {
     ldout(cct, 0) << "ERROR: failed opening data pool (pool=" << pool << "); r=" << r << dendl;
     return r;
@@ -2236,8 +2236,8 @@ int RGWRados::get_raw_obj_ref(const rgw_raw_obj& obj, rgw_rados_ref *ref)
     ref->obj.pool = svc.zone->get_zone_params().domain_root;
   }
   ref->pool = svc.rados->pool(obj.pool);
-  int r = ref->pool.open(RGWSI_RADOS::Pool::OpenParams()
-                         .set_mostly_omap(false);
+  int r = ref->pool.open(RGWSI_RADOS::OpenParams()
+                         .set_mostly_omap(false));
   if (r < 0) {
     ldout(cct, 0) << "ERROR: failed opening pool (pool=" << obj.pool << "); r=" << r << dendl;
     return r;
@@ -4358,6 +4358,7 @@ int RGWRados::delete_bucket(RGWBucketInfo& bucket_info, RGWObjVersionTracker& ob
     RGWBucketEntryPoint ep;
     r = ctl.bucket->read_bucket_entrypoint_info(bucket_info.bucket,
                                                 &ep,
+                                               null_yield,
                                                 RGWBucketCtl::Bucket::GetParams()
                                                 .set_objv_tracker(&objv_tracker));
     if (r < 0 ||
@@ -4376,7 +4377,7 @@ int RGWRados::delete_bucket(RGWBucketInfo& bucket_info, RGWObjVersionTracker& ob
   }
  
   if (remove_ep) {
-    r = ctl.bucket->remove_bucket_entrypoint_info(bucket_info.bucket,
+    r = ctl.bucket->remove_bucket_entrypoint_info(bucket_info.bucket, null_yield,
                                                   RGWBucketCtl::Bucket::RemoveParams()
                                                   .set_objv_tracker(&objv_tracker));
     if (r < 0)
@@ -4386,7 +4387,7 @@ int RGWRados::delete_bucket(RGWBucketInfo& bucket_info, RGWObjVersionTracker& ob
   /* if the bucket is not synced we can remove the meta file */
   if (!svc.zone->is_syncing_bucket_meta(bucket)) {
     RGWObjVersionTracker objv_tracker;
-    r = ctl.bucket->remove_bucket_instance_info(bucket, bucket_info);
+    r = ctl.bucket->remove_bucket_instance_info(bucket, bucket_info, null_yield);
     if (r < 0) {
       return r;
     }
@@ -4654,17 +4655,6 @@ struct tombstone_entry {
       pg_ver(state.pg_ver) {}
 };
 
-struct tombstone_entry {
-  ceph::real_time mtime;
-  uint32_t zone_short_id;
-  uint64_t pg_ver;
-
-  tombstone_entry() = default;
-  explicit tombstone_entry(const RGWObjState& state)
-    : mtime(state.mtime), zone_short_id(state.zone_short_id),
-      pg_ver(state.pg_ver) {}
-};
-
 /**
  * Delete an object.
  * bucket: name of the bucket storing the object
@@ -5152,7 +5142,7 @@ int RGWRados::get_obj_state_impl(RGWObjectCtx *rctx, const RGWBucketInfo& bucket
 
     if (need_follow_olh) {
       return get_olh_target_state(*rctx, bucket_info, obj, s, state, y);
-    } else if (obj.key.have_null_instance() && !s->has_manifest) {
+    } else if (obj.key.have_null_instance() && !s->manifest) {
       // read null version, and the head object only have olh info
       s->exists = false;
       return -ENOENT;
@@ -5453,7 +5443,7 @@ int RGWRados::set_attrs(void *ctx, const RGWBucketInfo& bucket_info, rgw_obj& sr
     return r;
 
   // ensure null version object exist
-  if (src_obj.key.instance == "null" && !state->has_manifest) {
+  if (src_obj.key.instance == "null" && !state->manifest) {
     return -ENOENT;
   }
 
@@ -7310,11 +7300,11 @@ int RGWRados::get_bucket_instance_info(RGWSysObjectCtx& obj_ctx, const rgw_bucke
 {
   RGWSI_MetaBackend_CtxParams bectx_params = RGWSI_MetaBackend_CtxParams_SObj(&obj_ctx);
   return ctl.bucket->read_bucket_instance_info(bucket, &info,
+                                              y,
                                               RGWBucketCtl::BucketInstance::GetParams()
                                               .set_mtime(pmtime)
                                               .set_attrs(pattrs)
-                                               .set_bectx_params(bectx_params),
-                                               .set_yield(y));
+                                               .set_bectx_params(bectx_params));
 }
 
 int RGWRados::get_bucket_info(RGWSysObjectCtx& obj_ctx,
@@ -7343,7 +7333,7 @@ int RGWRados::try_refresh_bucket_info(RGWBucketInfo& info,
 
   auto rv = info.objv_tracker.read_version;
 
-  return ctl.bucket->read_bucket_info(bucket, &info,
+  return ctl.bucket->read_bucket_info(bucket, &info, null_yield,
                                      RGWBucketCtl::BucketInstance::GetParams()
                                      .set_mtime(pmtime)
                                      .set_attrs(pattrs)
@@ -7353,7 +7343,7 @@ int RGWRados::try_refresh_bucket_info(RGWBucketInfo& info,
 int RGWRados::put_bucket_instance_info(RGWBucketInfo& info, bool exclusive,
                               real_time mtime, map<string, bufferlist> *pattrs)
 {
-  return ctl.bucket->store_bucket_instance_info(info.bucket, info,
+  return ctl.bucket->store_bucket_instance_info(info.bucket, info, null_yield,
                                                RGWBucketCtl::BucketInstance::PutParams()
                                                .set_exclusive(exclusive)
                                                .set_mtime(mtime)
@@ -7387,7 +7377,7 @@ int RGWRados::put_linked_bucket_info(RGWBucketInfo& info, bool exclusive, real_t
       *pep_objv = ot.write_version;
     }
   }
-  ret = ctl.bucket->store_bucket_entrypoint_info(info.bucket, entry_point, RGWBucketCtl::Bucket::PutParams()
+  ret = ctl.bucket->store_bucket_entrypoint_info(info.bucket, entry_point, null_yield, RGWBucketCtl::Bucket::PutParams()
                                                                          .set_exclusive(exclusive)
                                                                          .set_objv_tracker(&ot)
                                                                          .set_mtime(mtime));
index ab66fc3c01ecec8c6bb2d19894ae74c8494c671d..6a0c3322e3297cf108be7fa45b49b7f5b4369752 100644 (file)
@@ -1502,64 +1502,4 @@ public:
 
 };
 
-class RGWRadosThread {
-  class Worker : public Thread {
-    CephContext *cct;
-    RGWRadosThread *processor;
-    Mutex lock;
-    Cond cond;
-
-    void wait() {
-      Mutex::Locker l(lock);
-      cond.Wait(lock);
-    };
-
-    void wait_interval(const utime_t& wait_time) {
-      Mutex::Locker l(lock);
-      cond.WaitInterval(lock, wait_time);
-    }
-
-  public:
-    Worker(CephContext *_cct, RGWRadosThread *_p) : cct(_cct), processor(_p), lock("RGWRadosThread::Worker") {}
-    void *entry() override;
-    void signal() {
-      Mutex::Locker l(lock);
-      cond.Signal();
-    }
-  };
-
-  Worker *worker;
-
-protected:
-  CephContext *cct;
-  RGWRados *store;
-
-  std::atomic<bool> down_flag = { false };
-
-  string thread_name;
-
-  virtual uint64_t interval_msec() = 0;
-  virtual void stop_process() {}
-public:
-  RGWRadosThread(RGWRados *_store, const string& thread_name = "radosgw") 
-    : worker(NULL), cct(_store->ctx()), store(_store), thread_name(thread_name) {}
-  virtual ~RGWRadosThread() {
-    stop();
-  }
-
-  virtual int init() { return 0; }
-  virtual int process() = 0;
-
-  bool going_down() { return down_flag; }
-
-  void start();
-  void stop();
-
-  void signal() {
-    if (worker) {
-      worker->signal();
-    }
-  }
-};
-
 #endif
index cf7ce7ee52dd56f60989825e06c76c4c110dc2b1..36f0acb43e54ef4ba2440f36d003f1e4829cacc4 100644 (file)
@@ -630,7 +630,7 @@ int RGWBucketReshard::do_reshard(int num_shards,
     return -EIO;
   }
 
-  ret = store->ctl.bucket->link_bucket(new_bucket_info.owner, new_bucket_info.bucket, bucket_info.creation_time);
+  ret = store->ctl.bucket->link_bucket(new_bucket_info.owner, new_bucket_info.bucket, bucket_info.creation_time, null_yield);
   if (ret < 0) {
     lderr(store->ctx()) << "failed to link new bucket instance (bucket_id=" << new_bucket_info.bucket.bucket_id << ": " << cpp_strerror(-ret) << ")" << dendl;
     return ret;
@@ -709,7 +709,7 @@ int RGWBucketReshard::execute(int num_shards, int max_op_entries,
   }
 
   ret = store->ctl.bucket->remove_bucket_instance_info(bucket_info.bucket,
-                                                       bucket_info);
+                                                       bucket_info, null_yield);
   if (ret < 0) {
     lderr(store->ctx()) << "Error: " << __func__ <<
       " failed to clean old bucket info object \"" <<
@@ -740,6 +740,7 @@ error_out:
 
   ret2 = store->ctl.bucket->remove_bucket_instance_info(new_bucket_info.bucket,
                                                         new_bucket_info,
+                                                       null_yield,
                                                         std::nullopt);
   if (ret2 < 0) {
     lderr(store->ctx()) << "Error: " << __func__ <<
index 8c9ab5b821456d003c5068101af2fb0687c4643c..37ec4ac984e877806915a4fa779011087ec38205 100644 (file)
@@ -1838,7 +1838,7 @@ int RGWHandler_REST::init_permissions(RGWOp* op)
     if (! s->user->user_id.empty() && s->auth.identity->get_identity_type() != TYPE_ROLE) {
       try {
         map<string, bufferlist> uattrs;
-        if (auto ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &uattrs); ! ret) {
+        if (auto ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &uattrs, null_yield); ! ret) {
           if (s->iam_user_policies.empty()) {
             s->iam_user_policies = get_iam_user_policy_from_attr(s->cct, store, uattrs, s->user->user_id.tenant);
           } else {
index 43d5d8d4b9532006d5672c764541c10f391b5243..5cc0660fee0085d1222f73d944cb25d9a14d0fee 100644 (file)
@@ -56,7 +56,7 @@ void RGWOp_Metadata_Get::execute() {
   auto meta_mgr = store->ctl.meta.mgr;
 
   /* Get keys */
-  http_ret = meta_mgr->get(metadata_key, s->formatter);
+  http_ret = meta_mgr->get(metadata_key, s->formatter, s->yield);
   if (http_ret < 0) {
     dout(5) << "ERROR: can't get key: " << cpp_strerror(http_ret) << dendl;
     return;
@@ -262,7 +262,7 @@ void RGWOp_Metadata_Put::execute() {
     }
   }
 
-  http_ret = store->ctl.meta.mgr->put(metadata_key, bl, sync_type,
+  http_ret = store->ctl.meta.mgr->put(metadata_key, bl, s->yield, sync_type,
                                  &ondisk_version);
   if (http_ret < 0) {
     dout(5) << "ERROR: can't put key: " << cpp_strerror(http_ret) << dendl;
@@ -293,7 +293,7 @@ void RGWOp_Metadata_Delete::execute() {
   string metadata_key;
 
   frame_metadata_key(s, metadata_key);
-  http_ret = store->ctl.meta.mgr->remove(metadata_key);
+  http_ret = store->ctl.meta.mgr->remove(metadata_key, s->yield);
   if (http_ret < 0) {
     dout(5) << "ERROR: can't remove key: " << cpp_strerror(http_ret) << dendl;
     return;
index 991149cb8ce09672adb608d4bd1d7b3fecaf5209..19406c8fcf18acbc3d4f28104215670187d4d8e5 100644 (file)
@@ -545,7 +545,7 @@ static void dump_container_metadata(struct req_state *s,
 void RGWStatAccount_ObjStore_SWIFT::execute()
 {
   RGWStatAccount_ObjStore::execute();
-  op_ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &attrs);
+  op_ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &attrs, s->yield);
 }
 
 void RGWStatAccount_ObjStore_SWIFT::send_response()
index 6b64c8ca1c0efb688ec8e0b06556803ab8c960ab..34b521b00a1124101b7beb0e93f4fd6bcc661d81 100644 (file)
@@ -125,7 +125,7 @@ void RGWPutUserPolicy::execute()
   }
 
   map<string, bufferlist> uattrs;
-  op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs);
+  op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs, s->yield);
   if (op_ret == -ENOENT) {
     op_ret = -ERR_NO_SUCH_ENTITY;
     return;
@@ -190,7 +190,7 @@ void RGWGetUserPolicy::execute()
 
   rgw_user user_id(user_name);
   map<string, bufferlist> uattrs;
-  op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs);
+  op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs, s->yield);
   if (op_ret == -ENOENT) {
     ldout(s->cct, 0) << "ERROR: attrs not found for user" << user_name << dendl;
     op_ret = -ERR_NO_SUCH_ENTITY;
@@ -254,7 +254,7 @@ void RGWListUserPolicies::execute()
 
   rgw_user user_id(user_name);
   map<string, bufferlist> uattrs;
-  op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs);
+  op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs, s->yield);
   if (op_ret == -ENOENT) {
     ldout(s->cct, 0) << "ERROR: attrs not found for user" << user_name << dendl;
     op_ret = -ERR_NO_SUCH_ENTITY;
@@ -323,7 +323,7 @@ void RGWDeleteUserPolicy::execute()
   }
 
   map<string, bufferlist> uattrs;
-  op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs);
+  op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs, s->yield);
   if (op_ret == -ENOENT) {
     op_ret = -ERR_NO_SUCH_ENTITY;
     return;
index ea7f61883d60ed9068ce027a4b0ff08a5d7cda3a..5aab12341987e0dea005b4747b6011f604f1ea33 100644 (file)
@@ -1087,7 +1087,7 @@ class RGWAsyncMetaStoreEntry : public RGWAsyncRadosRequest {
   bufferlist bl;
 protected:
   int _send_request() override {
-    int ret = store->ctl.meta.mgr->put(raw_key, bl, RGWMDLogSyncType::APPLY_ALWAYS);
+    int ret = store->ctl.meta.mgr->put(raw_key, bl, null_yield, RGWMDLogSyncType::APPLY_ALWAYS);
     if (ret < 0) {
       ldout(store->ctx(), 0) << "ERROR: can't store key: " << raw_key << " ret=" << ret << dendl;
       return ret;
@@ -1139,7 +1139,7 @@ class RGWAsyncMetaRemoveEntry : public RGWAsyncRadosRequest {
   string raw_key;
 protected:
   int _send_request() override {
-    int ret = store->ctl.meta.mgr->remove(raw_key);
+    int ret = store->ctl.meta.mgr->remove(raw_key, null_yield);
     if (ret < 0) {
       ldout(store->ctx(), 0) << "ERROR: can't remove key: " << raw_key << " ret=" << ret << dendl;
       return ret;
index c5570c3b05ae1ecd307a0113b593a62687a0116a..3dbc6343c38af9c81dee85b425a8b60e75e32ae4 100644 (file)
@@ -124,7 +124,7 @@ void rgw_shard_name(const string& prefix, unsigned shard_id, string& name)
 }
 
 int rgw_put_system_obj(RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const string& oid, bufferlist& data, bool exclusive,
-                       RGWObjVersionTracker *objv_tracker, real_time set_mtime, map<string, bufferlist> *pattrs)
+                       RGWObjVersionTracker *objv_tracker, real_time set_mtime, optional_yield y, map<string, bufferlist> *pattrs)
 {
   map<string,bufferlist> no_attrs;
   if (!pattrs) {
@@ -139,13 +139,22 @@ int rgw_put_system_obj(RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const str
                   .set_exclusive(exclusive)
                   .set_mtime(set_mtime)
                   .set_attrs(*pattrs)
-                  .write(data, null_yield);
+                  .write(data, y);
 
   return ret;
 }
 
+int rgw_put_system_obj(RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const string& oid, bufferlist& data, bool exclusive,
+                       RGWObjVersionTracker *objv_tracker, real_time set_mtime, map<string, bufferlist> *pattrs)
+{
+  return rgw_put_system_obj(obj_ctx, pool, oid, data, exclusive,
+                            objv_tracker, set_mtime, null_yield, pattrs);
+}
+
 int rgw_get_system_obj(RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const string& key, bufferlist& bl,
                        RGWObjVersionTracker *objv_tracker, real_time *pmtime, optional_yield y, map<string, bufferlist> *pattrs,
+                       rgw_cache_entry_info *cache_info,
+                      boost::optional<obj_version> refresh_version)
 {
   bufferlist::iterator iter;
   int request_len = READ_CHUNK_LEN;
index 2653f3b5c74e820690b4079f9b987c754cee3352..0b3a9b30aaafd08d26a36ccc555c1698703c3b1f 100644 (file)
@@ -62,6 +62,8 @@ void rgw_shard_name(const string& prefix, unsigned shard_id, string& name);
 
 int rgw_put_system_obj(RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const string& oid, bufferlist& data, bool exclusive,
                        RGWObjVersionTracker *objv_tracker, real_time set_mtime, map<string, bufferlist> *pattrs = NULL);
+int rgw_put_system_obj(RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const string& oid, bufferlist& data, bool exclusive,
+                       RGWObjVersionTracker *objv_tracker, real_time set_mtime, optional_yield y, map<string, bufferlist> *pattrs = NULL);
 int rgw_get_system_obj(RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const string& key, bufferlist& bl,
                        RGWObjVersionTracker *objv_tracker, real_time *pmtime, optional_yield y, map<string, bufferlist> *pattrs = NULL,
                        rgw_cache_entry_info *cache_info = NULL,
index 6cd2a164407ed61ccea8332e66977589216cc6d0..e2ccb075af9717ae6a095454373ee3fc32e479a2 100644 (file)
@@ -11,6 +11,9 @@
 #include "rgw_zone.h"
 #include "rgw_bucket.h"
 
+#include "services/svc_zone.h"
+#include "services/svc_datalog_rados.h"
+
 #include <boost/asio/yield.hpp>
 
 #define dout_subsys ceph_subsys_rgw
index 15974b95293ea164496f2e4fc129f21307804523..95c609d966771dd47a3bdfc6398c48860f1573c9 100644 (file)
@@ -2480,7 +2480,7 @@ public:
                              RGWSI_MetaBackend_Handler::Op *op, string& entry,
                              RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker,
                              optional_yield y,
-                             RGWMDLogSyncType type) : RGWMetadataHandlerPut_SObj(_handler, op, entry, obj, objv_tracker, type),
+                             RGWMDLogSyncType type) : RGWMetadataHandlerPut_SObj(_handler, op, entry, obj, objv_tracker, y, type),
                                                                 uhandler(_handler) {
     uobj = static_cast<RGWUserMetadataObject *>(obj);
   }
index d83583b1bd239ea3a024c4cbb3ab2bf600e707dc..086475105408d877a9502cfef3393cb1c57b4f05 100644 (file)
@@ -848,7 +848,7 @@ public:
       return *this;
     }
 
-    RemoveParams& set_yield(optional_yield _y) {
+    GetParams& set_yield(optional_yield _y) {
       y = _y;
       return *this;
     }
@@ -887,7 +887,7 @@ public:
       return *this;
     }
 
-    RemoveParams& set_yield(optional_yield _y) {
+    PutParams& set_yield(optional_yield _y) {
       y = _y;
       return *this;
     }
index 2ac2d730fa9e522ef6c3fe322a89f11e0e27a3fa..59f758aafd72c589d1e0efa3898628c23c7522d0 100644 (file)
@@ -33,7 +33,8 @@ public:
   virtual int clean_index(RGWBucketInfo& bucket_info) = 0;
 
   virtual int read_stats(const RGWBucketInfo& bucket_info,
-                         RGWBucketEnt *stats) = 0;
+                         RGWBucketEnt *stats,
+                         optional_yield y) = 0;
 
   virtual int handle_overwrite(const RGWBucketInfo& info,
                                const RGWBucketInfo& orig_info) = 0;
index 8de7d58c36c57096e517d274be44334eb6489dfa..7aee8539ddbbf5a53ac6ed81ba35b731b670ab5e 100644 (file)
@@ -170,7 +170,7 @@ int RGWSI_BucketIndex_RADOS::open_bucket_index(const RGWBucketInfo& bucket_info,
   int ret = open_bucket_index_base(bucket_info, index_pool, &bucket_oid_base);
   if (ret < 0) {
     ldout(cct, 20) << __func__ << ": open_bucket_index_pool() returned "
-                   << r << dendl;
+                   << ret << dendl;
     return ret;
   }
 
@@ -237,7 +237,7 @@ int RGWSI_BucketIndex_RADOS::open_bucket_index_shard(const RGWBucketInfo& bucket
   int ret = open_bucket_index_base(bucket_info, &pool, &bucket_oid_base);
   if (ret < 0) {
     ldout(cct, 20) << __func__ << ": open_bucket_index_pool() returned "
-                   << r << dendl;
+                   << ret << dendl;
     return ret;
   }
 
@@ -264,7 +264,7 @@ int RGWSI_BucketIndex_RADOS::open_bucket_index_shard(const RGWBucketInfo& bucket
   int ret = open_bucket_index_base(bucket_info, &index_pool, &bucket_oid_base);
   if (ret < 0) {
     ldout(cct, 20) << __func__ << ": open_bucket_index_pool() returned "
-                   << r << dendl;
+                   << ret << dendl;
     return ret;
   }
 
@@ -281,7 +281,8 @@ int RGWSI_BucketIndex_RADOS::open_bucket_index_shard(const RGWBucketInfo& bucket
 int RGWSI_BucketIndex_RADOS::cls_bucket_head(const RGWBucketInfo& bucket_info,
                                              int shard_id,
                                              vector<rgw_bucket_dir_header> *headers,
-                                             map<int, string> *bucket_instance_ids)
+                                             map<int, string> *bucket_instance_ids,
+                                             optional_yield y)
 {
   RGWSI_RADOS::Pool index_pool;
   map<int, string> oids;
@@ -347,12 +348,13 @@ int RGWSI_BucketIndex_RADOS::clean_index(RGWBucketInfo& bucket_info)
 }
 
 int RGWSI_BucketIndex_RADOS::read_stats(const RGWBucketInfo& bucket_info,
-                                        RGWBucketEnt *result)
+                                        RGWBucketEnt *result,
+                                        optional_yield y)
 {
   vector<rgw_bucket_dir_header> headers;
 
   result->bucket = bucket_info.bucket;
-  int r = cls_bucket_head(bucket_info, RGW_NO_SHARD, &headers, nullptr);
+  int r = cls_bucket_head(bucket_info, RGW_NO_SHARD, &headers, nullptr, y);
   if (r < 0) {
     return r;
   }
index 11b7bb1e765fe67befaa653cc660402da6eb8192..2ba3ac52a5e86e7eac5a38687d96dfd5cd87c822 100644 (file)
@@ -58,7 +58,8 @@ class RGWSI_BucketIndex_RADOS : public RGWSI_BucketIndex
   int cls_bucket_head(const RGWBucketInfo& bucket_info,
                       int shard_id,
                       vector<rgw_bucket_dir_header> *headers,
-                      map<int, string> *bucket_instance_ids);
+                      map<int, string> *bucket_instance_ids,
+                      optional_yield y);
 
 public:
 
@@ -98,7 +99,8 @@ public:
   /* RADOS specific */
 
   int read_stats(const RGWBucketInfo& bucket_info,
-                 RGWBucketEnt *stats) override;
+                 RGWBucketEnt *stats,
+                 optional_yield y) override;
 
   int get_reshard_status(const RGWBucketInfo& bucket_info,
                          std::list<cls_rgw_bucket_instance_entry> *status);
index 704f0715aabe859c6a131f51c949cd3deefecbbd..a1df7db2f066d1a00fab9d2835556ab7c3200163 100644 (file)
@@ -179,7 +179,7 @@ int RGWSI_BILog_RADOS::get_log_status(const RGWBucketInfo& bucket_info,
 {
   vector<rgw_bucket_dir_header> headers;
   map<int, string> bucket_instance_ids;
-  int r = svc.bi->cls_bucket_head(bucket_info, shard_id, &headers, &bucket_instance_ids);
+  int r = svc.bi->cls_bucket_head(bucket_info, shard_id, &headers, &bucket_instance_ids, null_yield);
   if (r < 0)
     return r;
 
index d1d1705ec603182114234e45d1690fa99c066d82..3f3816b51c32f3f2c3134bd2adce0937f4325d3f 100644 (file)
@@ -54,7 +54,8 @@ public:
 
   virtual int remove_bucket_entrypoint_info(RGWSI_Bucket_EP_Ctx& ctx,
                                     const string& key,
-                                    RGWObjVersionTracker *objv_tracker) = 0;
+                                    RGWObjVersionTracker *objv_tracker,
+                                    optional_yield y) = 0;
 
   virtual int read_bucket_instance_info(RGWSI_Bucket_BI_Ctx& ctx,
                                 const string& key,
index 6926ba30c380211860eaaf0f79e5ae622480b36a..4b1fab289f66047915d4f50c162f2179198fd004 100644 (file)
@@ -214,7 +214,7 @@ int RGWSI_Bucket_SObj::read_bucket_entrypoint_info(RGWSI_Bucket_EP_Ctx& ctx,
   auto params = RGWSI_MBSObj_GetParams(&bl, pattrs, pmtime).set_cache_info(cache_info)
                                                            .set_refresh_version(refresh_version);
                                                     
-  int ret = svc.meta_be->get_entry(ctx.get(), key, params, objv_tracker);
+  int ret = svc.meta_be->get_entry(ctx.get(), key, params, objv_tracker, y);
   if (ret < 0) {
     return ret;
   }
@@ -243,7 +243,7 @@ int RGWSI_Bucket_SObj::store_bucket_entrypoint_info(RGWSI_Bucket_EP_Ctx& ctx,
 
   RGWSI_MBSObj_PutParams params(bl, pattrs, mtime, exclusive);
 
-  int ret = svc.meta_be->put(ctx.get(), key, params, objv_tracker);
+  int ret = svc.meta_be->put(ctx.get(), key, params, objv_tracker, y);
   if (ret == -EEXIST) {
     /* well, if it's exclusive we shouldn't overwrite it, because we might race with another
      * bucket operation on this specific bucket (e.g., being synced from the master), but
@@ -386,6 +386,7 @@ int RGWSI_Bucket_SObj::read_bucket_info(RGWSI_Bucket_X_Ctx& ctx,
     return read_bucket_instance_info(ctx.bi, get_bi_meta_key(bucket),
                                      info,
                                      pmtime, pattrs,
+                                     y,
                                      &cache_info, refresh_version);
   }
 
@@ -420,8 +421,8 @@ int RGWSI_Bucket_SObj::read_bucket_info(RGWSI_Bucket_X_Ctx& ctx,
   rgw_cache_entry_info entry_cache_info;
   int ret = read_bucket_entrypoint_info(ctx.ep, bucket_entry,
                                         &entry_point, &ot, &ep_mtime, pattrs,
-                                        &entry_cache_info, refresh_version,
-                                        y);
+                                        y,
+                                        &entry_cache_info, refresh_version);
   if (ret < 0) {
     /* only init these fields */
     info->bucket = bucket;
@@ -451,7 +452,8 @@ int RGWSI_Bucket_SObj::read_bucket_info(RGWSI_Bucket_X_Ctx& ctx,
 
   ret = read_bucket_instance_info(ctx.bi, get_bi_meta_key(entry_point.bucket),
                                   &e.info, &e.mtime, &e.attrs,
-                                  &cache_info, refresh_version, y);
+                                  y,
+                                  &cache_info, refresh_version);
   *info = e.info;
   if (ret < 0) {
     lderr(cct) << "ERROR: read_bucket_instance_from_oid failed: " << ret << dendl;
@@ -466,7 +468,7 @@ int RGWSI_Bucket_SObj::read_bucket_info(RGWSI_Bucket_X_Ctx& ctx,
     *pattrs = e.attrs;
 
   /* chain to both bucket entry point and bucket instance */
-  if (!binfo_cache->put(svc.cache, cache_key, &e, {&entry_cache_info, &cache_info}, y)) {
+  if (!binfo_cache->put(svc.cache, cache_key, &e, {&entry_cache_info, &cache_info})) {
     ldout(cct, 20) << "couldn't put binfo cache entry, might have raced with data changes" << dendl;
   }
 
@@ -509,6 +511,7 @@ int RGWSI_Bucket_SObj::store_bucket_instance_info(RGWSI_Bucket_BI_Ctx& ctx,
                                        key,
                                        &_orig_info,
                                        nullptr, nullptr,
+                                       y,
                                        nullptr, boost::none);
     if (r < 0) {
       if (r != -ENOENT) {
index 54962ea2f3fc28e8428d90fe8b3054563ae6456e..210771416d4fb54d7173975ae0345bafacb4ce24 100644 (file)
@@ -58,7 +58,8 @@ class RGWSI_Bucket_SObj : public RGWSI_Bucket
                                    real_time *pmtime,
                                    map<string, bufferlist> *pattrs,
                                    rgw_cache_entry_info *cache_info,
-                                   boost::optional<obj_version> refresh_version);
+                                   boost::optional<obj_version> refresh_version,
+                                   optional_yield y);
 
   int read_bucket_stats(const RGWBucketInfo& bucket_info,
                         RGWBucketEnt *ent,
index eb805f57c58655033867b5c111dc08eac3097259..f6de057153552b1715d60640b603b5c43dbc9572 100644 (file)
@@ -72,9 +72,9 @@ int RGWSI_MetaBackend::do_mutate(RGWSI_MetaBackend::Context *ctx,
                                 const ceph::real_time& mtime,
                                 RGWObjVersionTracker *objv_tracker,
                                 RGWMDLogStatus op_type,
+                                 optional_yield y,
                                 std::function<int()> f,
-                                bool generic_prepare,
-                                 optional_yield y)
+                                bool generic_prepare)
 {
   int ret;
 
@@ -124,9 +124,9 @@ int RGWSI_MetaBackend::put(Context *ctx,
 
   return do_mutate(ctx, key, params.mtime, objv_tracker,
                 MDLOG_STATUS_WRITE,
+                y,
                 f,
-                false,
-                y);
+                false);
 }
 
 int RGWSI_MetaBackend::remove(Context *ctx,
@@ -141,19 +141,20 @@ int RGWSI_MetaBackend::remove(Context *ctx,
 
   return do_mutate(ctx, key, params.mtime, objv_tracker,
                 MDLOG_STATUS_REMOVE,
+                y,
                 f,
-                false,
-                y);
+                false);
 }
 
 int RGWSI_MetaBackend::mutate(Context *ctx,
                              const std::string& key,
                              MutateParams& params,
                              RGWObjVersionTracker *objv_tracker,
+                              optional_yield y,
                              std::function<int()> f)
 {
   return do_mutate(ctx, key, params.mtime, objv_tracker,
-                  params.op_type,
+                  params.op_type, y,
                   f,
                   false);
 }
index 9b07e0fbea45164e61dbeb810cf2a4fcbe7ab287..4258ae91f6a6ff3b0a57ec2284cc93372af7a10a 100644 (file)
@@ -52,9 +52,9 @@ protected:
                      const std::string& key,
                      const ceph::real_time& mtime, RGWObjVersionTracker *objv_tracker,
                      RGWMDLogStatus op_type,
+                     optional_yield y,
                      std::function<int()> f,
-                     bool generic_prepare,
-                     optional_yield y);
+                     bool generic_prepare);
 
   virtual int pre_modify(Context *ctx,
                          const std::string& key,
@@ -193,6 +193,7 @@ public:
                      const std::string& key,
                      MutateParams& params,
                     RGWObjVersionTracker *objv_tracker,
+                     optional_yield y,
                      std::function<int()> f);
 };
 
@@ -216,27 +217,31 @@ public:
 
     int get(const std::string& key,
             RGWSI_MetaBackend::GetParams &params,
-            RGWObjVersionTracker *objv_tracker) {
-      return be->get(be_ctx, key, params, objv_tracker);
+            RGWObjVersionTracker *objv_tracker,
+            optional_yield y) {
+      return be->get(be_ctx, key, params, objv_tracker, y);
     }
 
     int put(const std::string& key,
             RGWSI_MetaBackend::PutParams& params,
-            RGWObjVersionTracker *objv_tracker) {
-      return be->put(be_ctx, key, params, objv_tracker);
+            RGWObjVersionTracker *objv_tracker,
+            optional_yield y) {
+      return be->put(be_ctx, key, params, objv_tracker, y);
     }
 
     int remove(const std::string& key,
                RGWSI_MetaBackend::RemoveParams& params,
-               RGWObjVersionTracker *objv_tracker) {
-      return be->remove(be_ctx, key, params, objv_tracker);
+               RGWObjVersionTracker *objv_tracker,
+               optional_yield y) {
+      return be->remove(be_ctx, key, params, objv_tracker, y);
     }
 
     int mutate(const std::string& key,
               RGWSI_MetaBackend::MutateParams& params,
               RGWObjVersionTracker *objv_tracker,
+               optional_yield y,
               std::function<int()> f) {
-      return be->mutate(be_ctx, key, params, objv_tracker, f);
+      return be->mutate(be_ctx, key, params, objv_tracker, y, f);
     }
 
     int list_init(const string& marker) {
index 750d4a57a644d78dfda5ee4b2b594c84b85f5e91..092a962e41b7ca49fbc9e3e3e73825140f656313 100644 (file)
@@ -84,13 +84,14 @@ int RGWSI_OTP::read_all(RGWSI_OTP_BE_Ctx& ctx,
                         const string& key,
                         otp_devices_list_t *devices,
                         real_time *pmtime,
-                        RGWObjVersionTracker *objv_tracker)
+                        RGWObjVersionTracker *objv_tracker,
+                        optional_yield y)
 {
   RGWSI_MBOTP_GetParams params;
   params.pdevices = devices;
   params.pmtime = pmtime;
 
-  int ret = svc.meta_be->get_entry(ctx.get(), key, params, objv_tracker);
+  int ret = svc.meta_be->get_entry(ctx.get(), key, params, objv_tracker, y);
   if (ret < 0) {
     return ret;
   }
@@ -102,26 +103,29 @@ int RGWSI_OTP::read_all(RGWSI_OTP_BE_Ctx& ctx,
                         const rgw_user& uid,
                         otp_devices_list_t *devices,
                         real_time *pmtime,
-                        RGWObjVersionTracker *objv_tracker)
+                        RGWObjVersionTracker *objv_tracker,
+                        optional_yield y)
 {
   return read_all(ctx,
                   uid.to_str(),
                   devices,
                   pmtime,
-                  objv_tracker);
+                  objv_tracker,
+                  y);
 }
 
 int RGWSI_OTP::store_all(RGWSI_OTP_BE_Ctx& ctx,
                          const string& key,
                          const otp_devices_list_t& devices,
                          real_time mtime,
-                         RGWObjVersionTracker *objv_tracker)
+                         RGWObjVersionTracker *objv_tracker,
+                         optional_yield y)
 {
   RGWSI_MBOTP_PutParams params;
   params.mtime = mtime;
   params.devices = devices;
 
-  int ret = svc.meta_be->put_entry(ctx.get(), key, params, objv_tracker);
+  int ret = svc.meta_be->put_entry(ctx.get(), key, params, objv_tracker, y);
   if (ret < 0) {
     return ret;
   }
@@ -133,22 +137,25 @@ int RGWSI_OTP::store_all(RGWSI_OTP_BE_Ctx& ctx,
                          const rgw_user& uid,
                          const otp_devices_list_t& devices,
                          real_time mtime,
-                         RGWObjVersionTracker *objv_tracker)
+                         RGWObjVersionTracker *objv_tracker,
+                         optional_yield y)
 {
   return store_all(ctx,
                    uid.to_str(),
                    devices,
                    mtime,
-                   objv_tracker);
+                   objv_tracker,
+                   y);
 }
 
 int RGWSI_OTP::remove_all(RGWSI_OTP_BE_Ctx& ctx,
                           const string& key,
-                          RGWObjVersionTracker *objv_tracker)
+                          RGWObjVersionTracker *objv_tracker,
+                          optional_yield y)
 {
   RGWSI_MBOTP_RemoveParams params;
 
-  int ret = svc.meta_be->remove_entry(ctx.get(), key, params, objv_tracker);
+  int ret = svc.meta_be->remove_entry(ctx.get(), key, params, objv_tracker, y);
   if (ret < 0) {
     return ret;
   }
@@ -158,9 +165,11 @@ int RGWSI_OTP::remove_all(RGWSI_OTP_BE_Ctx& ctx,
 
 int RGWSI_OTP::remove_all(RGWSI_OTP_BE_Ctx& ctx,
                           const rgw_user& uid,
-                          RGWObjVersionTracker *objv_tracker)
+                          RGWObjVersionTracker *objv_tracker,
+                          optional_yield y)
 {
   return remove_all(ctx,
                     uid.to_str(),
-                    objv_tracker);
+                    objv_tracker,
+                    y);
 }
index 550712f2547431b2eb6c892e573de37274a5773a..db1e1a188859c197e01cf44a8b368d3f47f177c2 100644 (file)
@@ -56,28 +56,34 @@ public:
                const string& key,
                otp_devices_list_t *devices,
                real_time *pmtime,
-               RGWObjVersionTracker *objv_tracker);
+               RGWObjVersionTracker *objv_tracker,
+               optional_yield y);
   int read_all(RGWSI_OTP_BE_Ctx& ctx,
                const rgw_user& uid,
                otp_devices_list_t *devices,
                real_time *pmtime,
-               RGWObjVersionTracker *objv_tracker);
+               RGWObjVersionTracker *objv_tracker,
+               optional_yield y);
   int store_all(RGWSI_OTP_BE_Ctx& ctx,
                 const string& key,
                 const otp_devices_list_t& devices,
                 real_time mtime,
-                RGWObjVersionTracker *objv_tracker);
+                RGWObjVersionTracker *objv_tracker,
+                optional_yield y);
   int store_all(RGWSI_OTP_BE_Ctx& ctx,
                 const rgw_user& uid,
                 const otp_devices_list_t& devices,
                 real_time mtime,
-                RGWObjVersionTracker *objv_tracker);
+                RGWObjVersionTracker *objv_tracker,
+                optional_yield y);
   int remove_all(RGWSI_OTP_BE_Ctx& ctx,
                  const string& key,
-                 RGWObjVersionTracker *objv_tracker);
+                 RGWObjVersionTracker *objv_tracker,
+                 optional_yield y);
   int remove_all(RGWSI_OTP_BE_Ctx& ctx,
                  const rgw_user& uid,
-                 RGWObjVersionTracker *objv_tracker);
+                 RGWObjVersionTracker *objv_tracker,
+                 optional_yield y);
 };
 
 
index c16e092925dfa3f605aa2d260cc176146a29db69..c139ee91c48e8456e685284b1dcf5ef55df0e5fd 100644 (file)
 
 #define dout_subsys ceph_subsys_rgw
 
+RGWSI_RADOS::RGWSI_RADOS(CephContext *cct) : RGWServiceInstance(cct)
+{
+}
+
 RGWSI_RADOS::~RGWSI_RADOS()
 {
 }
@@ -88,7 +92,7 @@ int RGWSI_RADOS::pool_iterate(librados::IoCtx& io_ctx,
   return objs.size();
 }
 
-RGWSI_RADOS::Obj::Obj(Pool& pool, const string& oid) : rados_svc(pool.rados_svc), rados_handle(pool.rados_handle)
+RGWSI_RADOS::Obj::Obj(Pool& pool, const string& oid) : rados_svc(pool.rados_svc)
 {
   ref.pool = pool;
   ref.obj = rgw_raw_obj(pool.get_pool(), oid);
@@ -96,7 +100,7 @@ RGWSI_RADOS::Obj::Obj(Pool& pool, const string& oid) : rados_svc(pool.rados_svc)
 
 void RGWSI_RADOS::Obj::init(const rgw_raw_obj& obj)
 {
-  ref.pool = RGWSI_RADOS::Pool(rados_svc, obj.pool, rados_handle);
+  ref.pool = RGWSI_RADOS::Pool(rados_svc, obj.pool);
   ref.obj = obj;
 }
 
index fe666e8f1b0eafd6125ca11db8c88b60879d3aef..9d56e8f294a623dc5e5a9d0242b38960835b732b 100644 (file)
@@ -61,7 +61,7 @@ private:
                    bool *is_truncated);
 
 public:
-  RGWSI_RADOS(CephContext *cct) : RGWServiceInstance(cct) {}
+  RGWSI_RADOS(CephContext *cct);
   ~RGWSI_RADOS();
 
   void init() {}
index b1d5195b9a0dacb0178abe42df71f0389223b540..b4a9f9ec34cb9536843e4b0f8833f5813116c6d1 100644 (file)
@@ -60,10 +60,10 @@ public:
     s.append(part);
     return s;
   }
-  string& get_upload_id() const {
+  const string& get_upload_id() const {
     return upload_id;
   }
-  string& get_key() const {
+  const string& get_key() const {
     return oid;
   }
   bool from_meta(string& meta) {
@@ -108,7 +108,7 @@ public:
    * @return true if the name provided is in the form of a multipart meta
    *         object, false otherwise
    */
-  bool filter(string& name, string& key) override;
+  bool filter(const string& name, string& key) override;
 };
 
 class RGWSI_Tier_RADOS : public RGWServiceInstance
index 624c0160ea195240db21c41f35357b188a455c9b..33636b396db4573068e6023ed0ed8cb81c730f69 100644 (file)
@@ -523,7 +523,7 @@ int RGWSI_User_RADOS::get_user_info_from_index(RGWSI_MetaBackend::Context *_ctx,
     return -EIO;
   }
 
-  uinfo_cache->put(svc.cache, cache_key, &e, { &cache_info }, y);
+  uinfo_cache->put(svc.cache, cache_key, &e, { &cache_info });
 
   *info = e.info;
   if (objv_tracker)
index f916e66711acc86fc6180ddb882943539455fa5f..2116eb0b1c61bf5764348ecbc464bc6972e16fa2 100644 (file)
@@ -109,7 +109,6 @@ TYPE(RGWUserInfo)
 TYPE(rgw_bucket)
 TYPE(RGWBucketInfo)
 TYPE(RGWBucketEnt)
-TYPE(RGWUploadPartInfo)
 TYPE(rgw_obj)
 
 #include "rgw/rgw_log.h"
@@ -120,6 +119,9 @@ TYPE(rgw_meta_sync_info)
 TYPE(rgw_meta_sync_marker)
 TYPE(rgw_meta_sync_status)
 
+#include "rgw/rgw_multi.h"
+TYPE(RGWUploadPartInfo)
+
 #include "rgw/rgw_data_sync.h"
 TYPE(rgw_data_sync_info)
 TYPE(rgw_data_sync_marker)