s->has_manifest = true;
s->size = s->manifest.get_obj_size();
} catch (buffer::error& err) {
- ldout(cct, 20) << "ERROR: couldn't decode manifest" << dendl;
+ ldout(cct, 0) << "ERROR: couldn't decode manifest" << dendl;
return -EIO;
}
ldout(cct, 10) << "manifest: total_size = " << s->manifest.get_obj_size() << dendl;
s->fake_tag = true;
}
}
+ bufferlist pg_ver_bl = s->attrset[RGW_ATTR_PG_VER];
+ if (pg_ver_bl.length()) {
+ bufferlist::iterator pgbl = pg_ver_bl.begin();
+ try {
+ ::decode(s->pg_ver, pgbl);
+ } catch (buffer::error& err) {
+ ldout(cct, 0) << "ERROR: couldn't decode pg ver attr for object " << s->obj << ", non-critical error, ignoring" << dendl;
+ }
+ }
if (s->obj_tag.length())
ldout(cct, 20) << "get_obj_state: setting s->obj_tag to " << string(s->obj_tag.c_str(), s->obj_tag.length()) << dendl;
else
bool keep_tail;
bool is_olh;
bufferlist olh_tag;
+ uint64_t pg_ver;
/* important! don't forget to update copy constructor */
map<string, bufferlist> attrset;
RGWObjState() : is_atomic(false), has_attrs(0), exists(false),
size(0), mtime(0), epoch(0), fake_tag(false), has_manifest(false),
- has_data(false), prefetch_data(false), keep_tail(false), is_olh(false) {}
+ has_data(false), prefetch_data(false), keep_tail(false), is_olh(false),
+ pg_ver(0) {}
RGWObjState(const RGWObjState& rhs) : obj (rhs.obj) {
is_atomic = rhs.is_atomic;
has_attrs = rhs.has_attrs;
keep_tail = rhs.keep_tail;
is_olh = rhs.is_olh;
objv_tracker = rhs.objv_tracker;
+ pg_ver = rhs.pg_ver;
}
bool get_attr(string name, bufferlist& dest) {
}
return false;
}
-
- void clear() {
- has_attrs = false;
- exists = false;
- fake_tag = false;
- epoch = 0;
- size = 0;
- mtime = 0;
- obj_tag.clear();
- shadow_obj.clear();
- attrset.clear();
- data.clear();
- }
};
struct RGWPoolIterCtx {
if (s->system_request && lastmod) {
/* we end up dumping mtime in two different methods, a bit redundant */
dump_epoch_header(s, "Rgwx-Mtime", lastmod);
+ uint64_t pg_ver = 0;
+ map<string, bufferlist>::iterator iter = attrs.find(RGW_ATTR_PG_VER);
+ bufferlist& bl = iter->second;
+ if (bl.length() > 0) {
+ bufferlist::iterator bliter = bl.begin();
+ try {
+ ::decode(pg_ver, bliter);
+ } catch (buffer::error& err) {
+ ldout(s->cct, 0) << "ERROR: failed to decode pg ver attr" << dendl;
+ }
+ }
+ s->cio->print("Rgwx-Obj-PG-Ver: %lld\r\n", (long long)pg_ver);
}
dump_content_length(s, total_len);