]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ReplicatedPG: handle removing the old object in finish_copy_op
authorSamuel Just <sam.just@inktank.com>
Sat, 7 Dec 2013 22:52:49 +0000 (14:52 -0800)
committerSamuel Just <sam.just@inktank.com>
Wed, 22 Jan 2014 22:39:17 +0000 (14:39 -0800)
do_osd_ops will need to either copy the old version out of the
way or simply delete it depending on mod_desc.  Thus, defer
handling filling that part in until we finish the copy op.

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/ReplicatedPG.cc

index 2472787c33ad92dc0dd1a1e9962b40fdb0158add..4dc0ee4e8e9532c1f13edb572f11b102a5fb0e55 100644 (file)
@@ -5411,11 +5411,6 @@ void ReplicatedPG::_build_finish_copy_transaction(CopyOpRef cop,
                                                   PGBackend::PGTransaction* t)
 {
   ObjectState& obs = cop->obc->obs;
-
-  if (obs.exists) {
-    t->remove(obs.oi.soid);
-  }
-
   if (cop->temp_cursor.is_initial()) {
     // write directly to final object
     cop->results.temp_oid = obs.oi.soid;
@@ -5433,6 +5428,10 @@ void ReplicatedPG::finish_copyfrom(OpContext *ctx)
   ObjectState& obs = ctx->new_obs;
   CopyFromCallback *cb = static_cast<CopyFromCallback*>(ctx->copy_cb);
 
+  if (obs.exists) {
+    ctx->op_t->remove(obs.oi.soid);
+  }
+
   if (!ctx->obs->exists) {
     ctx->delta_stats.num_objects++;
     obs.exists = true;