int StripObjectMap::save_strip_header(StripObjectHeaderRef strip_header,
KeyValueDB::Transaction t)
{
- strip_header->header->data.clear();
- ::encode(*strip_header, strip_header->header->data);
+ if (strip_header->updated) {
+ strip_header->header->data.clear();
+ ::encode(*strip_header, strip_header->header->data);
- set_header(strip_header->cid, strip_header->oid, *(strip_header->header), t);
+ set_header(strip_header->cid, strip_header->oid, *(strip_header->header), t);
+ }
return 0;
}
tmp->oid = oid;
tmp->cid = cid;
tmp->header = header;
+ tmp->updated = true;
if (strip_header)
*strip_header = tmp;
const ghobject_t &oid,
StripObjectHeaderRef *strip_header)
{
- if (cid != coll_t()) {
+ {
Mutex::Locker l(lock);
pair<coll_t, StripObjectHeaderRef> p;
if (caches.lookup(oid, &p)) {
::decode(*tmp, bliter);
}
- if (tmp->strip_size == 0)
+ if (tmp->strip_size == 0) {
tmp->strip_size = default_strip_size;
+ tmp->updated = true;
+ }
tmp->oid = oid;
tmp->cid = cid;
tmp->strip_size = old_header->strip_size;
tmp->max_size = old_header->max_size;
tmp->bits = old_header->bits;
+ tmp->updated = true;
old_header->header = new_origin_header;
+ old_header->updated = true;
if (target_header)
*target_header = tmp;
tmp->header = old_header->header;
tmp->oid = oid;
tmp->cid = cid;
+ tmp->updated = true;
if (new_header)
*new_header = tmp;
header->max_size = 0;
header->bits.clear();
+ header->updated = true;
r = t.clear_buffer(header);
dout(10) << __func__ << " " << cid << "/" << oid << " = " << r << dendl;
header->bits.resize(size/header->strip_size+1);
header->max_size = size;
+ header->updated = true;
dout(10) << __func__ << " " << cid << "/" << oid << " size " << size << " = "
<< r << dendl;
}
assert(bl_offset == len);
+ header->updated = true;
t.set_buffer_keys(header, OBJECT_STRIP_PREFIX, values);
dout(10) << __func__ << " " << header->cid << "/" << header->oid << " "
<< offset << "~" << len << " = " << r << dendl;
// also block read operation which not should be permitted.
coll_t cid;
ghobject_t oid;
+ bool updated;
bool deleted;
map<pair<string, string>, bufferlist> buffers; // pair(prefix, key)
- StripObjectHeader(): strip_size(default_strip_size), max_size(0), deleted(false) {}
+ StripObjectHeader(): strip_size(default_strip_size), max_size(0), updated(false), deleted(false) {}
void encode(bufferlist &bl) const {
ENCODE_START(1, 1, bl);