return src_obj;
}
+static inline void filter_amz_meta(meta_map_t& dest, const meta_map_t& src) {
+ std::copy_if(src.cbegin(), src.cend(),
+ std::inserter(dest, dest.end()),
+ [](const auto& m) {
+ return (boost::algorithm::starts_with(m.first, RGW_AMZ_META_PREFIX));
+ });
+}
+
void metadata_from_attributes(const req_state* s, rgw::sal::RGWObject* obj, KeyValueMap& metadata) {
const auto src_obj = get_object_with_atttributes(s, obj);
if (!src_obj) {
const auto s = res.s;
if (!filter.s3_filter.metadata_filter.kv.empty()) {
// metadata filter exists
- res.cached_metadata = s->info.x_meta_map;
+ filter_amz_meta(res.cached_metadata, s->info.x_meta_map);
metadata_from_attributes(s, obj, res.cached_metadata);
if (!match(filter.s3_filter.metadata_filter, res.cached_metadata)) {
return false;
return 0;
}
+reservation_t::reservation_t(const DoutPrefixProvider *_dpp,
+ rgw::sal::RGWRadosStore* _store,
+ const req_state* _s,
+ rgw::sal::RGWObject* _object,
+ const std::string* _object_name) :
+ dpp(_dpp), store(_store), s(_s), object(_object), object_name(_object_name) {
+ filter_amz_meta(cached_metadata, _s->info.x_meta_map);
+}
+
reservation_t::~reservation_t() {
publish_abort(dpp, *this);
}
KeyValueMap cached_metadata;
reservation_t(const DoutPrefixProvider *_dpp, rgw::sal::RGWRadosStore* _store, const req_state* _s,
- rgw::sal::RGWObject* _object, const std::string* _object_name=nullptr) :
- dpp(_dpp), store(_store), s(_s), object(_object), object_name(_object_name) {}
+ rgw::sal::RGWObject* _object, const std::string* _object_name=nullptr);
// dtor doing resource leak guarding
// aborting the reservation if not already committed or aborted