From 2f8d31e9b1c4b09506bd1b0dad635c6e820783b2 Mon Sep 17 00:00:00 2001 From: Dmytro Iurchenko Date: Mon, 2 Feb 2015 11:27:00 +0200 Subject: [PATCH] rgw: Swift API. Dump container's custom metadata. Fixes: #10665 Backport: hammer, firefly Reported-by: Ahmad Faheem Signed-off-by: Dmytro Iurchenko --- src/rgw/rgw_rest_swift.cc | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index bf869738330de..8631e7b548874 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -245,6 +245,17 @@ static void dump_container_metadata(struct req_state *s, RGWBucketEnt& bucket) if (!s->bucket_info.placement_rule.empty()) { s->cio->print("X-Storage-Policy: %s\r\n", s->bucket_info.placement_rule.c_str()); } + // Dump user-defined metadata items + const size_t PREFIX_LEN = sizeof(RGW_ATTR_META_PREFIX) - 1; + map::iterator iter; + for (iter = s->bucket_attrs.lower_bound(RGW_ATTR_META_PREFIX); iter != s->bucket_attrs.end(); ++iter) { + const char *name = iter->first.c_str(); + if (strncmp(name, RGW_ATTR_META_PREFIX, PREFIX_LEN) == 0) { + s->cio->print("X-Container-Meta-%s: %s\r\n", name + PREFIX_LEN, iter->second.c_str()); + } else { + break; + } + } } } @@ -592,15 +603,15 @@ int RGWGetObj_ObjStore_SWIFT::send_response_data(bufferlist& bl, off_t bl_ofs, o const char *name = iter->first.c_str(); map::iterator aiter = rgw_to_http_attrs.find(name); if (aiter != rgw_to_http_attrs.end()) { - if (aiter->first.compare(RGW_ATTR_CONTENT_TYPE) == 0) { // special handling for content_type - content_type = iter->second.c_str(); - continue; + if (aiter->first.compare(RGW_ATTR_CONTENT_TYPE) == 0) { // special handling for content_type + content_type = iter->second.c_str(); + continue; } response_attrs[aiter->second] = iter->second.c_str(); } else { if (strncmp(name, RGW_ATTR_META_PREFIX, sizeof(RGW_ATTR_META_PREFIX)-1) == 0) { name += sizeof(RGW_ATTR_META_PREFIX) - 1; - s->cio->print("X-%s-Meta-%s: %s\r\n", (!s->object.empty() ? "Object" : "Container"), name, iter->second.c_str()); + s->cio->print("X-Object-Meta-%s: %s\r\n", name, iter->second.c_str()); } } } @@ -647,7 +658,7 @@ void RGWOptionsCORS_ObjStore_SWIFT::send_response() } get_response_params(hdrs, exp_hdrs, &max_age); dump_errno(s); - dump_access_control(s, origin, req_meth, hdrs.c_str(), exp_hdrs.c_str(), max_age); + dump_access_control(s, origin, req_meth, hdrs.c_str(), exp_hdrs.c_str(), max_age); end_header(s, NULL); } @@ -924,7 +935,7 @@ int RGWHandler_ObjStore_SWIFT::init_from_header(struct req_state *s) return 0; s->bucket_name_str = first; - + s->info.effective_uri = "/" + s->bucket_name_str; if (req.size()) { -- 2.39.5