From 234a989de4ed754ddea644df504eabdbb8f6c0c5 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 16 May 2017 17:33:48 -0400 Subject: [PATCH] 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 --- src/osd/ECTransaction.cc | 7 +++---- src/osd/ReplicatedBackend.cc | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/osd/ECTransaction.cc b/src/osd/ECTransaction.cc index 311977866426..91fbf5a58d9c 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 def68de42274..d51506df2ef2 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); } } -- 2.47.3