Otherwise, subsequent reads might not get the correct cached attrs.
Fixes: #7663
Signed-off-by: Samuel Just <sam.just@inktank.com>
t->touch(cop->results.temp_oid);
for (map<string,bufferlist>::iterator p = cop->attrs.begin();
p != cop->attrs.end();
- ++p)
+ ++p) {
+ cop->results.attrs[string("_") + p->first] = p->second;
t->setattr(
cop->results.temp_oid,
string("_") + p->first, p->second);
+ }
cop->attrs.clear();
}
if (!cop->temp_cursor.data_complete) {
}
}
ctx->mod_desc.create();
+ replace_cached_attrs(ctx, ctx->obc, cb->results->attrs);
} else {
if (obs.exists) {
ctx->op_t->remove(obs.oi.soid);
snapid_t snap_seq; ///< src's snap_seq (if head)
librados::snap_set_t snapset; ///< src snapset (if head)
bool mirror_snapset;
+ map<string, bufferlist> attrs; ///< src user attrs
CopyResults() : object_size(0), started_temp_obj(false),
user_version(0), should_requeue(false),
mirror_snapset(false) {}