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 bcaa72e972dc..da47fe0a7dd3 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));