From: Jianpeng Ma Date: Fri, 12 Jun 2015 06:56:41 +0000 (+0800) Subject: osd/ReplicatedPG: For WRITEFULL replica object, only truncate if new X-Git-Tag: v9.0.3~90^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=db1643d4b12ac67e1fca5765ae80001450f96147;p=ceph.git osd/ReplicatedPG: For WRITEFULL replica object, only truncate if new 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 --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index bcaa72e972d..da47fe0a7dd 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -4267,10 +4267,10 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& 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));