From: Sage Weil Date: Tue, 16 May 2017 21:33:48 +0000 (-0400) Subject: osd: encode snaps more efficiently X-Git-Tag: v12.1.0~10^2~74^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=234a989de4ed754ddea644df504eabdbb8f6c0c5;p=ceph.git osd: encode snaps more efficiently 1- encode into a sized buffer. 2- do not needlessly copy the set<> to a vector<> before encoding. set<> and vector<> encode identically. Since we are converting from sorted set<> to unsorted vector<>, the order doesn't change either. Signed-off-by: Sage Weil --- diff --git a/src/osd/ECTransaction.cc b/src/osd/ECTransaction.cc index 3119778664265..91fbf5a58d9c0 100644 --- a/src/osd/ECTransaction.cc +++ b/src/osd/ECTransaction.cc @@ -166,10 +166,9 @@ void ECTransaction::generate_transactions( if (entry && entry->is_modify() && op.updated_snaps) { - vector snaps( - op.updated_snaps->second.begin(), - op.updated_snaps->second.end()); - ::encode(snaps, entry->snaps); + bufferlist bl(op.updated_snaps->second.size() * 8 + 8); + ::encode(op.updated_snaps->second, bl); + entry->snaps.swap(bl); } ldpp_dout(dpp, 20) << "generate_transactions: " diff --git a/src/osd/ReplicatedBackend.cc b/src/osd/ReplicatedBackend.cc index def68de42274e..d51506df2ef20 100644 --- a/src/osd/ReplicatedBackend.cc +++ b/src/osd/ReplicatedBackend.cc @@ -358,10 +358,9 @@ void generate_transaction( le.mark_unrollbackable(); auto oiter = pgt->op_map.find(le.soid); if (oiter != pgt->op_map.end() && oiter->second.updated_snaps) { - vector snaps( - oiter->second.updated_snaps->second.begin(), - oiter->second.updated_snaps->second.end()); - ::encode(snaps, le.snaps); + bufferlist bl(oiter->second.updated_snaps->second.size() * 8 + 8); + ::encode(oiter->second.updated_snaps->second, bl); + le.snaps.swap(bl); } }