From: Sage Weil Date: Fri, 27 Dec 2013 01:32:43 +0000 (-0800) Subject: osd/ReplicatedPG: update snap_mapper for promoted clones X-Git-Tag: v0.77~22^2~38 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c05765e8bb2abc3fc50c0ee9bf2f4a9d2fb70162;p=ceph.git osd/ReplicatedPG: update snap_mapper for promoted clones A clone that comes into existence via promotion takes an entirely different path than a typical clone (which comes into existence via a CLONE op in make_writeable()). Make sure snap_mapper is updated accordingly. Signed-off-by: Sage Weil --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index acda31487f9..e30c79d4c28 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -2501,7 +2501,7 @@ void PG::update_snap_map( } set _snaps(snaps.begin(), snaps.end()); - if (i->is_clone()) { + if (i->is_clone() || i->is_promote()) { snap_mapper.add_oid( i->soid, _snaps, diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 8858367f1b6..d83cb435202 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -4655,6 +4655,11 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type) if (soid.snap < CEPH_NOSNAP) { dout(20) << __func__ << " encoding snaps " << ctx->new_obs.oi.snaps << dendl; ::encode(ctx->new_obs.oi.snaps, ctx->log.back().snaps); + + OSDriver::OSTransaction _t(osdriver.get_transaction(&(ctx->local_t))); + set _snaps(ctx->new_obs.oi.snaps.begin(), + ctx->new_obs.oi.snaps.end()); + snap_mapper.add_oid(soid, _snaps, &_t); } // apply new object state.