]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ReplicatedBackend: do not set omap header if it is empty 12612/head
authorfangyuxiang <fang.yuxiang@eisoo.com>
Thu, 22 Dec 2016 02:43:27 +0000 (10:43 +0800)
committerfangyuxiang <fang.yuxiang@eisoo.com>
Tue, 27 Dec 2016 08:53:44 +0000 (16:53 +0800)
In replicatedpg backfill, objects have no omap header or keys previously, but an empty omap header will be inserted when they are pushed to replica, which leads leveldb performance degrade seriously when cluster has huge number of objects.
so my opinion is that we does't insert omap header if is size is zero when handle PushOp in recovery.

Signed-off-by: fang yuxiang <fang.yuxiang@eisoo.com>
src/osd/ReplicatedBackend.cc

index c051db8828efa814bce5b73cf4d767393e96bf9a..6077bca922ab3a7e3bd73df828071cd95793d8b8 100644 (file)
@@ -1669,7 +1669,8 @@ void ReplicatedBackend::submit_push_data(
     t->remove(coll, ghobject_t(target_oid));
     t->touch(coll, ghobject_t(target_oid));
     t->truncate(coll, ghobject_t(target_oid), recovery_info.size);
-    t->omap_setheader(coll, ghobject_t(target_oid), omap_header);
+    if (omap_header.length()) 
+      t->omap_setheader(coll, ghobject_t(target_oid), omap_header);
 
     bufferlist bv = attrs[OI_ATTR];
     object_info_t oi(bv);