]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/ReplicatedPG: For WRITEFULL replica object, only truncate if new
authorJianpeng Ma <jianpeng.ma@intel.com>
Fri, 12 Jun 2015 06:56:41 +0000 (14:56 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Thu, 2 Jul 2015 00:18:16 +0000 (08:18 +0800)
size less than old size(only truncate to new size)

If new size larger or equal old size, no need do truncate.
It can diretcly overwrite.

Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/osd/ReplicatedPG.cc

index bcaa72e972dcc2781ed1608a5895091aa9d1ac97..da47fe0a7dd3c06d991f98b0c2289f8506e643f2 100644 (file)
@@ -4267,10 +4267,10 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
          }
        } else {
          ctx->mod_desc.mark_unrollbackable();
-         if (obs.exists) {
-           t->truncate(soid, 0);
-         }
          t->write(soid, op.extent.offset, op.extent.length, osd_op.indata, op.flags);
+         if (obs.exists && op.extent.length < oi.size) {
+           t->truncate(soid, op.extent.length);
+         }
        }
        maybe_create_new_object(ctx);
        obs.oi.set_data_digest(osd_op.indata.crc32c(-1));