From: Radoslaw Zarzynski Date: Wed, 9 Mar 2016 16:11:23 +0000 (+0100) Subject: rgw: ONLY move helper code for custom attrs management. X-Git-Tag: v10.1.0~69^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=52e129ea5935e05cae00a989e280f412b7a6c3ad;p=ceph.git rgw: ONLY move helper code for custom attrs management. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index a2d31e02a501e..b1e943fdbd01f 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -1819,10 +1819,69 @@ void RGWCreateBucket::pre_exec() rgw_bucket_object_pre_exec(s); } +static void prepare_add_del_attrs(const map& orig_attrs, + map& out_attrs, + map& out_rmattrs) +{ + map::const_iterator iter; + + for (iter = orig_attrs.begin(); iter != orig_attrs.end(); ++iter) { + const string& name = iter->first; + /* check if the attr is user-defined metadata item */ + if (name.compare(0, sizeof(RGW_ATTR_META_PREFIX) - 1, RGW_ATTR_META_PREFIX) == 0) { + /* for the objects all existing meta attrs have to be removed */ + out_rmattrs[name] = iter->second; + } else if (out_attrs.find(name) == out_attrs.end()) { + out_attrs[name] = iter->second; + } + } +} + +static void prepare_add_del_attrs(const map& orig_attrs, + const set& rmattr_names, + map& out_attrs, + map& out_rmattrs) +{ + map::const_iterator iter; + + for (iter = orig_attrs.begin(); iter != orig_attrs.end(); ++iter) { + const string& name = iter->first; + /* check if the attr is user-defined metadata item */ + if (name.compare(0, strlen(RGW_ATTR_META_PREFIX), RGW_ATTR_META_PREFIX) == 0) { + /* for the buckets all existing meta attrs are preserved, + except those that are listed in rmattr_names. */ + if (rmattr_names.find(name) != rmattr_names.end()) { + map::iterator aiter = out_attrs.find(name); + if (aiter != out_attrs.end()) { + out_attrs.erase(aiter); + } + out_rmattrs[name] = iter->second; + } + } else if (out_attrs.find(name) == out_attrs.end()) { + out_attrs[name] = iter->second; + } + } +} + + +static void populate_with_generic_attrs(const req_state * const s, + map& out_attrs) +{ + map::const_iterator giter; + + for (giter = s->generic_attrs.begin(); giter != s->generic_attrs.end(); ++giter) { + bufferlist& attrbl = out_attrs[giter->first]; + const string& val = giter->second; + attrbl.clear(); + attrbl.append(val.c_str(), val.size() + 1); + } +} + + void RGWCreateBucket::execute() { RGWAccessControlPolicy old_policy(s->cct); - map attrs; + map attrs, rmattrs; bufferlist aclbl; bufferlist corsbl; bool existed; @@ -2595,64 +2654,6 @@ done: dispose_processor(processor); } - -static void populate_with_generic_attrs(const req_state * const s, - map& out_attrs) -{ - map::const_iterator giter; - - for (giter = s->generic_attrs.begin(); giter != s->generic_attrs.end(); ++giter) { - bufferlist& attrbl = out_attrs[giter->first]; - const string& val = giter->second; - attrbl.clear(); - attrbl.append(val.c_str(), val.size() + 1); - } -} - -static void prepare_add_del_attrs(const map& orig_attrs, - map& out_attrs, - map& out_rmattrs) -{ - map::const_iterator iter; - - for (iter = orig_attrs.begin(); iter != orig_attrs.end(); ++iter) { - const string& name = iter->first; - /* check if the attr is user-defined metadata item */ - if (name.compare(0, sizeof(RGW_ATTR_META_PREFIX) - 1, RGW_ATTR_META_PREFIX) == 0) { - /* for the objects all existing meta attrs have to be removed */ - out_rmattrs[name] = iter->second; - } else if (out_attrs.find(name) == out_attrs.end()) { - out_attrs[name] = iter->second; - } - } -} - -static void prepare_add_del_attrs(const map& orig_attrs, - const set& rmattr_names, - map& out_attrs, - map& out_rmattrs) -{ - map::const_iterator iter; - - for (iter = orig_attrs.begin(); iter != orig_attrs.end(); ++iter) { - const string& name = iter->first; - /* check if the attr is user-defined metadata item */ - if (name.compare(0, strlen(RGW_ATTR_META_PREFIX), RGW_ATTR_META_PREFIX) == 0) { - /* for the buckets all existing meta attrs are preserved, - except those that are listed in rmattr_names. */ - if (rmattr_names.find(name) != rmattr_names.end()) { - map::iterator aiter = out_attrs.find(name); - if (aiter != out_attrs.end()) { - out_attrs.erase(aiter); - } - out_rmattrs[name] = iter->second; - } - } else if (out_attrs.find(name) == out_attrs.end()) { - out_attrs[name] = iter->second; - } - } -} - int RGWPutMetadataAccount::handle_temp_url_update( const map& temp_url_keys) { RGWUserAdminOpState user_op; diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index fbd087f894014..0b993114f4b8f 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -467,6 +467,42 @@ static int get_swift_container_settings(req_state *s, RGWRados *store, RGWAccess return 0; } +#define ACCT_REMOVE_ATTR_PREFIX "HTTP_X_REMOVE_ACCOUNT_META_" +#define ACCT_PUT_ATTR_PREFIX "HTTP_X_ACCOUNT_META_" +#define CONT_REMOVE_ATTR_PREFIX "HTTP_X_REMOVE_CONTAINER_META_" +#define CONT_PUT_ATTR_PREFIX "HTTP_X_CONTAINER_META_" + +static void get_rmattrs_from_headers(const req_state * const s, + const char * const put_prefix, + const char * const del_prefix, + set& rmattr_names) +{ + map& m = s->info.env->get_map(); + map::const_iterator iter; + const size_t put_prefix_len = strlen(put_prefix); + const size_t del_prefix_len = strlen(del_prefix); + + for (iter = m.begin(); iter != m.end(); ++iter) { + size_t prefix_len = 0; + const char * const p = iter->first.c_str(); + + if (strncasecmp(p, del_prefix, del_prefix_len) == 0) { + /* Explicitly requested removal. */ + prefix_len = del_prefix_len; + } else if ((strncasecmp(p, put_prefix, put_prefix_len) == 0) + && iter->second.empty()) { + /* Removal requested by putting an empty value. */ + prefix_len = put_prefix_len; + } + + if (prefix_len > 0) { + string name(RGW_ATTR_META_PREFIX); + name.append(lowercase_dash_http_attr(p + prefix_len)); + rmattr_names.insert(name); + } + } +} + int RGWCreateBucket_ObjStore_SWIFT::get_params() { bool has_policy; @@ -663,42 +699,6 @@ void RGWPutObj_ObjStore_SWIFT::send_response() rgw_flush_formatter_and_reset(s, s->formatter); } -#define ACCT_REMOVE_ATTR_PREFIX "HTTP_X_REMOVE_ACCOUNT_META_" -#define ACCT_PUT_ATTR_PREFIX "HTTP_X_ACCOUNT_META_" -#define CONT_REMOVE_ATTR_PREFIX "HTTP_X_REMOVE_CONTAINER_META_" -#define CONT_PUT_ATTR_PREFIX "HTTP_X_CONTAINER_META_" - -static void get_rmattrs_from_headers(const req_state * const s, - const char * const put_prefix, - const char * const del_prefix, - set& rmattr_names) -{ - map& m = s->info.env->get_map(); - map::const_iterator iter; - const size_t put_prefix_len = strlen(put_prefix); - const size_t del_prefix_len = strlen(del_prefix); - - for (iter = m.begin(); iter != m.end(); ++iter) { - size_t prefix_len = 0; - const char * const p = iter->first.c_str(); - - if (strncasecmp(p, del_prefix, del_prefix_len) == 0) { - /* Explicitly requested removal. */ - prefix_len = del_prefix_len; - } else if ((strncasecmp(p, put_prefix, put_prefix_len) == 0) - && iter->second.empty()) { - /* Removal requested by putting an empty value. */ - prefix_len = put_prefix_len; - } - - if (prefix_len > 0) { - string name(RGW_ATTR_META_PREFIX); - name.append(lowercase_dash_http_attr(p + prefix_len)); - rmattr_names.insert(name); - } - } -} - int RGWPutMetadataAccount_ObjStore_SWIFT::get_params() { if (s->has_bad_meta) {