From: Samuel Just Date: Sun, 9 Mar 2014 18:43:57 +0000 (-0700) Subject: ReplicatedPG: adjust pending_attrs correctly in copy_from X-Git-Tag: v0.78~46^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F1417%2Fhead;p=ceph.git ReplicatedPG: adjust pending_attrs correctly in copy_from Otherwise, subsequent reads might not get the correct cached attrs. Fixes: #7663 Signed-off-by: Samuel Just --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 2d8d60bf13cc..8040cb4db4d3 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -5537,10 +5537,12 @@ void ReplicatedPG::_write_copy_chunk(CopyOpRef cop, PGBackend::PGTransaction *t) t->touch(cop->results.temp_oid); for (map::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) { @@ -5620,6 +5622,7 @@ void ReplicatedPG::finish_copyfrom(OpContext *ctx) } } ctx->mod_desc.create(); + replace_cached_attrs(ctx, ctx->obc, cb->results->attrs); } else { if (obs.exists) { ctx->op_t->remove(obs.oi.soid); diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index 969a094e74c9..1c9bf24db414 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -122,6 +122,7 @@ public: snapid_t snap_seq; ///< src's snap_seq (if head) librados::snap_set_t snapset; ///< src snapset (if head) bool mirror_snapset; + map attrs; ///< src user attrs CopyResults() : object_size(0), started_temp_obj(false), user_version(0), should_requeue(false), mirror_snapset(false) {}