From 4148bfa63ba65506f0c3591bf0560856397fecea Mon Sep 17 00:00:00 2001 From: "Kaleb S. KEITHLEY" Date: Tue, 5 Apr 2022 19:10:54 -0400 Subject: [PATCH] rgw: zipper: move functions so they're on correct side of API When we eventually split out compilation units for the Rados SAL plugin, a few functions will be out of place wrt the SAL API and will result in undefined references either in the library or the the Rados plugin. Preemptively moving these now, vs. later Signed-off-by: Kaleb S. KEITHLEY --- src/rgw/rgw_common.cc | 17 +++++++++++++++ src/rgw/rgw_common.h | 7 +++++++ src/rgw/rgw_metadata.cc | 26 +++++++++++++++++++++++ src/rgw/rgw_metadata.h | 3 +++ src/rgw/rgw_op.cc | 23 +++++++++++++++++++++ src/rgw/rgw_op.h | 5 +++++ src/rgw/rgw_rados.cc | 24 --------------------- src/rgw/rgw_rados.h | 5 ----- src/rgw/rgw_tools.cc | 46 ----------------------------------------- src/rgw/rgw_tools.h | 12 ----------- 10 files changed, 81 insertions(+), 87 deletions(-) diff --git a/src/rgw/rgw_common.cc b/src/rgw/rgw_common.cc index cf248cbefe03b..5e30c14f3cc55 100644 --- a/src/rgw/rgw_common.cc +++ b/src/rgw/rgw_common.cc @@ -2920,4 +2920,21 @@ void rgw_obj::dump(Formatter *f) const encode_json("key", key, f); } +int rgw_parse_list_of_flags(struct rgw_name_to_flag *mapping, + const string& str, uint32_t *perm) +{ + list strs; + get_str_list(str, strs); + list::iterator iter; + uint32_t v = 0; + for (iter = strs.begin(); iter != strs.end(); ++iter) { + string& s = *iter; + for (int i = 0; mapping[i].type_name; i++) { + if (s.compare(mapping[i].type_name) == 0) + v |= mapping[i].flag; + } + } + *perm = v; + return 0; +} diff --git a/src/rgw/rgw_common.h b/src/rgw/rgw_common.h index 57e9aa575b785..ddb455f041cf9 100644 --- a/src/rgw/rgw_common.h +++ b/src/rgw/rgw_common.h @@ -2066,6 +2066,13 @@ parse_key_value(const std::string_view& in_str, extern boost::optional> parse_key_value(const std::string_view& in_str); +struct rgw_name_to_flag { + const char *type_name; + uint32_t flag; +}; + +extern int rgw_parse_list_of_flags(struct rgw_name_to_flag *mapping, + const std::string& str, uint32_t *perm); /** time parsing */ extern int parse_time(const char *time_str, real_time *time); diff --git a/src/rgw/rgw_metadata.cc b/src/rgw/rgw_metadata.cc index b3ba33eac80e3..41a4713ea6de4 100644 --- a/src/rgw/rgw_metadata.cc +++ b/src/rgw/rgw_metadata.cc @@ -121,6 +121,32 @@ void RGWMetadataLogData::decode_json(JSONObj *obj) { JSONDecoder::decode_json("status", status, obj); } +void rgw_shard_name(const string& prefix, unsigned max_shards, const string& key, string& name, int *shard_id) +{ + uint32_t val = ceph_str_hash_linux(key.c_str(), key.size()); + char buf[16]; + if (shard_id) { + *shard_id = val % max_shards; + } + snprintf(buf, sizeof(buf), "%u", (unsigned)(val % max_shards)); + name = prefix + buf; +} + +void rgw_shard_name(const string& prefix, unsigned max_shards, const string& section, const string& key, string& name) +{ + uint32_t val = ceph_str_hash_linux(key.c_str(), key.size()); + val ^= ceph_str_hash_linux(section.c_str(), section.size()); + char buf[16]; + snprintf(buf, sizeof(buf), "%u", (unsigned)(val % max_shards)); + name = prefix + buf; +} + +void rgw_shard_name(const string& prefix, unsigned shard_id, string& name) +{ + char buf[16]; + snprintf(buf, sizeof(buf), "%u", shard_id); + name = prefix + buf; +} int RGWMetadataLog::add_entry(const DoutPrefixProvider *dpp, const string& hash_key, const string& section, const string& key, bufferlist& bl) { if (!svc.zone->need_to_log_metadata()) diff --git a/src/rgw/rgw_metadata.h b/src/rgw/rgw_metadata.h index e27fe27af233e..cab69aa704a6a 100644 --- a/src/rgw/rgw_metadata.h +++ b/src/rgw/rgw_metadata.h @@ -293,5 +293,8 @@ public: virtual void encode_obj(bufferlist *bl) {} }; +void rgw_shard_name(const std::string& prefix, unsigned max_shards, const std::string& key, std::string& name, int *shard_id); +void rgw_shard_name(const std::string& prefix, unsigned max_shards, const std::string& section, const std::string& key, std::string& name); +void rgw_shard_name(const std::string& prefix, unsigned shard_id, std::string& name); #endif diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 2a9db70f8b9a2..961d3aec8e0e2 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -1539,6 +1539,29 @@ bool RGWOp::generate_cors_headers(string& origin, string& method, string& header return true; } +int rgw_policy_from_attrset(const DoutPrefixProvider *dpp, CephContext *cct, map& attrset, RGWAccessControlPolicy *policy) +{ + map::iterator aiter = attrset.find(RGW_ATTR_ACL); + if (aiter == attrset.end()) + return -EIO; + + bufferlist& bl = aiter->second; + auto iter = bl.cbegin(); + try { + policy->decode(iter); + } catch (buffer::error& err) { + ldpp_dout(dpp, 0) << "ERROR: could not decode policy, caught buffer::error" << dendl; + return -EIO; + } + if (cct->_conf->subsys.should_gather()) { + RGWAccessControlPolicy_S3 *s3policy = static_cast(policy); + ldpp_dout(dpp, 15) << __func__ << " Read AccessControlPolicy"; + s3policy->to_xml(*_dout); + *_dout << dendl; + } + return 0; +} + int RGWGetObj::read_user_manifest_part(rgw::sal::Bucket* bucket, const rgw_bucket_dir_entry& ent, RGWAccessControlPolicy * const bucket_acl, diff --git a/src/rgw/rgw_op.h b/src/rgw/rgw_op.h index c5bd7f62a3d5d..f584d78a718b0 100644 --- a/src/rgw/rgw_op.h +++ b/src/rgw/rgw_op.h @@ -2628,4 +2628,9 @@ inline int parse_value_and_bound( return 0; } +int rgw_policy_from_attrset(const DoutPrefixProvider *dpp, + CephContext *cct, + std::map& attrset, + RGWAccessControlPolicy *policy); + #endif /* CEPH_RGW_OP_H */ diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index e51cba0d4d21e..b9375d50ce1a5 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -1707,30 +1707,6 @@ int RGWRados::decode_policy(const DoutPrefixProvider *dpp, bufferlist& bl, ACLOw return 0; } -int rgw_policy_from_attrset(const DoutPrefixProvider *dpp, CephContext *cct, map& attrset, RGWAccessControlPolicy *policy) -{ - map::iterator aiter = attrset.find(RGW_ATTR_ACL); - if (aiter == attrset.end()) - return -EIO; - - bufferlist& bl = aiter->second; - auto iter = bl.cbegin(); - try { - policy->decode(iter); - } catch (buffer::error& err) { - ldpp_dout(dpp, 0) << "ERROR: could not decode policy, caught buffer::error" << dendl; - return -EIO; - } - if (cct->_conf->subsys.should_gather()) { - RGWAccessControlPolicy_S3 *s3policy = static_cast(policy); - ldpp_dout(dpp, 15) << __func__ << " Read AccessControlPolicy"; - s3policy->to_xml(*_dout); - *_dout << dendl; - } - return 0; -} - - int RGWRados::Bucket::update_bucket_id(const string& new_bucket_id, const DoutPrefixProvider *dpp) { rgw_bucket bucket = bucket_info.bucket; diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index 0bac6c607b181..f145c54da3d2e 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -90,11 +90,6 @@ static inline void get_obj_bucket_and_oid_loc(const rgw_obj& obj, std::string& o } } -int rgw_policy_from_attrset(const DoutPrefixProvider *dpp, - CephContext *cct, - std::map& attrset, - RGWAccessControlPolicy *policy); - struct RGWOLHInfo { rgw_obj target; bool removed; diff --git a/src/rgw/rgw_tools.cc b/src/rgw/rgw_tools.cc index b817a1eccb302..0f3345a3f2891 100644 --- a/src/rgw/rgw_tools.cc +++ b/src/rgw/rgw_tools.cc @@ -101,52 +101,6 @@ int rgw_init_ioctx(const DoutPrefixProvider *dpp, return 0; } -void rgw_shard_name(const string& prefix, unsigned max_shards, const string& key, string& name, int *shard_id) -{ - uint32_t val = ceph_str_hash_linux(key.c_str(), key.size()); - char buf[16]; - if (shard_id) { - *shard_id = val % max_shards; - } - snprintf(buf, sizeof(buf), "%u", (unsigned)(val % max_shards)); - name = prefix + buf; -} - -void rgw_shard_name(const string& prefix, unsigned max_shards, const string& section, const string& key, string& name) -{ - uint32_t val = ceph_str_hash_linux(key.c_str(), key.size()); - val ^= ceph_str_hash_linux(section.c_str(), section.size()); - char buf[16]; - snprintf(buf, sizeof(buf), "%u", (unsigned)(val % max_shards)); - name = prefix + buf; -} - -void rgw_shard_name(const string& prefix, unsigned shard_id, string& name) -{ - char buf[16]; - snprintf(buf, sizeof(buf), "%u", shard_id); - name = prefix + buf; -} - -int rgw_parse_list_of_flags(struct rgw_name_to_flag *mapping, - const string& str, uint32_t *perm) -{ - list strs; - get_str_list(str, strs); - list::iterator iter; - uint32_t v = 0; - for (iter = strs.begin(); iter != strs.end(); ++iter) { - string& s = *iter; - for (int i = 0; mapping[i].type_name; i++) { - if (s.compare(mapping[i].type_name) == 0) - v |= mapping[i].flag; - } - } - - *perm = v; - return 0; -} - int rgw_put_system_obj(const DoutPrefixProvider *dpp, 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 *pattrs) diff --git a/src/rgw/rgw_tools.h b/src/rgw/rgw_tools.h index b842916fd8767..d2ae2548972c0 100644 --- a/src/rgw/rgw_tools.h +++ b/src/rgw/rgw_tools.h @@ -60,18 +60,6 @@ inline int rgw_shard_id(const std::string& key, int max_shards) max_shards); } -void rgw_shard_name(const std::string& prefix, unsigned max_shards, const std::string& key, std::string& name, int *shard_id); -void rgw_shard_name(const std::string& prefix, unsigned max_shards, const std::string& section, const std::string& key, std::string& name); -void rgw_shard_name(const std::string& prefix, unsigned shard_id, std::string& name); - -struct rgw_name_to_flag { - const char *type_name; - uint32_t flag; -}; - -int rgw_parse_list_of_flags(struct rgw_name_to_flag *mapping, - const std::string& str, uint32_t *perm); - int rgw_put_system_obj(const DoutPrefixProvider *dpp, RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const std::string& oid, bufferlist& data, bool exclusive, RGWObjVersionTracker *objv_tracker, real_time set_mtime, optional_yield y, std::map *pattrs = NULL); int rgw_get_system_obj(RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const std::string& key, bufferlist& bl, -- 2.39.5