From 3d89380c90ab632eb76d3e429788fd81630e7a57 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 18 Jul 2014 22:27:25 -0700 Subject: [PATCH] rgw: move a bunch of stuff into rgw_dencoder This will help out ceph-dencoder ... Signed-off-by: Sage Weil (cherry picked from commit b1a641f307942cbf43036f75ef67fb30441dfe95) --- src/rgw/Makefile.am | 3 +- src/rgw/rgw_acl.cc | 5 -- src/rgw/rgw_acl_s3.cc | 10 --- src/rgw/rgw_acl_s3.h | 1 + src/rgw/rgw_dencoder.cc | 168 ++++++++++++++++++++++++++++++++++++++++ src/rgw/rgw_rados.cc | 148 ----------------------------------- 6 files changed, 171 insertions(+), 164 deletions(-) diff --git a/src/rgw/Makefile.am b/src/rgw/Makefile.am index b93af6d3867ec..3d6886d1bf202 100644 --- a/src/rgw/Makefile.am +++ b/src/rgw/Makefile.am @@ -32,7 +32,8 @@ librgw_la_SOURCES = \ rgw/rgw_metadata.cc \ rgw/rgw_replica_log.cc \ rgw/rgw_keystone.cc \ - rgw/rgw_quota.cc + rgw/rgw_quota.cc \ + rgw/rgw_dencoder.cc librgw_la_CXXFLAGS = -Woverloaded-virtual ${AM_CXXFLAGS} noinst_LTLIBRARIES += librgw.la diff --git a/src/rgw/rgw_acl.cc b/src/rgw/rgw_acl.cc index 025045248479f..868bd65e9021a 100644 --- a/src/rgw/rgw_acl.cc +++ b/src/rgw/rgw_acl.cc @@ -115,8 +115,3 @@ bool RGWAccessControlPolicy::verify_permission(string& uid, int user_perm_mask, } -ACLGroupTypeEnum ACLGrant::uri_to_group(string& uri) -{ - // this is required for backward compatibility - return ACLGrant_S3::uri_to_group(uri); -} diff --git a/src/rgw/rgw_acl_s3.cc b/src/rgw/rgw_acl_s3.cc index 71c868266762a..b47c14df6e82d 100644 --- a/src/rgw/rgw_acl_s3.cc +++ b/src/rgw/rgw_acl_s3.cc @@ -244,16 +244,6 @@ bool ACLGrant_S3::group_to_uri(ACLGroupTypeEnum group, string& uri) } } -ACLGroupTypeEnum ACLGrant_S3::uri_to_group(string& uri) -{ - if (uri.compare(rgw_uri_all_users) == 0) - return ACL_GROUP_ALL_USERS; - else if (uri.compare(rgw_uri_auth_users) == 0) - return ACL_GROUP_AUTHENTICATED_USERS; - - return ACL_GROUP_NONE; -} - bool RGWAccessControlList_S3::xml_end(const char *el) { XMLObjIter iter = find("Grant"); ACLGrant_S3 *grant = static_cast(iter.get_next()); diff --git a/src/rgw/rgw_acl_s3.h b/src/rgw/rgw_acl_s3.h index 6c14d1df1ad31..e0340d8f4be09 100644 --- a/src/rgw/rgw_acl_s3.h +++ b/src/rgw/rgw_acl_s3.h @@ -12,6 +12,7 @@ #include "rgw_xml.h" #include "rgw_acl.h" + using namespace std; class RGWRados; diff --git a/src/rgw/rgw_dencoder.cc b/src/rgw/rgw_dencoder.cc index 2c8c758a64226..e6dc2bafcc963 100644 --- a/src/rgw/rgw_dencoder.cc +++ b/src/rgw/rgw_dencoder.cc @@ -8,6 +8,8 @@ #include "common/Formatter.h" +static string shadow_ns = RGW_OBJ_NS_SHADOW; + void RGWObjManifestPart::generate_test_instances(std::list& o) { o.push_back(new RGWObjManifestPart); @@ -20,6 +22,110 @@ void RGWObjManifestPart::generate_test_instances(std::list& o.push_back(p); } +void RGWObjManifest::obj_iterator::seek(uint64_t o) +{ + ofs = o; + if (manifest->explicit_objs) { + explicit_iter = manifest->objs.upper_bound(ofs); + if (explicit_iter != manifest->objs.begin()) { + --explicit_iter; + } + if (ofs >= manifest->obj_size) { + ofs = manifest->obj_size; + return; + } + update_explicit_pos(); + update_location(); + return; + } + if (o < manifest->get_head_size()) { + rule_iter = manifest->rules.begin(); + stripe_ofs = 0; + stripe_size = manifest->get_head_size(); + if (rule_iter != manifest->rules.end()) { + cur_part_id = rule_iter->second.start_part_num; + cur_override_prefix = rule_iter->second.override_prefix; + } + update_location(); + return; + } + + rule_iter = manifest->rules.upper_bound(ofs); + next_rule_iter = rule_iter; + if (rule_iter != manifest->rules.begin()) { + --rule_iter; + } + + if (rule_iter == manifest->rules.end()) { + update_location(); + return; + } + + RGWObjManifestRule& rule = rule_iter->second; + + if (rule.part_size > 0) { + cur_part_id = rule.start_part_num + (ofs - rule.start_ofs) / rule.part_size; + } else { + cur_part_id = rule.start_part_num; + } + part_ofs = rule.start_ofs + (cur_part_id - rule.start_part_num) * rule.part_size; + + if (rule.stripe_max_size > 0) { + cur_stripe = (ofs - part_ofs) / rule.stripe_max_size; + + stripe_ofs = part_ofs + cur_stripe * rule.stripe_max_size; + if (!cur_part_id && manifest->get_head_size() > 0) { + cur_stripe++; + } + } else { + cur_stripe = 0; + stripe_ofs = part_ofs; + } + + if (!rule.part_size) { + stripe_size = rule.stripe_max_size; + stripe_size = MIN(manifest->get_obj_size() - stripe_ofs, stripe_size); + } else { + uint64_t next = MIN(stripe_ofs + rule.stripe_max_size, part_ofs + rule.part_size); + stripe_size = next - stripe_ofs; + } + + cur_override_prefix = rule.override_prefix; + + update_location(); +} + +void RGWObjManifest::obj_iterator::update_location() +{ + if (manifest->explicit_objs) { + location = explicit_iter->second.loc; + return; + } + + const rgw_obj& head = manifest->get_head(); + + if (ofs < manifest->get_head_size()) { + location = head; + return; + } + + manifest->get_implicit_location(cur_part_id, cur_stripe, ofs, &cur_override_prefix, &location); +} + +void RGWObjManifest::obj_iterator::update_explicit_pos() +{ + ofs = explicit_iter->first; + stripe_ofs = ofs; + + map::iterator next_iter = explicit_iter; + ++next_iter; + if (next_iter != manifest->objs.end()) { + stripe_size = next_iter->first - ofs; + } else { + stripe_size = manifest->obj_size - ofs; + } +} + void RGWObjManifest::generate_test_instances(std::list& o) { RGWObjManifest *m = new RGWObjManifest; @@ -38,6 +144,52 @@ void RGWObjManifest::generate_test_instances(std::list& o) o.push_back(new RGWObjManifest); } +void RGWObjManifest::get_implicit_location(uint64_t cur_part_id, uint64_t cur_stripe, uint64_t ofs, string *override_prefix, rgw_obj *location) +{ + string oid; + if (!override_prefix || override_prefix->empty()) { + oid = prefix; + } else { + oid = *override_prefix; + } + string ns; + + if (!cur_part_id) { + if (ofs < max_head_size) { + *location = head_obj; + return; + } else { + char buf[16]; + snprintf(buf, sizeof(buf), "%d", (int)cur_stripe); + oid += buf; + ns = shadow_ns; + } + } else { + char buf[32]; + if (cur_stripe == 0) { + snprintf(buf, sizeof(buf), ".%d", (int)cur_part_id); + oid += buf; + ns= RGW_OBJ_NS_MULTIPART; + } else { + snprintf(buf, sizeof(buf), ".%d_%d", (int)cur_part_id, (int)cur_stripe); + oid += buf; + ns = shadow_ns; + } + } + + rgw_bucket *bucket; + + if (!tail_bucket.name.empty()) { + bucket = &tail_bucket; + } else { + bucket = &head_obj.bucket; + } + + location->init_ns(*bucket, oid, ns); +} + + + void rgw_log_entry::generate_test_instances(list& o) { rgw_log_entry *e = new rgw_log_entry; @@ -95,6 +247,22 @@ void ACLGranteeType::generate_test_instances(list& o) static string rgw_uri_all_users = RGW_URI_ALL_USERS; static string rgw_uri_auth_users = RGW_URI_AUTH_USERS; +ACLGroupTypeEnum ACLGrant::uri_to_group(string& uri) +{ + // this is required for backward compatibility + return ACLGrant_S3::uri_to_group(uri); +} + +ACLGroupTypeEnum ACLGrant_S3::uri_to_group(string& uri) +{ + if (uri.compare(rgw_uri_all_users) == 0) + return ACL_GROUP_ALL_USERS; + else if (uri.compare(rgw_uri_auth_users) == 0) + return ACL_GROUP_AUTHENTICATED_USERS; + + return ACL_GROUP_NONE; +} + void ACLGrant::generate_test_instances(list& o) { string id, name, email; diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index ebea10ffae9c8..8875993cb9231 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -529,110 +529,6 @@ void RGWObjVersionTracker::prepare_op_for_write(ObjectWriteOperation *op) } } -void RGWObjManifest::obj_iterator::update_explicit_pos() -{ - ofs = explicit_iter->first; - stripe_ofs = ofs; - - map::iterator next_iter = explicit_iter; - ++next_iter; - if (next_iter != manifest->objs.end()) { - stripe_size = next_iter->first - ofs; - } else { - stripe_size = manifest->obj_size - ofs; - } -} - -void RGWObjManifest::obj_iterator::seek(uint64_t o) -{ - ofs = o; - if (manifest->explicit_objs) { - explicit_iter = manifest->objs.upper_bound(ofs); - if (explicit_iter != manifest->objs.begin()) { - --explicit_iter; - } - if (ofs >= manifest->obj_size) { - ofs = manifest->obj_size; - return; - } - update_explicit_pos(); - update_location(); - return; - } - if (o < manifest->get_head_size()) { - rule_iter = manifest->rules.begin(); - stripe_ofs = 0; - stripe_size = manifest->get_head_size(); - if (rule_iter != manifest->rules.end()) { - cur_part_id = rule_iter->second.start_part_num; - cur_override_prefix = rule_iter->second.override_prefix; - } - update_location(); - return; - } - - rule_iter = manifest->rules.upper_bound(ofs); - next_rule_iter = rule_iter; - if (rule_iter != manifest->rules.begin()) { - --rule_iter; - } - - if (rule_iter == manifest->rules.end()) { - update_location(); - return; - } - - RGWObjManifestRule& rule = rule_iter->second; - - if (rule.part_size > 0) { - cur_part_id = rule.start_part_num + (ofs - rule.start_ofs) / rule.part_size; - } else { - cur_part_id = rule.start_part_num; - } - part_ofs = rule.start_ofs + (cur_part_id - rule.start_part_num) * rule.part_size; - - if (rule.stripe_max_size > 0) { - cur_stripe = (ofs - part_ofs) / rule.stripe_max_size; - - stripe_ofs = part_ofs + cur_stripe * rule.stripe_max_size; - if (!cur_part_id && manifest->get_head_size() > 0) { - cur_stripe++; - } - } else { - cur_stripe = 0; - stripe_ofs = part_ofs; - } - - if (!rule.part_size) { - stripe_size = rule.stripe_max_size; - stripe_size = MIN(manifest->get_obj_size() - stripe_ofs, stripe_size); - } else { - uint64_t next = MIN(stripe_ofs + rule.stripe_max_size, part_ofs + rule.part_size); - stripe_size = next - stripe_ofs; - } - - cur_override_prefix = rule.override_prefix; - - update_location(); -} - -void RGWObjManifest::obj_iterator::update_location() -{ - if (manifest->explicit_objs) { - location = explicit_iter->second.loc; - return; - } - - const rgw_obj& head = manifest->get_head(); - - if (ofs < manifest->get_head_size()) { - location = head; - return; - } - - manifest->get_implicit_location(cur_part_id, cur_stripe, ofs, &cur_override_prefix, &location); -} - void RGWObjManifest::obj_iterator::operator++() { if (manifest->explicit_objs) { @@ -811,50 +707,6 @@ const RGWObjManifest::obj_iterator& RGWObjManifest::obj_end() return end_iter; } -void RGWObjManifest::get_implicit_location(uint64_t cur_part_id, uint64_t cur_stripe, uint64_t ofs, string *override_prefix, rgw_obj *location) -{ - string oid; - if (!override_prefix || override_prefix->empty()) { - oid = prefix; - } else { - oid = *override_prefix; - } - string ns; - - if (!cur_part_id) { - if (ofs < max_head_size) { - *location = head_obj; - return; - } else { - char buf[16]; - snprintf(buf, sizeof(buf), "%d", (int)cur_stripe); - oid += buf; - ns = shadow_ns; - } - } else { - char buf[32]; - if (cur_stripe == 0) { - snprintf(buf, sizeof(buf), ".%d", (int)cur_part_id); - oid += buf; - ns= RGW_OBJ_NS_MULTIPART; - } else { - snprintf(buf, sizeof(buf), ".%d_%d", (int)cur_part_id, (int)cur_stripe); - oid += buf; - ns = shadow_ns; - } - } - - rgw_bucket *bucket; - - if (!tail_bucket.name.empty()) { - bucket = &tail_bucket; - } else { - bucket = &head_obj.bucket; - } - - location->init_ns(*bucket, oid, ns); -} - RGWObjManifest::obj_iterator RGWObjManifest::obj_find(uint64_t ofs) { if (ofs > obj_size) { -- 2.39.5