when download SLO objects, the response header "X-Object-Meta-Static-Large-Object" doesn't decode. Expect value is "True", but there is four bytes gibberish before it.
Fixes: http://tracker.ceph.com/issues/19951
Signed-off-by: Shasha Lu <lu.shasha@eisoo.com>
* processing any input from user in order to prohibit overwriting. */
if (slo_info) {
bufferlist slo_userindicator_bl;
- ::encode("True", slo_userindicator_bl);
+ slo_userindicator_bl.append("True", 4);
emplace_attr(RGW_ATTR_SLO_UINDICATOR, std::move(slo_userindicator_bl));
}
if (!content_type) {
content_type = iter->second.c_str();
}
+ } else if (strcmp(name, RGW_ATTR_SLO_UINDICATOR) == 0) {
+ // this attr has an extra length prefix from ::encode() in prior versions
+ dump_header(s, "X-Object-Meta-Static-Large-Object", "True");
} else if (strncmp(name, RGW_ATTR_META_PREFIX,
sizeof(RGW_ATTR_META_PREFIX)-1) == 0) {
/* User custom metadata. */
if (aiter != std::end(rgw_to_http_attrs)) {
response_attrs[aiter->second] = kv.second.c_str();
+ } else if (strcmp(name, RGW_ATTR_SLO_UINDICATOR) == 0) {
+ // this attr has an extra length prefix from ::encode() in prior versions
+ dump_header(s, "X-Object-Meta-Static-Large-Object", "True");
} else if (strncmp(name, RGW_ATTR_META_PREFIX,
sizeof(RGW_ATTR_META_PREFIX)-1) == 0) {
name += sizeof(RGW_ATTR_META_PREFIX) - 1;