]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/ReplicatedPG: update snap_mapper for promoted clones
authorSage Weil <sage@inktank.com>
Fri, 27 Dec 2013 01:32:43 +0000 (17:32 -0800)
committerSage Weil <sage@inktank.com>
Tue, 14 Jan 2014 00:19:42 +0000 (16:19 -0800)
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 <sage@inktank.com>
src/osd/PG.cc
src/osd/ReplicatedPG.cc

index acda31487f9905634496f60fab0aa71084b3fa76..e30c79d4c2817f4dc9690fba4d96d9233920f63c 100644 (file)
@@ -2501,7 +2501,7 @@ void PG::update_snap_map(
        }
        set<snapid_t> _snaps(snaps.begin(), snaps.end());
 
-       if (i->is_clone()) {
+       if (i->is_clone() || i->is_promote()) {
          snap_mapper.add_oid(
            i->soid,
            _snaps,
index 8858367f1b6a5dbca6a2b01e928f890808ded9b2..d83cb435202634fa87efcaa40da8725e2a107a88 100644 (file)
@@ -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<snapid_t> _snaps(ctx->new_obs.oi.snaps.begin(),
+                        ctx->new_obs.oi.snaps.end());
+    snap_mapper.add_oid(soid, _snaps, &_t);
   }
 
   // apply new object state.