From: Daniel Gryniewicz Date: Wed, 29 Jul 2020 15:28:14 +0000 (-0400) Subject: Zipper - convert RGWBulkUploadOp::handle_dir to use create_bucket X-Git-Tag: v16.1.0~1391^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=36fb31312fe1025dcb76f2887edff592d864c971;p=ceph.git Zipper - convert RGWBulkUploadOp::handle_dir to use create_bucket Signed-off-by: Daniel Gryniewicz --- diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index e1119c113a08..667c09a3bd90 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -6769,76 +6769,6 @@ int RGWBulkUploadOp::handle_dir(const std::string_view path) /* we need to make sure we read bucket info, it's not read before for this * specific request */ std::unique_ptr bucket; - RGWBucketInfo binfo; - op_ret = store->get_bucket(s->user, s->bucket_tenant, bucket_name, &bucket); - if (op_ret < 0 && op_ret != -ENOENT) { - return op_ret; - } - const bool bucket_exists = (op_ret != -ENOENT); - - if (bucket_exists) { - RGWAccessControlPolicy old_policy(s->cct); - binfo = bucket->get_info(); - int r = rgw_op_get_bucket_policy_from_attr(s->cct, store, binfo, - bucket->get_attrs().attrs, &old_policy); - if (r >= 0) { - if (old_policy.get_owner().get_id().compare(s->user->get_user()) != 0) { - op_ret = -EEXIST; - return op_ret; - } - } - } - - RGWBucketInfo master_info; - rgw_bucket *pmaster_bucket = nullptr; - uint32_t *pmaster_num_shards = nullptr; - real_time creation_time; - obj_version objv, ep_objv, *pobjv = nullptr; - - if (! store->is_meta_master()) { - JSONParser jp; - ceph::bufferlist in_data; - req_info info = s->info; - forward_req_info(s->cct, info, bucket_name); - op_ret = store->forward_request_to_master(s->user, nullptr, in_data, &jp, info); - if (op_ret < 0) { - return op_ret; - } - - JSONDecoder::decode_json("entry_point_object_ver", ep_objv, &jp); - JSONDecoder::decode_json("object_ver", objv, &jp); - JSONDecoder::decode_json("bucket_info", master_info, &jp); - - ldpp_dout(this, 20) << "parsed: objv.tag=" << objv.tag << " objv.ver=" << objv.ver << dendl; - ldpp_dout(this, 20) << "got creation_time="<< master_info.creation_time << dendl; - - pmaster_bucket= &master_info.bucket; - creation_time = master_info.creation_time; - pmaster_num_shards = &master_info.layout.current_index.layout.normal.num_shards; - pobjv = &objv; - } else { - pmaster_bucket = nullptr; - pmaster_num_shards = nullptr; - } - - rgw_placement_rule placement_rule(binfo.placement_rule, s->info.storage_class); - - if (bucket_exists) { - rgw_placement_rule selected_placement_rule; - rgw_bucket new_bucket; - new_bucket.tenant = s->bucket_tenant; - new_bucket.name = s->bucket_name; - op_ret = store->svc()->zone->select_bucket_placement(s->user->get_info(), - store->svc()->zone->get_zonegroup().get_id(), - placement_rule, - &selected_placement_rule, - nullptr); - if (selected_placement_rule != binfo.placement_rule) { - op_ret = -EEXIST; - ldpp_dout(this, 20) << "non-coherent placement rule" << dendl; - return op_ret; - } - } /* Create metadata: ACLs. */ std::map attrs; @@ -6848,22 +6778,27 @@ int RGWBulkUploadOp::handle_dir(const std::string_view path) policy.encode(aclbl); attrs.emplace(RGW_ATTR_ACL, std::move(aclbl)); + obj_version objv, ep_objv; + bool bucket_exists; RGWQuotaInfo quota_info; - const RGWQuotaInfo * pquota_info = nullptr; - + const RGWQuotaInfo* pquota_info = nullptr; + RGWBucketInfo out_info; + string swift_ver_location; rgw_bucket new_bucket; + req_info info = s->info; new_bucket.tenant = s->bucket_tenant; /* ignored if bucket exists */ new_bucket.name = bucket_name; + rgw_placement_rule placement_rule; + placement_rule.storage_class = s->info.storage_class; + forward_req_info(s->cct, info, bucket_name); - - RGWBucketInfo out_info; - op_ret = store->getRados()->create_bucket(s->user->get_info(), - new_bucket, + op_ret = store->create_bucket(*s->user, new_bucket, store->svc()->zone->get_zonegroup().get_id(), - placement_rule, binfo.swift_ver_location, + placement_rule, swift_ver_location, pquota_info, attrs, - out_info, pobjv, &ep_objv, creation_time, - pmaster_bucket, pmaster_num_shards, true); + out_info, ep_objv, + true, false, &bucket_exists, + info, &bucket); /* continue if EEXIST and create_bucket will fail below. this way we can * recover from a partial create by retrying it. */ ldpp_dout(this, 20) << "rgw_create_bucket returned ret=" << op_ret diff --git a/src/rgw/rgw_sal.cc b/src/rgw/rgw_sal.cc index a7f865bceaea..1aa974954bb5 100644 --- a/src/rgw/rgw_sal.cc +++ b/src/rgw/rgw_sal.cc @@ -723,8 +723,8 @@ int RGWRadosStore::forward_request_to_master(RGWUser* user, obj_version *objv, int RGWRadosStore::create_bucket(RGWUser& u, const rgw_bucket& b, const string& zonegroup_id, - const rgw_placement_rule& placement_rule, - const string& swift_ver_location, + rgw_placement_rule& placement_rule, + string& swift_ver_location, const RGWQuotaInfo * pquota_info, map& attrs, RGWBucketInfo& info, @@ -752,6 +752,10 @@ int RGWRadosStore::create_bucket(RGWUser& u, const rgw_bucket& b, if (ret != -ENOENT) { *existed = true; + if (swift_ver_location.empty()) { + swift_ver_location = bucket->get_info().swift_ver_location; + } + placement_rule.inherit_from(bucket->get_info().placement_rule); int r = rgw_op_get_bucket_policy_from_attr(this, u, bucket->get_attrs().attrs, &old_policy); if (r >= 0) { diff --git a/src/rgw/rgw_sal.h b/src/rgw/rgw_sal.h index a9df09a298e7..2be5675c5fe8 100644 --- a/src/rgw/rgw_sal.h +++ b/src/rgw/rgw_sal.h @@ -61,8 +61,8 @@ class RGWStore : public DoutPrefixProvider { virtual int get_bucket(RGWUser* u, const std::string& tenant, const std::string&name, std::unique_ptr* bucket) = 0; virtual int create_bucket(RGWUser& u, const rgw_bucket& b, const string& zonegroup_id, - const rgw_placement_rule& placement_rule, - const string& swift_ver_location, + rgw_placement_rule& placement_rule, + string& swift_ver_location, const RGWQuotaInfo * pquota_info, map& attrs, RGWBucketInfo& info, @@ -597,8 +597,8 @@ class RGWRadosStore : public RGWStore { virtual int get_bucket(RGWUser* u, const std::string& tenant, const std::string&name, std::unique_ptr* bucket) override; virtual int create_bucket(RGWUser& u, const rgw_bucket& b, const string& zonegroup_id, - const rgw_placement_rule& placement_rule, - const string& swift_ver_location, + rgw_placement_rule& placement_rule, + string& swift_ver_location, const RGWQuotaInfo * pquota_info, map& attrs, RGWBucketInfo& info,